feat: добавлен класс UserManager для управления пользователями

- Создан новый файл managers.py в директории lkeep/apps/auth.
- Внутри файла создан класс UserManager с методом create_user для создания пользователей.
- Метод create_user использует SQLAlchemy для взаимодействия с базой данных и обрабатывает исключения при добавлении существующего пользователя.
This commit is contained in:
proDream 2025-01-11 02:30:39 +04:00
parent 67f980d162
commit 623e9ba325

View File

@ -0,0 +1,56 @@
"""
Проект: Lkeep
Автор: Иван Ашихмин
Год: 2025
Специально для проекта "Код на салфетке"
https://pressanybutton.ru/category/servis-na-fastapi/
"""
from fastapi import Depends, HTTPException
from sqlalchemy import insert
from sqlalchemy.exc import IntegrityError
from lkeep.apps.auth.schemas import CreateUser, UserReturnData
from lkeep.core.core_dependency.db_dependency import DBDependency
from lkeep.database.models import User
class UserManager:
"""
Класс для управления пользователями.
"""
def __init__(self, model: type[User] = User, db: DBDependency = Depends(DBDependency)) -> None:
"""
Инициализирует экземпляр класса.
:param model: Модель, используемая для работы с данными.
:type model: Type[User]
:param db: Зависимость от базы данных. По умолчанию используется Depends(DBDependency).
:type db: DBDependency
"""
self.db = db
self.model = model
async def create_user(self, user: CreateUser) -> UserReturnData:
"""
Создает нового пользователя в базе данных.
:param user: Объект с данными для создания пользователя.
:type user: CreateUser
:returns: Данные созданного пользователя.
:rtype: UserReturnData
:raises HTTPException: Если пользователь уже существует.
"""
async with self.db.db_session as session:
query = insert(self.model).values(**user.model_dump()).returning(self.model)
try:
result = await session.execute(query)
except IntegrityError:
raise HTTPException(status_code=400, detail="User already exists.")
await session.commit()
user_data = await result.scalar_one()
return UserReturnData(**user_data.__dict__)