From c3c421f66f9fdf333fb4aa3c3f552c9c1c20ab8d Mon Sep 17 00:00:00 2001 From: TheNoxium Date: Wed, 21 May 2025 14:58:06 +0500 Subject: [PATCH 01/11] feat: get all users --- api/api/db/logic/account.py | 16 ++++++++++++++++ api/api/endpoints/account.py | 22 +++++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/api/api/db/logic/account.py b/api/api/db/logic/account.py index ef472e1..7307386 100644 --- a/api/api/db/logic/account.py +++ b/api/api/db/logic/account.py @@ -11,6 +11,22 @@ from api.db.tables.account import account_table from api.schemas.account.account import User from api.schemas.endpoints.account import UserUpdate, Role, Status +async def get_all_users_login_and_id(connection: AsyncConnection) -> Optional[User]: + """ + Получает id и login всех юзеров + """ + query = select(account_table.c.id, account_table.c.login) + + # Выполняем запрос + result = await connection.execute(query) + + # Получаем все результаты + users = result.fetchall() + + user_list = [{'id': user.id, 'login': user.login} for user in users] + + return user_list + async def get_user_id(connection: AsyncConnection, id: int) -> Optional[User]: """ diff --git a/api/api/endpoints/account.py b/api/api/endpoints/account.py index f2a9fcf..15d6307 100644 --- a/api/api/endpoints/account.py +++ b/api/api/endpoints/account.py @@ -14,7 +14,7 @@ from sqlalchemy.ext.asyncio import AsyncConnection 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 +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 @@ -30,6 +30,26 @@ api_router = APIRouter( ) +@api_router.get("/") +async def get_all_account( + + 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_list = await get_all_users_login_and_id(connection) + + if user_list is None: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="Accounts not found") + + return user_list + @api_router.get("/{user_id}") async def get_account(user_id: int, -- 2.39.5 From e47e449a3629a808bbfcc7a72f2b4da000cc2ff0 Mon Sep 17 00:00:00 2001 From: TheNoxium Date: Fri, 23 May 2025 12:41:32 +0500 Subject: [PATCH 02/11] feat: add page, limit --- api/api/db/logic/account.py | 25 ++++++++++++++++++++----- api/api/endpoints/account.py | 6 ++++-- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/api/api/db/logic/account.py b/api/api/db/logic/account.py index 7307386..de11f6b 100644 --- a/api/api/db/logic/account.py +++ b/api/api/db/logic/account.py @@ -1,8 +1,9 @@ from typing import Optional +import math from datetime import datetime, timezone -from sqlalchemy import insert, select +from sqlalchemy import insert, select, func from sqlalchemy.ext.asyncio import AsyncConnection from enum import Enum @@ -11,20 +12,34 @@ from api.db.tables.account import account_table from api.schemas.account.account import User from api.schemas.endpoints.account import UserUpdate, Role, Status -async def get_all_users_login_and_id(connection: AsyncConnection) -> Optional[User]: +async def get_all_users_login_and_id(connection: AsyncConnection,page,limit) -> Optional[User]: """ Получает id и login всех юзеров """ - query = select(account_table.c.id, account_table.c.login) + first_user = page*limit-(limit-1) + last_user = first_user+(limit-1) + + query = select(account_table.c.id, account_table.c.login).where(account_table.c.id.between(first_user, last_user )) - # Выполняем запрос result = await connection.execute(query) - # Получаем все результаты users = result.fetchall() user_list = [{'id': user.id, 'login': user.login} for user in users] + count_query = select(func.count()).select_from(account_table) + + count_result = await connection.execute(count_query) + amount_count = count_result.scalar() + amount_pages = math.ceil(amount_count / limit) + + + return { + 'users': user_list, + 'amount_count': amount_count, + 'amount_pages': amount_pages + } + return user_list diff --git a/api/api/endpoints/account.py b/api/api/endpoints/account.py index 15d6307..0700ae9 100644 --- a/api/api/endpoints/account.py +++ b/api/api/endpoints/account.py @@ -30,10 +30,12 @@ api_router = APIRouter( ) -@api_router.get("/") +@api_router.get("") async def get_all_account( request: Request, + page: int = 3, + limit: int = 10, connection: AsyncConnection = Depends(get_connection_dep) ): @@ -41,7 +43,7 @@ async def get_all_account( current_user = request.state.current_user authorize_user = await db_user_role_validation(connection, current_user) - user_list = await get_all_users_login_and_id(connection) + user_list = await get_all_users_login_and_id(connection,page,limit) if user_list is None: raise HTTPException( -- 2.39.5 From 96dbc744d71bd980a22944490764e677aba0e71c Mon Sep 17 00:00:00 2001 From: TheNoxium Date: Fri, 23 May 2025 12:48:09 +0500 Subject: [PATCH 03/11] feat: add query params --- api/api/endpoints/account.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/api/endpoints/account.py b/api/api/endpoints/account.py index 0700ae9..710a8b1 100644 --- a/api/api/endpoints/account.py +++ b/api/api/endpoints/account.py @@ -34,8 +34,8 @@ api_router = APIRouter( async def get_all_account( request: Request, - page: int = 3, - limit: int = 10, + page: int , + limit: int , connection: AsyncConnection = Depends(get_connection_dep) ): -- 2.39.5 From 98a469224707d415814b9aaad551db26eb3e4e1f Mon Sep 17 00:00:00 2001 From: TheNoxium Date: Mon, 26 May 2025 13:45:40 +0500 Subject: [PATCH 04/11] 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 -- 2.39.5 From 320c13183f6e2e5ad4ef329fa75a99d871e7bbf8 Mon Sep 17 00:00:00 2001 From: TheNoxium Date: Wed, 28 May 2025 14:10:00 +0500 Subject: [PATCH 05/11] feat: add TypeAdapter --- api/api/db/logic/account.py | 44 +++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/api/api/db/logic/account.py b/api/api/db/logic/account.py index 7e5811c..2c58497 100644 --- a/api/api/db/logic/account.py +++ b/api/api/db/logic/account.py @@ -3,6 +3,8 @@ import math from datetime import datetime, timezone +from pydantic import TypeAdapter + from sqlalchemy import insert, select, func from sqlalchemy.ext.asyncio import AsyncConnection from enum import Enum @@ -10,33 +12,45 @@ 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 AllUser,AllUserResponse +from api.schemas.endpoints.account import AllUser, AllUserResponse -async def get_all_users_login_and_id(connection: AsyncConnection,page,limit) -> Optional[User]: + +async def get_all_users_login_and_id(connection: AsyncConnection, page, limit) -> Optional[User]: """ Получает id и login всех юзеров """ - first_user = page*limit-(limit-1) - last_user = first_user+(limit-1) - query = select(account_table.c.id, account_table.c.login).where(account_table.c.id.between(first_user, last_user )) + user_adapter = TypeAdapter(AllUser) + response_adapter = TypeAdapter(AllUserResponse) - result = await connection.execute(query) + first_user = page*limit-(limit) - users = result.fetchall() - - 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] + query = ( + select(account_table.c.id, account_table.c.login) + .order_by(account_table.c.id) + .offset(first_user) + .limit(limit) + ) count_query = select(func.count()).select_from(account_table) + result = await connection.execute(query) count_result = await connection.execute(count_query) - amount_count = count_result.scalar() - amount_pages = math.ceil(amount_count / limit) + users_data = result.fetchall() + total_count = count_result.scalar() + total_pages = math.ceil(total_count / limit) - return AllUserResponse(users=user_models, amount_count=amount_count, amount_pages=amount_pages) + validated_users = [ + user_adapter.validate_python({"id": u.id, "login": u.login}) + for u in users_data + ] + + return response_adapter.validate_python({ + "users": validated_users, + "amount_count": total_count, + "amount_pages": total_pages + }) async def get_user_id(connection: AsyncConnection, id: int) -> Optional[User]: @@ -116,8 +130,6 @@ async def create_user(connection: AsyncConnection, user: User, creator_id: int) status=user.status.value ) - - await connection.execute(query) await connection.commit() -- 2.39.5 From 5094b8467548a3eecdc68020a6e31a13984e80cd Mon Sep 17 00:00:00 2001 From: TheNoxium Date: Fri, 30 May 2025 08:51:49 +0500 Subject: [PATCH 06/11] fix: TypeAdapter --- api/api/db/logic/account.py | 24 +++++++++--------------- api/api/endpoints/account.py | 3 --- api/api/schemas/endpoints/account.py | 4 +++- 3 files changed, 12 insertions(+), 19 deletions(-) diff --git a/api/api/db/logic/account.py b/api/api/db/logic/account.py index 2c58497..91dace0 100644 --- a/api/api/db/logic/account.py +++ b/api/api/db/logic/account.py @@ -3,8 +3,6 @@ import math from datetime import datetime, timezone -from pydantic import TypeAdapter - from sqlalchemy import insert, select, func from sqlalchemy.ext.asyncio import AsyncConnection from enum import Enum @@ -12,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 AllUser, AllUserResponse +from api.schemas.endpoints.account import AllUserResponse, all_user_adapter async def get_all_users_login_and_id(connection: AsyncConnection, page, limit) -> Optional[User]: @@ -20,9 +18,6 @@ async def get_all_users_login_and_id(connection: AsyncConnection, page, limit) - Получает id и login всех юзеров """ - user_adapter = TypeAdapter(AllUser) - response_adapter = TypeAdapter(AllUserResponse) - first_user = page*limit-(limit) query = ( @@ -41,16 +36,15 @@ async def get_all_users_login_and_id(connection: AsyncConnection, page, limit) - total_count = count_result.scalar() total_pages = math.ceil(total_count / limit) - validated_users = [ - user_adapter.validate_python({"id": u.id, "login": u.login}) - for u in users_data - ] + validated_users = all_user_adapter.validate_python( + [{"id": u.id, "login": u.login} for u in users_data] + ) - return response_adapter.validate_python({ - "users": validated_users, - "amount_count": total_count, - "amount_pages": total_pages - }) + return AllUserResponse( + users=validated_users, + amount_count=total_count, + amount_pages=total_pages + ) async def get_user_id(connection: AsyncConnection, id: int) -> Optional[User]: diff --git a/api/api/endpoints/account.py b/api/api/endpoints/account.py index 583e3d6..f1a6ddd 100644 --- a/api/api/endpoints/account.py +++ b/api/api/endpoints/account.py @@ -1,11 +1,8 @@ from fastapi import ( APIRouter, - Body, Depends, - Form, HTTPException, Request, - Response, status, ) diff --git a/api/api/schemas/endpoints/account.py b/api/api/schemas/endpoints/account.py index a55ff16..86d0902 100644 --- a/api/api/schemas/endpoints/account.py +++ b/api/api/schemas/endpoints/account.py @@ -1,7 +1,7 @@ from enum import Enum from typing import Optional, List from datetime import datetime -from pydantic import BaseModel, EmailStr, Field +from pydantic import BaseModel, EmailStr, Field, TypeAdapter # Таблица для получения информации из запроса @@ -37,3 +37,5 @@ class AllUserResponse(BaseModel): users: List[AllUser] amount_count: int amount_pages: int + +all_user_adapter = TypeAdapter(List[AllUser]) -- 2.39.5 From 31236d558f38039b41f160692490ffb06a5c1901 Mon Sep 17 00:00:00 2001 From: TheNoxium Date: Mon, 2 Jun 2025 15:56:44 +0500 Subject: [PATCH 07/11] feat: model update --- api/api/db/logic/account.py | 20 ++++++++++++++++++-- api/api/schemas/endpoints/account.py | 7 +++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/api/api/db/logic/account.py b/api/api/db/logic/account.py index 91dace0..d4ad466 100644 --- a/api/api/db/logic/account.py +++ b/api/api/db/logic/account.py @@ -21,7 +21,14 @@ async def get_all_users_login_and_id(connection: AsyncConnection, page, limit) - first_user = page*limit-(limit) query = ( - select(account_table.c.id, account_table.c.login) + select(account_table.c.id, + account_table.c.name, + account_table.c.login, + account_table.c.email, + account_table.c.bind_tenant_id, + account_table.c.role, + account_table.c.created_at, + account_table.c.status) .order_by(account_table.c.id) .offset(first_user) .limit(limit) @@ -36,8 +43,17 @@ async def get_all_users_login_and_id(connection: AsyncConnection, page, limit) - total_count = count_result.scalar() total_pages = math.ceil(total_count / limit) + + print(users_data) validated_users = all_user_adapter.validate_python( - [{"id": u.id, "login": u.login} for u in users_data] + [{"id": u.id, + "name": u.name, + "login": u.login, + "email": u.email, + "bind_tenant_id": u.bind_tenant_id, + "role": u.role.name, + "created_at": u.created_at, + "status": u.status.name} for u in users_data] ) return AllUserResponse( diff --git a/api/api/schemas/endpoints/account.py b/api/api/schemas/endpoints/account.py index 86d0902..be323db 100644 --- a/api/api/schemas/endpoints/account.py +++ b/api/api/schemas/endpoints/account.py @@ -31,7 +31,14 @@ class UserUpdate(BaseModel): class AllUser(BaseModel): id: int + name: str login: str + email: EmailStr + bind_tenant_id: str + role: Role + created_at: datetime + status: Status + class AllUserResponse(BaseModel): users: List[AllUser] -- 2.39.5 From c60d19262ec53ec3f53a18b6efe78e47453170e9 Mon Sep 17 00:00:00 2001 From: TheNoxium Date: Tue, 3 Jun 2025 13:01:10 +0500 Subject: [PATCH 08/11] fix: model, name --- api/api/db/logic/account.py | 19 +++---------- api/api/db/tables/account.py | 30 ++++++++++---------- api/api/endpoints/account.py | 9 +++--- api/api/endpoints/auth.py | 2 -- api/api/endpoints/keyring.py | 5 ++-- api/api/schemas/account/account.py | 19 ++----------- api/api/schemas/account/account_keyring.py | 23 ++++----------- api/api/schemas/endpoints/account.py | 25 +++++----------- api/api/schemas/endpoints/account_keyring.py | 19 ++----------- api/api/services/auth.py | 6 ++-- api/api/services/update_data_validation.py | 10 ++++--- api/api/services/user_role_validation.py | 6 ++-- 12 files changed, 59 insertions(+), 114 deletions(-) diff --git a/api/api/db/logic/account.py b/api/api/db/logic/account.py index d4ad466..e1cba7f 100644 --- a/api/api/db/logic/account.py +++ b/api/api/db/logic/account.py @@ -13,9 +13,9 @@ from api.schemas.account.account import User from api.schemas.endpoints.account import AllUserResponse, all_user_adapter -async def get_all_users_login_and_id(connection: AsyncConnection, page, limit) -> Optional[User]: +async def get_user_accaunt_page(connection: AsyncConnection, page, limit) -> Optional[User]: """ - Получает id и login всех юзеров + Получает список ползовелей заданных значениями page, limit. """ first_user = page*limit-(limit) @@ -39,22 +39,11 @@ async def get_all_users_login_and_id(connection: AsyncConnection, page, limit) - result = await connection.execute(query) count_result = await connection.execute(count_query) - users_data = result.fetchall() + users_data = result.mappings().all() total_count = count_result.scalar() total_pages = math.ceil(total_count / limit) - - print(users_data) - validated_users = all_user_adapter.validate_python( - [{"id": u.id, - "name": u.name, - "login": u.login, - "email": u.email, - "bind_tenant_id": u.bind_tenant_id, - "role": u.role.name, - "created_at": u.created_at, - "status": u.status.name} for u in users_data] - ) + validated_users = all_user_adapter.validate_python(users_data) return AllUserResponse( users=validated_users, diff --git a/api/api/db/tables/account.py b/api/api/db/tables/account.py index d2fe3a2..f7c5c61 100644 --- a/api/api/db/tables/account.py +++ b/api/api/db/tables/account.py @@ -8,16 +8,16 @@ from api.db import metadata class AccountRole(str,Enum): - OWNER = auto() - ADMIN = auto() - EDITOR = auto() - VIEWER = auto() + OWNER = 'OWNER' + ADMIN = 'ADMIN' + EDITOR = 'EDITOR' + VIEWER = 'VIEWER' class AccountStatus(str,Enum): - ACTIVE = auto() - DISABLED = auto() - BLOCKED = auto() - DELETED = auto() + ACTIVE = 'ACTIVE' + DISABLED = 'DISABLED' + BLOCKED = 'BLOCKED' + DELETED = 'DELETED' account_table = Table( @@ -38,15 +38,15 @@ account_table = Table( ) class KeyType(str,Enum): - PASSWORD = auto() - ACCESS_TOKEN = auto() - REFRESH_TOKEN = auto() - API_KEY = auto() + PASSWORD = "PASSWORD" + ACCESS_TOKEN = "ACCESS_TOKEN" + REFRESH_TOKEN = "REFRESH_TOKEN" + API_KEY = "API_KEY" class KeyStatus(str,Enum): - ACTIVE = auto() - EXPIRED = auto() - DELETED = auto() + ACTIVE = "ACTIVE" + EXPIRED = "EXPIRED" + DELETED = "DELETED" account_keyring_table = Table( 'account_keyring', metadata, diff --git a/api/api/endpoints/account.py b/api/api/endpoints/account.py index f1a6ddd..d22705e 100644 --- a/api/api/endpoints/account.py +++ b/api/api/endpoints/account.py @@ -11,9 +11,10 @@ from sqlalchemy.ext.asyncio import AsyncConnection 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.db.logic.account import get_user_id, update_user_id, create_user,get_user_login,get_user_accaunt_page -from api.schemas.account.account import User,Status +from api.schemas.account.account import User +from api.db.tables.account import AccountStatus from api.schemas.endpoints.account import UserUpdate,AllUserResponse @@ -41,7 +42,7 @@ async def get_all_account( current_user = request.state.current_user authorize_user = await db_user_role_validation(connection, current_user) - user_list = await get_all_users_login_and_id(connection,page,limit) + user_list = await get_user_accaunt_page(connection,page,limit) if user_list is None: raise HTTPException( @@ -146,7 +147,7 @@ async def delete_account( detail="Account not found") - user_update = UserUpdate(status=Status.DELETED.value) + user_update = UserUpdate(status=AccountStatus.DELETED.value) update_values = update_user_data_changes(user_update,user) diff --git a/api/api/endpoints/auth.py b/api/api/endpoints/auth.py index 621d014..5758c7f 100644 --- a/api/api/endpoints/auth.py +++ b/api/api/endpoints/auth.py @@ -2,9 +2,7 @@ from datetime import datetime, timedelta, timezone from fastapi import ( APIRouter, - Body, Depends, - Form, HTTPException, Request, Response, diff --git a/api/api/endpoints/keyring.py b/api/api/endpoints/keyring.py index 2036b84..8994007 100644 --- a/api/api/endpoints/keyring.py +++ b/api/api/endpoints/keyring.py @@ -17,7 +17,8 @@ from api.db.connection.session import get_connection_dep from api.db.logic.keyring import get_key_id,create_key,update_key_id -from api.schemas.account.account import Status + +from api.db.tables.account import KeyStatus from api.schemas.endpoints.account_keyring import AccountKeyringUpdate from api.schemas.account.account_keyring import AccountKeyring @@ -135,7 +136,7 @@ async def delete_keyring( detail="keyring not found") - keyring_update = AccountKeyringUpdate(status=Status.DELETED.value) + keyring_update = AccountKeyringUpdate(status=KeyStatus.DELETED.value) update_values = update_key_data_changes(keyring_update,keyring) diff --git a/api/api/schemas/account/account.py b/api/api/schemas/account/account.py index 4a1557b..1ceb3b0 100644 --- a/api/api/schemas/account/account.py +++ b/api/api/schemas/account/account.py @@ -1,22 +1,9 @@ import datetime -from enum import Enum from datetime import datetime from typing import Optional from pydantic import BaseModel, EmailStr, Field +from api.db.tables.account import AccountRole,AccountStatus -# Модель для хранения информации из запроса - -class Role(Enum): - OWNER = 'OWNER' - ADMIN = 'ADMIN' - EDITOR = 'EDITOR' - VIEWER = 'VIEWER' - -class Status(Enum): - ACTIVE = 'ACTIVE' - DISABLED = 'DISABLED' - BLOCKED = 'BLOCKED' - DELETED = 'DELETED' class User(BaseModel): id: Optional[int] = None @@ -24,8 +11,8 @@ class User(BaseModel): login: str = Field(..., max_length=100) email: Optional[EmailStr] = Field(None, max_length=100) # Электронная почта (может быть None) bind_tenant_id: Optional[str] = Field(None, max_length=40) - role: Role + role: AccountRole meta: dict creator_id: Optional[int] = None created_at: datetime - status: Status + status: AccountStatus diff --git a/api/api/schemas/account/account_keyring.py b/api/api/schemas/account/account_keyring.py index c9b9052..b504797 100644 --- a/api/api/schemas/account/account_keyring.py +++ b/api/api/schemas/account/account_keyring.py @@ -1,28 +1,15 @@ import datetime -from enum import Enum -from typing import Optional, Dict +from typing import Optional from pydantic import BaseModel, Field from datetime import datetime - -# Модель для хранения информации из запроса - -class TypeKey(Enum): - PASSWORD = "PASSWORD" - ACCESS_TOKEN = "ACCESS_TOKEN" - REFRESH_TOKEN = "REFRESH_TOKEN" - API_KEY = "API_KEY" - -class StatusKey(Enum): - ACTIVE = "ACTIVE" - EXPIRED = "EXPIRED" - DELETED = "DELETED" +from api.db.tables.account import KeyType,KeyStatus class AccountKeyring(BaseModel): owner_id: int - key_type: TypeKey # Используем тот же KeyType - key_id: Optional[str] = Field(None, max_length=40) # Изменено на None как default + key_type: KeyType + key_id: Optional[str] = Field(None, max_length=40) key_value: str = Field(..., max_length=255) created_at: datetime expiry: Optional[datetime] = None - status: StatusKey + status: KeyStatus diff --git a/api/api/schemas/endpoints/account.py b/api/api/schemas/endpoints/account.py index be323db..c91a9a2 100644 --- a/api/api/schemas/endpoints/account.py +++ b/api/api/schemas/endpoints/account.py @@ -1,21 +1,10 @@ -from enum import Enum from typing import Optional, List from datetime import datetime from pydantic import BaseModel, EmailStr, Field, TypeAdapter -# Таблица для получения информации из запроса +from api.db.tables.account import AccountRole,AccountStatus -class Role(Enum): - OWNER = 'OWNER' - ADMIN = 'ADMIN' - EDITOR = 'EDITOR' - VIEWER = 'VIEWER' -class Status(Enum): - ACTIVE = 'ACTIVE' - DISABLED = 'DISABLED' - BLOCKED = 'BLOCKED' - DELETED = 'DELETED' class UserUpdate(BaseModel): id: Optional[int] = None @@ -23,21 +12,21 @@ class UserUpdate(BaseModel): login: Optional[str] = Field(None, max_length=100) email: Optional[EmailStr] = None bind_tenant_id: Optional[str] = Field(None, max_length=40) - role: Optional[Role] = None + role: Optional[AccountRole] = None meta: Optional[dict] = None creator_id: Optional[int] = None created_at: Optional[datetime] = None - status: Optional[Status] = None + status: Optional[AccountStatus] = None class AllUser(BaseModel): id: int name: str login: str - email: EmailStr - bind_tenant_id: str - role: Role + email: Optional[EmailStr] = None + bind_tenant_id: Optional[str] = None + role: AccountRole created_at: datetime - status: Status + status: AccountStatus class AllUserResponse(BaseModel): diff --git a/api/api/schemas/endpoints/account_keyring.py b/api/api/schemas/endpoints/account_keyring.py index 5587fef..5e646dc 100644 --- a/api/api/schemas/endpoints/account_keyring.py +++ b/api/api/schemas/endpoints/account_keyring.py @@ -1,28 +1,15 @@ import datetime -from enum import Enum from typing import Optional from pydantic import BaseModel, Field from datetime import datetime - -# Таблица для получения информации из запроса - -class TypeKey(Enum): - PASSWORD = "PASSWORD" - ACCESS_TOKEN = "ACCESS_TOKEN" - REFRESH_TOKEN = "REFRESH_TOKEN" - API_KEY = "API_KEY" - -class StatusKey(Enum): - ACTIVE = "ACTIVE" - EXPIRED = "EXPIRED" - DELETED = "DELETED" +from api.db.tables.account import KeyType,KeyStatus class AccountKeyringUpdate(BaseModel): owner_id: Optional[int] = None - key_type: Optional[TypeKey] = None + key_type: Optional[KeyType] = None key_id: Optional[str] = Field(None, max_length=40) key_value: Optional[str] = Field(None, max_length=255) created_at: Optional[datetime] = None expiry: Optional[datetime] = None - status: Optional[StatusKey] = None + status: Optional[KeyStatus] = None diff --git a/api/api/services/auth.py b/api/api/services/auth.py index 8e0e5b1..dcdfd64 100644 --- a/api/api/services/auth.py +++ b/api/api/services/auth.py @@ -2,7 +2,9 @@ from typing import Optional from sqlalchemy.ext.asyncio import AsyncConnection from api.db.logic.auth import get_user # # from backend.schemas.users.token import TokenData -from api.schemas.account.account import User,Status +from api.schemas.account.account import User +from api.db.tables.account import AccountStatus + from api.utils.hasher import Hasher @@ -14,7 +16,7 @@ async def authenticate_user( sql_user,sql_password = await get_user(connection, username) - if not sql_user or sql_user.status != Status.ACTIVE : + if not sql_user or sql_user.status != AccountStatus.ACTIVE : return None hasher = Hasher() if not hasher.verify_data(password, sql_password.key_value): diff --git a/api/api/services/update_data_validation.py b/api/api/services/update_data_validation.py index e19ee0a..6f29486 100644 --- a/api/api/services/update_data_validation.py +++ b/api/api/services/update_data_validation.py @@ -1,7 +1,9 @@ from enum import Enum from typing import Optional -from api.schemas.endpoints.account import UserUpdate, Role, Status -from api.schemas.endpoints.account_keyring import AccountKeyringUpdate, StatusKey, TypeKey +from api.schemas.endpoints.account import UserUpdate +from api.db.tables.account import KeyType,KeyStatus +from api.schemas.endpoints.account_keyring import AccountKeyringUpdate +from api.db.tables.account import AccountRole,AccountStatus def update_user_data_changes(update_data: UserUpdate, user) -> Optional[dict]: """ @@ -17,7 +19,7 @@ def update_user_data_changes(update_data: UserUpdate, user) -> Optional[dict]: if value is None: continue - if isinstance(value, (Role, Status)): + if isinstance(value, (AccountRole, AccountStatus)): update_values[field] = value.value else: update_values[field] = value @@ -50,7 +52,7 @@ def update_key_data_changes(update_data: AccountKeyringUpdate, key) -> Optional[ if value is None: continue - if isinstance(value, (TypeKey, StatusKey)): + if isinstance(value, (KeyType, KeyStatus)): update_values[field] = value.value else: update_values[field] = value diff --git a/api/api/services/user_role_validation.py b/api/api/services/user_role_validation.py index 6e1855e..5b97f83 100644 --- a/api/api/services/user_role_validation.py +++ b/api/api/services/user_role_validation.py @@ -3,12 +3,14 @@ from fastapi import ( status, ) from api.db.logic.account import get_user_login -from api.schemas.account.account import Role,Status +from api.db.tables.account import AccountRole + + async def db_user_role_validation(connection, current_user): authorize_user = await get_user_login(connection, current_user) - if authorize_user.role not in {Role.OWNER, Role.ADMIN}: + if authorize_user.role not in {AccountRole.OWNER, AccountRole.ADMIN}: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="You do not have enough permissions") -- 2.39.5 From 66c60cfc593377e4d41236032603fa8ff364d4cc Mon Sep 17 00:00:00 2001 From: TheNoxium Date: Wed, 4 Jun 2025 12:03:59 +0500 Subject: [PATCH 09/11] fix: name --- api/api/db/logic/account.py | 6 +++--- api/api/db/logic/keyring.py | 4 ++-- api/api/endpoints/account.py | 20 ++++++++++---------- api/api/endpoints/keyring.py | 18 +++++++++--------- api/api/endpoints/profile.py | 10 +++++----- api/api/services/user_role_validation.py | 4 ++-- 6 files changed, 31 insertions(+), 31 deletions(-) diff --git a/api/api/db/logic/account.py b/api/api/db/logic/account.py index e1cba7f..c2e30a7 100644 --- a/api/api/db/logic/account.py +++ b/api/api/db/logic/account.py @@ -52,7 +52,7 @@ async def get_user_accaunt_page(connection: AsyncConnection, page, limit) -> Opt ) -async def get_user_id(connection: AsyncConnection, id: int) -> Optional[User]: +async def get_user_by_id(connection: AsyncConnection, id: int) -> Optional[User]: """ Получает юзера по id. """ @@ -76,7 +76,7 @@ async def get_user_id(connection: AsyncConnection, id: int) -> Optional[User]: return User.model_validate(user_data) -async def get_user_login(connection: AsyncConnection, login: str) -> Optional[User]: +async def get_user_by_login(connection: AsyncConnection, login: str) -> Optional[User]: """ Получает юзера по login. """ @@ -100,7 +100,7 @@ async def get_user_login(connection: AsyncConnection, login: str) -> Optional[Us return User.model_validate(user_data) -async def update_user_id(connection: AsyncConnection, update_values, user) -> Optional[User]: +async def update_user_by_id(connection: AsyncConnection, update_values, user) -> Optional[User]: """ Вносит изменеия в нужное поле таблицы account_table. """ diff --git a/api/api/db/logic/keyring.py b/api/api/db/logic/keyring.py index 02a5797..9d91321 100644 --- a/api/api/db/logic/keyring.py +++ b/api/api/db/logic/keyring.py @@ -12,7 +12,7 @@ from api.schemas.account.account_keyring import AccountKeyring -async def get_key_id(connection: AsyncConnection, key_id: str) -> Optional[AccountKeyring]: +async def get_key_by_id(connection: AsyncConnection, key_id: str) -> Optional[AccountKeyring]: """ Получает key по key_id. """ @@ -36,7 +36,7 @@ async def get_key_id(connection: AsyncConnection, key_id: str) -> Optional[Accou return AccountKeyring.model_validate(user_data) -async def update_key_id(connection: AsyncConnection, update_values, key) -> Optional[AccountKeyring]: +async def update_key_by_id(connection: AsyncConnection, update_values, key) -> Optional[AccountKeyring]: """ Вносит изменеия в нужное поле таблицы account_keyring_table. """ diff --git a/api/api/endpoints/account.py b/api/api/endpoints/account.py index d22705e..50de6c0 100644 --- a/api/api/endpoints/account.py +++ b/api/api/endpoints/account.py @@ -11,7 +11,7 @@ from sqlalchemy.ext.asyncio import AsyncConnection 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_user_accaunt_page +from api.db.logic.account import get_user_by_id, update_user_by_id, create_user,get_user_by_login,get_user_accaunt_page from api.schemas.account.account import User from api.db.tables.account import AccountStatus @@ -57,7 +57,7 @@ async def get_account(user_id: int, request: Request, connection: AsyncConnectio current_user = request.state.current_user authorize_user = await db_user_role_validation(connection, current_user) - user = await get_user_id(connection, user_id) + user = await get_user_by_id(connection, user_id) if user is None: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Account not found") @@ -77,12 +77,12 @@ async def create_account( authorize_user = await db_user_role_validation(connection, current_user) - user_validation = await get_user_login(connection, user.login) + user_validation = await get_user_by_login(connection, user.login) if user_validation is None: await create_user(connection,user,authorize_user.id) - user_new = await get_user_login(connection, user.login) + user_new = await get_user_by_login(connection, user.login) return user_new else: @@ -106,7 +106,7 @@ async def update_account( authorize_user = await db_user_role_validation(connection, current_user) - user = await get_user_id(connection, user_id) + user = await get_user_by_id(connection, user_id) if user is None: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, @@ -120,10 +120,10 @@ async def update_account( user_update_data = User.model_validate({**user.model_dump(), **update_values}) - await update_user_id(connection, update_values, user) + await update_user_by_id(connection, update_values, user) - user = await get_user_id(connection, user_id) + user = await get_user_by_id(connection, user_id) return user @@ -140,7 +140,7 @@ async def delete_account( authorize_user = await db_user_role_validation(connection, current_user) - user = await get_user_id(connection, user_id) + user = await get_user_by_id(connection, user_id) if user is None: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, @@ -155,9 +155,9 @@ async def delete_account( return user - await update_user_id(connection, update_values, user) + await update_user_by_id(connection, update_values, user) - user = await get_user_id(connection, user_id) + user = await get_user_by_id(connection, user_id) return user diff --git a/api/api/endpoints/keyring.py b/api/api/endpoints/keyring.py index 8994007..6e21f93 100644 --- a/api/api/endpoints/keyring.py +++ b/api/api/endpoints/keyring.py @@ -14,7 +14,7 @@ from sqlalchemy.ext.asyncio import AsyncConnection from api.db.connection.session import get_connection_dep -from api.db.logic.keyring import get_key_id,create_key,update_key_id +from api.db.logic.keyring import get_key_by_id,create_key,update_key_by_id @@ -44,7 +44,7 @@ async def get_keyring( authorize_user = await db_user_role_validation(connection, current_user) - keyring = await get_key_id(connection, key_id) + keyring = await get_key_by_id(connection, key_id) if keyring is None: raise HTTPException( @@ -67,7 +67,7 @@ async def create_keyring( authorize_user = await db_user_role_validation(connection, current_user) - keyring = await get_key_id(connection, key_id) + keyring = await get_key_by_id(connection, key_id) if keyring is None: keyring_new = await create_key(connection,key, key_id, ) @@ -94,7 +94,7 @@ async def update_keyring( authorize_user = await db_user_role_validation(connection, current_user) - keyring = await get_key_id(connection, key_id) + keyring = await get_key_by_id(connection, key_id) if keyring is None: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, @@ -109,10 +109,10 @@ async def update_keyring( keyring_update_data = AccountKeyring.model_validate({**keyring.model_dump(), **update_values}) - await update_key_id(connection, update_values, keyring) + await update_key_by_id(connection, update_values, keyring) - keyring = await get_key_id(connection, key_id) + keyring = await get_key_by_id(connection, key_id) return keyring @@ -129,7 +129,7 @@ async def delete_keyring( authorize_user = await db_user_role_validation(connection, current_user) - keyring = await get_key_id(connection, key_id) + keyring = await get_key_by_id(connection, key_id) if keyring is None: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, @@ -143,9 +143,9 @@ async def delete_keyring( if update_values is None: return keyring - await update_key_id(connection, update_values, keyring) + await update_key_by_id(connection, update_values, keyring) - keyring = await get_key_id(connection, key_id) + keyring = await get_key_by_id(connection, key_id) return keyring diff --git a/api/api/endpoints/profile.py b/api/api/endpoints/profile.py index bd504e2..f75f5ab 100644 --- a/api/api/endpoints/profile.py +++ b/api/api/endpoints/profile.py @@ -13,7 +13,7 @@ from fastapi import ( from sqlalchemy.ext.asyncio import AsyncConnection from api.db.connection.session import get_connection_dep -from api.db.logic.account import get_user_id, update_user_id,get_user_login +from api.db.logic.account import get_user_by_id, update_user_by_id,get_user_by_login from api.services.update_data_validation import update_user_data_changes from api.schemas.endpoints.account import UserUpdate @@ -34,7 +34,7 @@ async def get_profile( # Извлекаем текущего пользователя из request.state current_user = request.state.current_user - user = await get_user_login(connection, current_user) + user = await get_user_by_login(connection, current_user) if user is None: raise HTTPException( @@ -54,7 +54,7 @@ async def update_profile( current_user = request.state.current_user - user = await get_user_login(connection, current_user) + user = await get_user_by_login(connection, current_user) if user is None: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, @@ -66,9 +66,9 @@ async def update_profile( if update_values is None: return user - await update_user_id(connection, update_values, user) + await update_user_by_id(connection, update_values, user) - user = await get_user_id(connection, user.id) + user = await get_user_by_id(connection, user.id) return user else: diff --git a/api/api/services/user_role_validation.py b/api/api/services/user_role_validation.py index 5b97f83..3d33bcc 100644 --- a/api/api/services/user_role_validation.py +++ b/api/api/services/user_role_validation.py @@ -2,14 +2,14 @@ from fastapi import ( HTTPException, status, ) -from api.db.logic.account import get_user_login +from api.db.logic.account import get_user_by_login from api.db.tables.account import AccountRole async def db_user_role_validation(connection, current_user): - authorize_user = await get_user_login(connection, current_user) + authorize_user = await get_user_by_login(connection, current_user) if authorize_user.role not in {AccountRole.OWNER, AccountRole.ADMIN}: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, -- 2.39.5 From 58cc23f79bb1f70fd9558a84c2b13db83b5cfb6a Mon Sep 17 00:00:00 2001 From: TheNoxium Date: Thu, 5 Jun 2025 14:41:18 +0500 Subject: [PATCH 10/11] fix: mrege error --- api/api/schemas/account/account.py | 2 +- api/api/schemas/endpoints/account.py | 2 +- api/api/schemas/endpoints/account_keyring.py | 2 +- api/api/schemas/endpoints/auth.py | 7 +------ 4 files changed, 4 insertions(+), 9 deletions(-) diff --git a/api/api/schemas/account/account.py b/api/api/schemas/account/account.py index 38529e6..7c6269d 100644 --- a/api/api/schemas/account/account.py +++ b/api/api/schemas/account/account.py @@ -1,7 +1,7 @@ import datetime from datetime import datetime from typing import Optional -from pydantic import BaseModel, EmailStr, Field +from pydantic import Base,BaseModel, EmailStr, Field from api.db.tables.account import AccountRole,AccountStatus diff --git a/api/api/schemas/endpoints/account.py b/api/api/schemas/endpoints/account.py index b845e4d..c91a9a2 100644 --- a/api/api/schemas/endpoints/account.py +++ b/api/api/schemas/endpoints/account.py @@ -6,7 +6,7 @@ from api.db.tables.account import AccountRole,AccountStatus -class UserUpdate(Base): +class UserUpdate(BaseModel): id: Optional[int] = None name: Optional[str] = Field(None, max_length=100) login: Optional[str] = Field(None, max_length=100) diff --git a/api/api/schemas/endpoints/account_keyring.py b/api/api/schemas/endpoints/account_keyring.py index 162e2da..755501a 100644 --- a/api/api/schemas/endpoints/account_keyring.py +++ b/api/api/schemas/endpoints/account_keyring.py @@ -1,6 +1,6 @@ import datetime from typing import Optional -from pydantic import Field +from pydantic import Base, Field from datetime import datetime from api.db.tables.account import KeyType,KeyStatus diff --git a/api/api/schemas/endpoints/auth.py b/api/api/schemas/endpoints/auth.py index 7d11765..ca06793 100644 --- a/api/api/schemas/endpoints/auth.py +++ b/api/api/schemas/endpoints/auth.py @@ -8,13 +8,8 @@ class Auth(Base): login: str password: str - -class AccessToken(Base): - access_token: str - - class Refresh(Base): refresh_token: str -class Access(BaseModel): +class Access(Base): access_token: str -- 2.39.5 From c68286f7cc8a62627d4d2c7c6d2a1cf76155a382 Mon Sep 17 00:00:00 2001 From: TheNoxium Date: Thu, 5 Jun 2025 14:55:38 +0500 Subject: [PATCH 11/11] fix:merge error --- api/api/db/tables/account.py | 2 +- api/api/schemas/account/account.py | 4 ++-- api/api/schemas/account/account_keyring.py | 2 +- api/api/schemas/endpoints/account_keyring.py | 4 ++-- api/api/schemas/endpoints/auth.py | 9 ++++----- api/api/schemas/events/list_events.py | 4 ++-- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/api/api/db/tables/account.py b/api/api/db/tables/account.py index cf8e795..fcf2cc3 100644 --- a/api/api/db/tables/account.py +++ b/api/api/db/tables/account.py @@ -1,7 +1,7 @@ from sqlalchemy import Table, Column, String, Enum as SQLAEnum, JSON, ForeignKey, DateTime, Index from sqlalchemy.sql import func -from enum import Enum, auto +from enum import Enum from api.db.sql_types import UnsignedInt from api.db import metadata diff --git a/api/api/schemas/account/account.py b/api/api/schemas/account/account.py index 7c6269d..1ceb3b0 100644 --- a/api/api/schemas/account/account.py +++ b/api/api/schemas/account/account.py @@ -1,11 +1,11 @@ import datetime from datetime import datetime from typing import Optional -from pydantic import Base,BaseModel, EmailStr, Field +from pydantic import BaseModel, EmailStr, Field from api.db.tables.account import AccountRole,AccountStatus -class User(Base): +class User(BaseModel): id: Optional[int] = None name: str = Field(..., max_length=100) login: str = Field(..., max_length=100) diff --git a/api/api/schemas/account/account_keyring.py b/api/api/schemas/account/account_keyring.py index dff9561..b504797 100644 --- a/api/api/schemas/account/account_keyring.py +++ b/api/api/schemas/account/account_keyring.py @@ -5,7 +5,7 @@ from datetime import datetime from api.db.tables.account import KeyType,KeyStatus -class AccountKeyring(Base): +class AccountKeyring(BaseModel): owner_id: int key_type: KeyType key_id: Optional[str] = Field(None, max_length=40) diff --git a/api/api/schemas/endpoints/account_keyring.py b/api/api/schemas/endpoints/account_keyring.py index 755501a..5e646dc 100644 --- a/api/api/schemas/endpoints/account_keyring.py +++ b/api/api/schemas/endpoints/account_keyring.py @@ -1,11 +1,11 @@ import datetime from typing import Optional -from pydantic import Base, Field +from pydantic import BaseModel, Field from datetime import datetime from api.db.tables.account import KeyType,KeyStatus -class AccountKeyringUpdate(Base): +class AccountKeyringUpdate(BaseModel): owner_id: Optional[int] = None key_type: Optional[KeyType] = None key_id: Optional[str] = Field(None, max_length=40) diff --git a/api/api/schemas/endpoints/auth.py b/api/api/schemas/endpoints/auth.py index ca06793..15e5c3a 100644 --- a/api/api/schemas/endpoints/auth.py +++ b/api/api/schemas/endpoints/auth.py @@ -1,15 +1,14 @@ -from api.schemas.base import Base - +from api.schemas.base import BaseModel # Таблица для получения информации из запроса -class Auth(Base): +class Auth(BaseModel): login: str password: str -class Refresh(Base): +class Refresh(BaseModel,): refresh_token: str -class Access(Base): +class Access(BaseModel): access_token: str diff --git a/api/api/schemas/events/list_events.py b/api/api/schemas/events/list_events.py index 2df94c7..e5144ae 100644 --- a/api/api/schemas/events/list_events.py +++ b/api/api/schemas/events/list_events.py @@ -3,7 +3,7 @@ from typing import Dict, Any from datetime import datetime from enum import Enum -from api.schemas.base import Base +from api.schemas.base import BaseModel class State(Enum): @@ -17,7 +17,7 @@ class Status(Enum): DELETED = "Deleted" -class ListEvent(Base): +class ListEvent(BaseModel): id: int name: str = Field(..., max_length=40) title: str = Field(..., max_length=64) -- 2.39.5