from fastapi import ( APIRouter, Body, Depends, Form, HTTPException, Request, Response, 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.services.update_data_validation import update_user_data_changes 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_updata: 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_updata.role == None and user_updata.login == None: update_values = update_user_data_changes(user_updata, user) if update_values is None: return user await update_user_by_id(connection, update_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")