|
@@ -0,0 +1,140 @@
|
|
|
+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.
|
|
|
+# """
|
|
|
+# users = crud.user.get_multi(db, skip=skip, limit=limit)
|
|
|
+# return users
|
|
|
+
|
|
|
+
|
|
|
+# @router.post("/", response_model=schemas.Creator)
|
|
|
+# def create_creator(
|
|
|
+# *,
|
|
|
+# db: Session = Depends(deps.get_db),
|
|
|
+# user_in: schemas.CreatorCreate,
|
|
|
+# current_user: models.Creator = Depends(deps.get_current_active_superuser),
|
|
|
+# ) -> Any:
|
|
|
+# """
|
|
|
+# Create new user.
|
|
|
+# """
|
|
|
+# user = crud.user.get_by_email(db, email=user_in.email)
|
|
|
+# if user:
|
|
|
+# raise HTTPException(
|
|
|
+# status_code=400,
|
|
|
+# detail="The user with this username already exists in the system.",
|
|
|
+# )
|
|
|
+# user = crud.user.create(db, obj_in=user_in)
|
|
|
+# if settings.EMAILS_ENABLED and user_in.email:
|
|
|
+# send_new_account_email(
|
|
|
+# email_to=user_in.email, username=user_in.email, password=user_in.password
|
|
|
+# )
|
|
|
+# return user
|
|
|
+
|
|
|
+
|
|
|
+@router.put("/me", response_model=schemas.Creator)
|
|
|
+def update_creator_me(
|
|
|
+ *,
|
|
|
+ db: Session = Depends(deps.get_db),
|
|
|
+ password: str = Body(None),
|
|
|
+ full_name: str = Body(None),
|
|
|
+ email: EmailStr = 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.password = password
|
|
|
+ if full_name is not None:
|
|
|
+ creator_in.full_name = full_name
|
|
|
+ if email is not None:
|
|
|
+ creator_in.email = email
|
|
|
+ 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
|