From 98a469224707d415814b9aaad551db26eb3e4e1f Mon Sep 17 00:00:00 2001 From: TheNoxium Date: Mon, 26 May 2025 13:45:40 +0500 Subject: [PATCH] feat: pydantic models for swagger --- api/api/db/logic/account.py | 12 ++++-------- api/api/db/logic/keyring.py | 2 +- api/api/endpoints/account.py | 25 ++++++++++--------------- api/api/endpoints/auth.py | 22 ++++++---------------- api/api/endpoints/keyring.py | 12 ++++++------ api/api/endpoints/profile.py | 6 +++--- api/api/schemas/endpoints/account.py | 11 ++++++++++- api/api/schemas/endpoints/auth.py | 3 +++ 8 files changed, 43 insertions(+), 50 deletions(-) diff --git a/api/api/db/logic/account.py b/api/api/db/logic/account.py index de11f6b..7e5811c 100644 --- a/api/api/db/logic/account.py +++ b/api/api/db/logic/account.py @@ -10,7 +10,7 @@ from enum import Enum from api.db.tables.account import account_table from api.schemas.account.account import User -from api.schemas.endpoints.account import UserUpdate, Role, Status +from api.schemas.endpoints.account import AllUser,AllUserResponse async def get_all_users_login_and_id(connection: AsyncConnection,page,limit) -> Optional[User]: """ @@ -27,6 +27,8 @@ async def get_all_users_login_and_id(connection: AsyncConnection,page,limit) -> user_list = [{'id': user.id, 'login': user.login} for user in users] + user_models = [AllUser(id=user['id'], login=user['login']) for user in user_list] + count_query = select(func.count()).select_from(account_table) count_result = await connection.execute(count_query) @@ -34,13 +36,7 @@ async def get_all_users_login_and_id(connection: AsyncConnection,page,limit) -> amount_pages = math.ceil(amount_count / limit) - return { - 'users': user_list, - 'amount_count': amount_count, - 'amount_pages': amount_pages - } - - return user_list + return AllUserResponse(users=user_models, amount_count=amount_count, amount_pages=amount_pages) async def get_user_id(connection: AsyncConnection, id: int) -> Optional[User]: diff --git a/api/api/db/logic/keyring.py b/api/api/db/logic/keyring.py index ad5a431..02a5797 100644 --- a/api/api/db/logic/keyring.py +++ b/api/api/db/logic/keyring.py @@ -8,7 +8,7 @@ from sqlalchemy.ext.asyncio import AsyncConnection from api.db.tables.account import account_keyring_table from api.schemas.account.account_keyring import AccountKeyring -from api.schemas.endpoints.account_keyring import AccountKeyringUpdate, StatusKey, TypeKey + diff --git a/api/api/endpoints/account.py b/api/api/endpoints/account.py index 710a8b1..583e3d6 100644 --- a/api/api/endpoints/account.py +++ b/api/api/endpoints/account.py @@ -17,20 +17,21 @@ from api.db.connection.session import get_connection_dep from api.db.logic.account import get_user_id, update_user_id, create_user,get_user_login,get_all_users_login_and_id from api.schemas.account.account import User,Status -from api.schemas.endpoints.account import UserUpdate +from api.schemas.endpoints.account import UserUpdate,AllUserResponse from api.services.user_role_validation import db_user_role_validation from api.services.update_data_validation import update_user_data_changes + api_router = APIRouter( prefix="/account", tags=["User accountModel"], ) -@api_router.get("") +@api_router.get("",response_model=AllUserResponse) async def get_all_account( request: Request, @@ -53,27 +54,21 @@ async def get_all_account( return user_list -@api_router.get("/{user_id}") -async def get_account(user_id: int, - request: Request, - connection: AsyncConnection = Depends(get_connection_dep) - ): - - +@api_router.get("/{user_id}", response_model=User) +async def get_account(user_id: int, request: Request, connection: AsyncConnection = Depends(get_connection_dep)): current_user = request.state.current_user authorize_user = await db_user_role_validation(connection, current_user) user = await get_user_id(connection, user_id) if user is None: - raise HTTPException( - status_code=status.HTTP_404_NOT_FOUND, - detail="Account not found") + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Account not found") return user -@api_router.post("") + +@api_router.post("", response_model=User) async def create_account( user: UserUpdate, request: Request, @@ -100,7 +95,7 @@ async def create_account( -@api_router.put("/{user_id}") +@api_router.put("/{user_id}", response_model=User) async def update_account( user_id: int, request: Request, @@ -134,7 +129,7 @@ async def update_account( return user -@api_router.delete("/{user_id}") +@api_router.delete("/{user_id}", response_model=User) async def delete_account( user_id: int, request: Request, diff --git a/api/api/endpoints/auth.py b/api/api/endpoints/auth.py index 456b9d9..621d014 100644 --- a/api/api/endpoints/auth.py +++ b/api/api/endpoints/auth.py @@ -26,7 +26,7 @@ from api.services.auth import authenticate_user from api.db.logic.auth import add_new_refresh_token,upgrade_old_refresh_token -from api.schemas.endpoints.auth import Auth +from api.schemas.endpoints.auth import Auth, Access api_router = APIRouter( prefix="/auth", @@ -52,7 +52,7 @@ def get_config(): return Settings() -@api_router.post("") +@api_router.post("", response_model=Access) async def login_for_access_token( user: Auth, response: Response, @@ -95,16 +95,11 @@ async def login_for_access_token( Authorize.set_refresh_cookies(refresh_token) - - return { - "access_token": access_token, - # "access_token_expires": access_token_expires_time, - # "refresh_token": refresh_token, - # "refresh_token_expires": refresh_token_expires_time - } + return Access(access_token=access_token) -@api_router.post("/refresh") + +@api_router.post("/refresh",response_model=Access) async def refresh( request: Request, connection: AsyncConnection = Depends(get_connection_dep), @@ -138,9 +133,4 @@ async def refresh( subject=current_user, expires_time=access_token_expires ) - return { - "access_token": new_access_token, - # "access_token_expires": access_token_expires_time, - # "refresh_token": refresh_token, - # "refresh_token_expires": refresh_token_expires_time - } + return Access(access_token=new_access_token) diff --git a/api/api/endpoints/keyring.py b/api/api/endpoints/keyring.py index e701bc8..2036b84 100644 --- a/api/api/endpoints/keyring.py +++ b/api/api/endpoints/keyring.py @@ -32,7 +32,7 @@ api_router = APIRouter( ) -@api_router.get("/{user_id}/{key_id}") +@api_router.get("/{user_id}/{key_id}", response_model=AccountKeyring) async def get_keyring( key_id: str, request: Request, @@ -53,7 +53,7 @@ async def get_keyring( return keyring -@api_router.post("/{user_id}/{key_id}") +@api_router.post("/{user_id}/{key_id}", response_model=AccountKeyring) async def create_keyring( user_id: int, key_id: str, @@ -69,8 +69,8 @@ async def create_keyring( keyring = await get_key_id(connection, key_id) if keyring is None: - user_new = await create_key(connection,key, key_id, ) - return user_new + keyring_new = await create_key(connection,key, key_id, ) + return keyring_new else: raise HTTPException( @@ -79,7 +79,7 @@ async def create_keyring( -@api_router.put("/{user_id}/{key_id}") +@api_router.put("/{user_id}/{key_id}", response_model=AccountKeyring) async def update_keyring( user_id: int, key_id: str, @@ -115,7 +115,7 @@ async def update_keyring( return keyring -@api_router.delete("/{user_id}/{key_id}") +@api_router.delete("/{user_id}/{key_id}", response_model=AccountKeyring) async def delete_keyring( user_id: int, key_id: str, diff --git a/api/api/endpoints/profile.py b/api/api/endpoints/profile.py index 27ea429..bd504e2 100644 --- a/api/api/endpoints/profile.py +++ b/api/api/endpoints/profile.py @@ -17,7 +17,7 @@ from api.db.logic.account import get_user_id, update_user_id,get_user_login 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( @@ -26,7 +26,7 @@ api_router = APIRouter( ) -@api_router.get("") +@api_router.get("",response_model=User) async def get_profile( request: Request, connection: AsyncConnection = Depends(get_connection_dep), @@ -44,7 +44,7 @@ async def get_profile( return user -@api_router.put("") +@api_router.put("",response_model=User) async def update_profile( request: Request, user_updata: UserUpdate, diff --git a/api/api/schemas/endpoints/account.py b/api/api/schemas/endpoints/account.py index dfea4b8..a55ff16 100644 --- a/api/api/schemas/endpoints/account.py +++ b/api/api/schemas/endpoints/account.py @@ -1,5 +1,5 @@ from enum import Enum -from typing import Optional +from typing import Optional, List from datetime import datetime from pydantic import BaseModel, EmailStr, Field @@ -28,3 +28,12 @@ class UserUpdate(BaseModel): creator_id: Optional[int] = None created_at: Optional[datetime] = None status: Optional[Status] = None + +class AllUser(BaseModel): + id: int + login: str + +class AllUserResponse(BaseModel): + users: List[AllUser] + amount_count: int + amount_pages: int diff --git a/api/api/schemas/endpoints/auth.py b/api/api/schemas/endpoints/auth.py index bfe0671..011d458 100644 --- a/api/api/schemas/endpoints/auth.py +++ b/api/api/schemas/endpoints/auth.py @@ -9,3 +9,6 @@ class Auth(BaseModel): class Refresh(BaseModel): refresh_token: str + +class Access(BaseModel): + access_token: str