fix(api): fix get_user_by_id method
This commit is contained in:
		@@ -1,16 +1,14 @@
 | 
			
		||||
from typing import Optional
 | 
			
		||||
import math
 | 
			
		||||
 | 
			
		||||
from datetime import datetime, timezone
 | 
			
		||||
 | 
			
		||||
from sqlalchemy import insert, select, func
 | 
			
		||||
from sqlalchemy.ext.asyncio import AsyncConnection
 | 
			
		||||
from enum import Enum
 | 
			
		||||
from typing import Optional
 | 
			
		||||
 | 
			
		||||
from sqlalchemy import func, insert, select
 | 
			
		||||
from sqlalchemy.ext.asyncio import AsyncConnection
 | 
			
		||||
 | 
			
		||||
from api.db.tables.account import account_table
 | 
			
		||||
 | 
			
		||||
from api.schemas.account.account import User
 | 
			
		||||
from api.schemas.endpoints.account import AllUserResponse, all_user_adapter
 | 
			
		||||
from api.schemas.endpoints.account import all_user_adapter, AllUserResponse, UserUpdate
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def get_user_accaunt_page(connection: AsyncConnection, page, limit) -> Optional[AllUserResponse]:
 | 
			
		||||
@@ -47,31 +45,28 @@ async def get_user_accaunt_page(connection: AsyncConnection, page, limit) -> Opt
 | 
			
		||||
 | 
			
		||||
    validated_users = all_user_adapter.validate_python(users_data)
 | 
			
		||||
 | 
			
		||||
    return AllUserResponse(users=validated_users, amount_count=total_count, amount_pages=total_pages, current_page=page)
 | 
			
		||||
    return AllUserResponse(
 | 
			
		||||
        users=validated_users,
 | 
			
		||||
        amount_count=total_count,
 | 
			
		||||
        amount_pages=total_pages,
 | 
			
		||||
        current_page=page,
 | 
			
		||||
        limit=limit,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def get_user_by_id(connection: AsyncConnection, id: int) -> Optional[User]:
 | 
			
		||||
async def get_user_by_id(connection: AsyncConnection, user_id: int) -> Optional[UserUpdate]:
 | 
			
		||||
    """
 | 
			
		||||
    Получает юзера по id.
 | 
			
		||||
    """
 | 
			
		||||
    query = select(account_table).where(account_table.c.id == id)
 | 
			
		||||
    query = select(account_table).where(account_table.c.id == user_id)
 | 
			
		||||
 | 
			
		||||
    user_db_cursor = await connection.execute(query)
 | 
			
		||||
    user_db = user_db_cursor.one_or_none()
 | 
			
		||||
    user = user_db_cursor.mappings().one_or_none()
 | 
			
		||||
 | 
			
		||||
    if not user_db:
 | 
			
		||||
    if not user:
 | 
			
		||||
        return None
 | 
			
		||||
 | 
			
		||||
    user_data = {
 | 
			
		||||
        column.name: (
 | 
			
		||||
            getattr(user_db, column.name).name
 | 
			
		||||
            if isinstance(getattr(user_db, column.name), Enum)
 | 
			
		||||
            else getattr(user_db, column.name)
 | 
			
		||||
        )
 | 
			
		||||
        for column in account_table.columns
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return User.model_validate(user_data)
 | 
			
		||||
    return UserUpdate.model_validate(user)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def get_user_by_login(connection: AsyncConnection, login: str) -> Optional[User]:
 | 
			
		||||
@@ -107,7 +102,7 @@ async def update_user_by_id(connection: AsyncConnection, update_values, user) ->
 | 
			
		||||
    await connection.commit()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
async def create_user(connection: AsyncConnection, user: User, creator_id: int) -> Optional[User]:
 | 
			
		||||
async def create_user(connection: AsyncConnection, user: UserUpdate, creator_id: int) -> Optional[UserUpdate]:
 | 
			
		||||
    """
 | 
			
		||||
    Создает нове поле в таблице account_table.
 | 
			
		||||
    """
 | 
			
		||||
@@ -123,8 +118,9 @@ async def create_user(connection: AsyncConnection, user: User, creator_id: int)
 | 
			
		||||
        status=user.status.value,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    await connection.execute(query)
 | 
			
		||||
    res = await connection.execute(query)
 | 
			
		||||
 | 
			
		||||
    await connection.commit()
 | 
			
		||||
    user = await get_user_by_id(connection, res.lastrowid)
 | 
			
		||||
 | 
			
		||||
    return user
 | 
			
		||||
 
 | 
			
		||||
@@ -4,29 +4,23 @@ from fastapi import (
 | 
			
		||||
    HTTPException,
 | 
			
		||||
    status,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
from sqlalchemy.ext.asyncio import AsyncConnection
 | 
			
		||||
 | 
			
		||||
from api.db.connection.session import get_connection_dep
 | 
			
		||||
 | 
			
		||||
from api.db.logic.account import (
 | 
			
		||||
    get_user_by_id,
 | 
			
		||||
    update_user_by_id,
 | 
			
		||||
    create_user,
 | 
			
		||||
    get_user_by_login,
 | 
			
		||||
    get_user_accaunt_page,
 | 
			
		||||
    get_user_by_id,
 | 
			
		||||
    get_user_by_login,
 | 
			
		||||
    update_user_by_id,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
from api.schemas.account.account import User
 | 
			
		||||
from api.db.tables.account import AccountStatus
 | 
			
		||||
from api.schemas.account.account import User
 | 
			
		||||
from api.schemas.base import bearer_schema
 | 
			
		||||
from api.schemas.endpoints.account import UserUpdate, AllUserResponse
 | 
			
		||||
from api.schemas.endpoints.account import AllUserResponse, UserUpdate
 | 
			
		||||
from api.services.auth import get_current_user
 | 
			
		||||
 | 
			
		||||
from api.services.user_role_validation import db_user_role_validation
 | 
			
		||||
from api.services.update_data_validation import update_user_data_changes
 | 
			
		||||
 | 
			
		||||
from api.services.user_role_validation import db_user_role_validation
 | 
			
		||||
 | 
			
		||||
api_router = APIRouter(
 | 
			
		||||
    prefix="/account",
 | 
			
		||||
@@ -53,7 +47,9 @@ async def get_all_account(
 | 
			
		||||
 | 
			
		||||
@api_router.get("/{user_id}", dependencies=[Depends(bearer_schema)], response_model=User)
 | 
			
		||||
async def get_account(
 | 
			
		||||
    user_id: int, connection: AsyncConnection = Depends(get_connection_dep), current_user=Depends(get_current_user)
 | 
			
		||||
    user_id: int,
 | 
			
		||||
    connection: AsyncConnection = Depends(get_connection_dep),
 | 
			
		||||
    current_user=Depends(get_current_user),
 | 
			
		||||
):
 | 
			
		||||
    authorize_user = await db_user_role_validation(connection, current_user)
 | 
			
		||||
 | 
			
		||||
@@ -65,19 +61,19 @@ async def get_account(
 | 
			
		||||
    return user
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@api_router.post("", dependencies=[Depends(bearer_schema)], response_model=User)
 | 
			
		||||
@api_router.post("", dependencies=[Depends(bearer_schema)], response_model=UserUpdate)
 | 
			
		||||
async def create_account(
 | 
			
		||||
    user: UserUpdate, connection: AsyncConnection = Depends(get_connection_dep), current_user=Depends(get_current_user)
 | 
			
		||||
    user: UserUpdate,
 | 
			
		||||
    connection: AsyncConnection = Depends(get_connection_dep),
 | 
			
		||||
    current_user=Depends(get_current_user),
 | 
			
		||||
):
 | 
			
		||||
    authorize_user = await db_user_role_validation(connection, current_user)
 | 
			
		||||
 | 
			
		||||
    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_by_login(connection, user.login)
 | 
			
		||||
        return user_new
 | 
			
		||||
 | 
			
		||||
        new_user = await create_user(connection, user, authorize_user.id)
 | 
			
		||||
        return new_user
 | 
			
		||||
    else:
 | 
			
		||||
        raise HTTPException(
 | 
			
		||||
            status_code=status.HTTP_400_BAD_REQUEST, detail="An account with this information already exists."
 | 
			
		||||
@@ -113,7 +109,9 @@ async def update_account(
 | 
			
		||||
 | 
			
		||||
@api_router.delete("/{user_id}", dependencies=[Depends(bearer_schema)], response_model=User)
 | 
			
		||||
async def delete_account(
 | 
			
		||||
    user_id: int, connection: AsyncConnection = Depends(get_connection_dep), current_user=Depends(get_current_user)
 | 
			
		||||
    user_id: int,
 | 
			
		||||
    connection: AsyncConnection = Depends(get_connection_dep),
 | 
			
		||||
    current_user=Depends(get_current_user),
 | 
			
		||||
):
 | 
			
		||||
    authorize_user = await db_user_role_validation(connection, current_user)
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,7 @@ class AllUserResponse(Base):
 | 
			
		||||
    amount_count: int
 | 
			
		||||
    amount_pages: int
 | 
			
		||||
    current_page: int
 | 
			
		||||
    limit: int
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
all_user_adapter = TypeAdapter(List[AllUser])
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user