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)