from typing import Callable, Awaitable, Dict, Any from aiogram import BaseMiddleware from aiogram.types import TelegramObject from sqlalchemy.ext.asyncio import async_sessionmaker import database.repositories class DbSessionMiddleware(BaseMiddleware): def __init__(self, session_pool: async_sessionmaker): super().__init__() self.session_pool = session_pool async def __call__( self, handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]], event: TelegramObject, data: Dict[str, Any], ) -> Any: async with self.session_pool() as session: data["user_repo"] = database.repositories.user.UserRepository(session) data["utils_repo"] = database.repositories.utils.UtilsRepository(session) return await handler(event, data)