This commit is contained in:
Artem Tsyrulnikov
2025-11-08 16:16:04 +03:00
commit 3800c72662
36 changed files with 2136 additions and 0 deletions

18
src/usecase/get_user.py Normal file
View File

@@ -0,0 +1,18 @@
import uuid
from typing import TYPE_CHECKING
from src import domain, dto
if TYPE_CHECKING:
from src.usecase.usecase import Usecase
async def get_user(self: 'Usecase', user_id: uuid.UUID) -> dto.GetUserOutput:
user: domain.User | None = await self.database.get_user(user_id=user_id)
if user is None:
raise domain.UserNotFound(user_id)
return dto.GetUserOutput(
user_id=user.id,
name=user.name,
)

View File

@@ -0,0 +1,22 @@
import uuid
from typing import TYPE_CHECKING
from src import domain
if TYPE_CHECKING:
from src.usecase.usecase import Usecase
async def notify_user(self: 'Usecase', user_id: uuid.UUID, chat_id: int, message: str) -> None:
"""Send notification to user via Telegram"""
if self.telegram_writer is None:
raise RuntimeError('TelegramWriter not configured')
# Get user from database
user = await self.database.get_user(user_id)
if user is None:
raise domain.UserNotFound(user_id)
# Send personalized message
text = f'Привет, {user.name}!\n\n{message}'
await self.telegram_writer.send_message(chat_id=chat_id, text=text)

25
src/usecase/usecase.py Normal file
View File

@@ -0,0 +1,25 @@
import uuid
from dataclasses import dataclass
from typing import Protocol
from src import domain
from .get_user import get_user
from .notify_user import notify_user
class Database(Protocol):
async def get_user(self, user_id: uuid.UUID) -> domain.User | None: ...
class TelegramWriter(Protocol):
async def send_message(self, chat_id: int, text: str) -> None: ...
@dataclass
class Usecase:
database: Database
telegram_writer: TelegramWriter
get_user = get_user
notify_user = notify_user