123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- from datetime import datetime
- from typing import Any, List
- from fastapi import APIRouter, Body, Depends, HTTPException
- from fastapi.encoders import jsonable_encoder
- from pydantic.networks import EmailStr
- from sqlalchemy.orm import Session
- from sqlalchemy.sql import schema
- from app import crud, models, schemas
- from app.api import deps
- from app.core.config import settings
- from app.utils import send_new_account_email
- router = APIRouter()
- @router.get("/", response_model=List[schemas.Creator])
- def read_creators(
- db: Session = Depends(deps.get_db),
- skip: int = 0,
- limit: int = 100,
- current_creator: models.Creator = Depends(deps.get_current_active_superuser),
- ) -> Any:
- """
- Retrieve users. For superuser.
- """
- creators = crud.creator.get_multi(db, skip=skip, limit=limit)
- return creators
- @router.post("/", response_model=schemas.Creator)
- def create_creator(
- *,
- db: Session = Depends(deps.get_db),
- creator_in: schemas.CreatorCreate,
- current_creator: models.Creator = Depends(deps.get_current_active_superuser),
- ) -> Any:
- """
- Create new user. For superuser.
- """
- creator = crud.creator.get_by_email(db, email=creator_in.email)
- if creator:
- raise HTTPException(
- status_code=400,
- detail="The user with this username already exists in the system.",
- )
- creator = crud.creator.create(db, obj_in=creator_in)
- if settings.EMAILS_ENABLED and creator_in.email:
- send_new_account_email(
- email_to=creator_in.email, username=creator_in.account, password=creator_in.pwd
- )
- return creator
- @router.put("/me", response_model=schemas.Creator)
- def update_creator_me(
- *,
- db: Session = Depends(deps.get_db),
- password: str = Body(None),
- nick_name: str = Body(None),
- email: EmailStr = Body(None),
- phone: str = Body(None),
- brief_introduction: str = Body(None),
- current_creator: models.Creator = Depends(deps.get_current_active_creator),
- ) -> Any:
- """
- Update own user.
- """
- current_creator_data = jsonable_encoder(current_creator)
- creator_in = schemas.CreatorUpdate(**current_creator_data)
- if password is not None:
- creator_in.pwd = password
- if nick_name is not None:
- creator_in.nick_name = nick_name
- if email is not None:
- creator_in.email = email
- if brief_introduction is not None:
- creator_in.brief_introduction = brief_introduction
- if phone is not None:
- creator_in.phone = phone
- creator = crud.creator.update(db, db_obj=current_creator, obj_in=creator_in)
- return creator
- @router.get("/me", response_model=schemas.Creator)
- def read_creator_me(
- db: Session = Depends(deps.get_db),
- current_creator: models.Creator = Depends(deps.get_current_active_creator),
- ) -> Any:
- """
- Get current user.
- """
- return current_creator
- @router.post("/open", response_model=schemas.Creator)
- def create_creator_open(
- *,
- db: Session = Depends(deps.get_db),
- phone: str = Body(...),
- password: str = Body(...),
- email: EmailStr = Body(...),
- account: str = Body(...),
- nick_name: str = Body(None),
- brief_introduction: str = Body(None),
- work_exerience: str = Body(None),
- case_type: str = Body(None)
- ) -> Any:
- """
- Create new user without the need to be logged in.
- """
- if not settings.USERS_OPEN_REGISTRATION:
- raise HTTPException(
- status_code=403,
- detail="Open user registration is forbidden on this server",
- )
- creator = crud.creator.get_by_account(db, account=account)
- if creator:
- raise HTTPException(
- status_code=400,
- detail="The user with this username already exists in the system",
- )
- creator = crud.creator.get_by_email(db, email=email)
- if creator:
- raise HTTPException(
- status_code=400,
- detail="The user with this email already exists in the system",
- )
- try:
- user_in = schemas.CreatorCreate(
- account=account, phone=phone, email=email,
- nick_name=nick_name, brief_introduction=brief_introduction,
- work_exerience=work_exerience, case_type=case_type,
- pwd=password
- )
- except ValueError:
- raise HTTPException(
- status_code=400,
- detail='Please provide a valid mobile phone number',
- )
- creator = crud.creator.create(db, obj_in=user_in)
- return creator
|