init
This commit is contained in:
18
src/usecase/get_user.py
Normal file
18
src/usecase/get_user.py
Normal 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,
|
||||
)
|
||||
22
src/usecase/notify_user.py
Normal file
22
src/usecase/notify_user.py
Normal 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
25
src/usecase/usecase.py
Normal 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
|
||||
Reference in New Issue
Block a user