26 lines
890 B
Python
26 lines
890 B
Python
from typing import Any, Awaitable, Callable
|
|
|
|
from aiogram import BaseMiddleware
|
|
from aiogram.types import TelegramObject
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.repositories.user import UserRepository
|
|
from app.services.referral_service import ReferralService
|
|
from app.services.user_service import UserService
|
|
|
|
|
|
class ServicesMiddleware(BaseMiddleware):
|
|
"""Builds application services from the request-scoped session (dependency injection)."""
|
|
|
|
async def __call__(
|
|
self,
|
|
handler: Callable[[TelegramObject, dict[str, Any]], Awaitable[Any]],
|
|
event: TelegramObject,
|
|
data: dict[str, Any],
|
|
) -> Any:
|
|
session: AsyncSession = data["session"]
|
|
users = UserRepository(session)
|
|
referrals = ReferralService(users)
|
|
data["user_service"] = UserService(users, referrals)
|
|
return await handler(event, data)
|