feat: pydantic models for swagger

This commit is contained in:
TheNoxium 2025-05-26 13:45:40 +05:00
parent 96dbc744d7
commit 98a4692247
8 changed files with 43 additions and 50 deletions

View File

@ -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]:

View File

@ -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

View File

@ -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,

View File

@ -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)

View File

@ -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,

View File

@ -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,

View File

@ -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

View File

@ -9,3 +9,6 @@ class Auth(BaseModel):
class Refresh(BaseModel):
refresh_token: str
class Access(BaseModel):
access_token: str