Files
connect/api/api/endpoints/profile.py
2025-07-31 21:53:33 +05:00

61 lines
1.8 KiB
Python

from fastapi import (
APIRouter,
Depends,
HTTPException,
status,
)
from sqlalchemy.ext.asyncio import AsyncConnection
from api.db.connection.session import get_connection_dep
from api.db.logic.account import get_user_by_id, update_user_by_id, get_user_by_login
from api.schemas.base import bearer_schema
from api.services.auth import get_current_user
from api.schemas.endpoints.account import UserUpdate
from api.schemas.account.account import User
api_router = APIRouter(
prefix="/profile",
tags=["User accountModel"],
)
@api_router.get("", dependencies=[Depends(bearer_schema)], response_model=User)
async def get_profile(
connection: AsyncConnection = Depends(get_connection_dep), current_user=Depends(get_current_user)
):
user = await get_user_by_login(connection, current_user)
if user is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Account not found")
return user
@api_router.put("", dependencies=[Depends(bearer_schema)], response_model=User)
async def update_profile(
user_update: UserUpdate,
connection: AsyncConnection = Depends(get_connection_dep),
current_user=Depends(get_current_user),
):
user = await get_user_by_login(connection, current_user)
if user is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Account not found")
if user_update.role is None and user_update.login is None:
updated_values = user_update.model_dump(by_alias=True, exclude_none=True)
if updated_values is None:
return user
await update_user_by_id(connection, updated_values, user)
user = await get_user_by_id(connection, user.id)
return user
else:
raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail="Bad body")