presentation layer
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
"""
|
||||
Use cases для работы с пользователями
|
||||
"""
|
||||
from uuid import UUID
|
||||
from typing import Optional
|
||||
from src.domain.entities.user import User, UserRole
|
||||
from src.domain.repositories.user_repository import IUserRepository
|
||||
from src.shared.exceptions import NotFoundError, ValidationError
|
||||
|
||||
|
||||
class UserUseCases:
|
||||
"""Use cases для пользователей"""
|
||||
|
||||
def __init__(self, user_repository: IUserRepository):
|
||||
self.user_repository = user_repository
|
||||
|
||||
async def create_user(self, telegram_id: str, role: UserRole = UserRole.USER) -> User:
|
||||
"""Создать пользователя"""
|
||||
existing_user = await self.user_repository.get_by_telegram_id(telegram_id)
|
||||
if existing_user:
|
||||
raise ValidationError(f"Пользователь с telegram_id {telegram_id} уже существует")
|
||||
|
||||
user = User(telegram_id=telegram_id, role=role)
|
||||
return await self.user_repository.create(user)
|
||||
|
||||
async def get_user(self, user_id: UUID) -> User:
|
||||
"""Получить пользователя по ID"""
|
||||
user = await self.user_repository.get_by_id(user_id)
|
||||
if not user:
|
||||
raise NotFoundError(f"Пользователь {user_id} не найден")
|
||||
return user
|
||||
|
||||
async def get_user_by_telegram_id(self, telegram_id: str) -> Optional[User]:
|
||||
"""Получить пользователя по Telegram ID"""
|
||||
return await self.user_repository.get_by_telegram_id(telegram_id)
|
||||
|
||||
async def update_user(self, user_id: UUID, telegram_id: str | None = None, role: UserRole | None = None) -> User:
|
||||
"""Обновить пользователя"""
|
||||
user = await self.get_user(user_id)
|
||||
|
||||
if telegram_id is not None:
|
||||
user.telegram_id = telegram_id
|
||||
if role is not None:
|
||||
user.role = role
|
||||
|
||||
return await self.user_repository.update(user)
|
||||
|
||||
async def delete_user(self, user_id: UUID) -> bool:
|
||||
"""Удалить пользователя"""
|
||||
return await self.user_repository.delete(user_id)
|
||||
|
||||
async def list_users(self, skip: int = 0, limit: int = 100) -> list[User]:
|
||||
"""Получить список пользователей"""
|
||||
return await self.user_repository.list_all(skip=skip, limit=limit)
|
||||
|
||||
Reference in New Issue
Block a user