feat: add TypeAdapter
This commit is contained in:
		@@ -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()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user