Files
vibecode-malenia/app/bot/middlewares/services.py
2026-04-04 21:30:35 +07:00

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)