2025-06-12 19:05:38 +00:00

53 lines
1.5 KiB
Python

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