feat: added endpoints: auth, pofile, account, keyring
This commit is contained in:
101
api/api/db/logic/account.py
Normal file
101
api/api/db/logic/account.py
Normal file
@@ -0,0 +1,101 @@
|
||||
from typing import Optional
|
||||
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from sqlalchemy import insert, select
|
||||
from sqlalchemy.ext.asyncio import AsyncConnection
|
||||
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
|
||||
|
||||
|
||||
async def get_user_id(connection: AsyncConnection, id: int) -> Optional[User]:
|
||||
"""
|
||||
Получает юзера по id.
|
||||
"""
|
||||
query = (
|
||||
select(account_table)
|
||||
.where(account_table.c.id == id)
|
||||
)
|
||||
|
||||
user_db_cursor = await connection.execute(query)
|
||||
user_db = user_db_cursor.one_or_none()
|
||||
|
||||
if not user_db:
|
||||
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)
|
||||
|
||||
|
||||
async def get_user_login(connection: AsyncConnection, login: str) -> Optional[User]:
|
||||
"""
|
||||
Получает юзера по login.
|
||||
"""
|
||||
query = (
|
||||
select(account_table)
|
||||
.where(account_table.c.login == login)
|
||||
)
|
||||
|
||||
user_db_cursor = await connection.execute(query)
|
||||
user_db = user_db_cursor.one_or_none()
|
||||
|
||||
if not user_db:
|
||||
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)
|
||||
|
||||
|
||||
async def put_user_id(connection: AsyncConnection, update_values, user) -> Optional[User]:
|
||||
"""
|
||||
Вносит изменеия в нужное поле таблицы account_table.
|
||||
"""
|
||||
await connection.execute(
|
||||
account_table.update()
|
||||
.where(account_table.c.id == user.id)
|
||||
.values(**update_values)
|
||||
)
|
||||
|
||||
await connection.commit()
|
||||
|
||||
|
||||
async def post_add_user(connection: AsyncConnection, user: User, user_id: int, creator_id: int) -> Optional[User]:
|
||||
"""
|
||||
Создает нове поле в таблице account_table.
|
||||
"""
|
||||
query = insert(account_table).values(
|
||||
id=user_id,
|
||||
name=user.name,
|
||||
login=user.login,
|
||||
email=user.email,
|
||||
bind_tenant_id=user.bind_tenant_id,
|
||||
role=user.role.value,
|
||||
meta=user.meta,
|
||||
creator_id=creator_id,
|
||||
created_at=datetime.now(timezone.utc),
|
||||
status=user.status.value
|
||||
)
|
||||
|
||||
user.id = user_id
|
||||
user.creator_id = creator_id
|
||||
user.created_at = datetime.now(timezone.utc),
|
||||
|
||||
await connection.execute(query)
|
||||
|
||||
await connection.commit()
|
||||
|
||||
return user
|
Reference in New Issue
Block a user