From e47e449a3629a808bbfcc7a72f2b4da000cc2ff0 Mon Sep 17 00:00:00 2001 From: TheNoxium Date: Fri, 23 May 2025 12:41:32 +0500 Subject: [PATCH] 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(