2025-07-27 22:17:28 +03:00
|
|
|
from typing import Any, Awaitable, Callable, Dict
|
|
|
|
|
from aiogram import BaseMiddleware, Bot
|
|
|
|
|
from aiogram.types import TelegramObject
|
|
|
|
|
from sqlalchemy import select
|
2025-09-25 22:37:54 +03:00
|
|
|
from loguru import logger
|
|
|
|
|
from database import async_session_, Worker
|
2025-07-27 22:17:28 +03:00
|
|
|
|
|
|
|
|
|
2025-09-25 22:37:54 +03:00
|
|
|
class SessionMiddleware(BaseMiddleware):
|
2025-07-27 22:17:28 +03:00
|
|
|
sessions_in_memory_db = set()
|
2025-09-25 22:37:54 +03:00
|
|
|
|
2025-07-27 22:17:28 +03:00
|
|
|
async def __call__(
|
|
|
|
|
self,
|
|
|
|
|
handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
|
|
|
|
|
event: TelegramObject,
|
|
|
|
|
data: Dict[str, Any]
|
|
|
|
|
) -> Any:
|
2025-09-25 22:37:54 +03:00
|
|
|
logger.info("Session check")
|
2025-07-27 22:17:28 +03:00
|
|
|
event_data = event.message or event.callback_query
|
|
|
|
|
user = event_data.from_user.id
|
|
|
|
|
if user not in self.sessions_in_memory_db:
|
|
|
|
|
async with async_session_() as session:
|
2025-09-25 22:37:54 +03:00
|
|
|
result = await session.execute(select(Worker).where(Worker.telegram_id == event_data.from_user.id))
|
|
|
|
|
user_in_db = result.scalars().first()
|
|
|
|
|
if not user_in_db:
|
|
|
|
|
data["through_registration"] = True
|
|
|
|
|
else:
|
|
|
|
|
self.sessions_in_memory_db.add(user)
|
|
|
|
|
return await handler(event, data)
|