from typing import Any from fastapi import APIRouter, Depends, HTTPException, status from sqlalchemy.orm import Session from app import crud from app.api import deps from app.models.user import User as UserModel from app.schemas.user import User, UserUpdate router = APIRouter() @router.get("/me", response_model=User) def read_user_me( current_user: UserModel = Depends(deps.get_current_user), ) -> Any: """ Get current user. """ return current_user @router.put("/me", response_model=User) def update_user_me( *, db: Session = Depends(deps.get_db), user_in: UserUpdate, current_user: UserModel = Depends(deps.get_current_user), ) -> Any: """ Update own user. """ # Check if email is being updated and if it's already in use if user_in.email and user_in.email != current_user.email: user = crud.user.get_by_email(db, email=user_in.email) if user: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Email already registered" ) # Check if username is being updated and if it's already in use if user_in.username and user_in.username != current_user.username: user = crud.user.get_by_username(db, username=user_in.username) if user: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Username already registered" ) user = crud.user.update(db, db_obj=current_user, obj_in=user_in) return user