From bbf2b1e6f92d90d84981b7add7b8cbe9069e383b Mon Sep 17 00:00:00 2001 From: ronis_0505 Date: Thu, 25 Sep 2025 22:37:54 +0300 Subject: [PATCH] fix session middleware --- app/main.py | 4 ++-- app/middlewares/__init__.py | 4 ++-- app/middlewares/outer_middlewares.py | 24 ++++++++++++------------ 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/main.py b/app/main.py index 233d932..0cbd730 100644 --- a/app/main.py +++ b/app/main.py @@ -4,7 +4,7 @@ from dotenv import load_dotenv from aiogram import Dispatcher, Bot from handlers import * from keyboards import set_main_menu -from middlewares import AccessCheckMiddleware +from middlewares import SessionMiddleware load_dotenv(".env") bot = Bot(token=os.getenv("TOKEN")) @@ -16,7 +16,7 @@ async def main() -> None: dp.startup.register(set_main_menu) dp.include_router(registration_router) dp.include_router(admin_router) - dp.update.outer_middleware(AccessCheckMiddleware()) + dp.update.outer_middleware(SessionMiddleware()) dp.include_router(orders_router) dp.include_router(components_router) diff --git a/app/middlewares/__init__.py b/app/middlewares/__init__.py index e1a794c..e595a9d 100644 --- a/app/middlewares/__init__.py +++ b/app/middlewares/__init__.py @@ -1,4 +1,4 @@ -from .outer_middlewares import AccessCheckMiddleware +from .outer_middlewares import SessionMiddleware -__all__ = ["AccessCheckMiddleware"] \ No newline at end of file +__all__ = ["SessionMiddleware"] \ No newline at end of file diff --git a/app/middlewares/outer_middlewares.py b/app/middlewares/outer_middlewares.py index 6a81168..d05bd23 100644 --- a/app/middlewares/outer_middlewares.py +++ b/app/middlewares/outer_middlewares.py @@ -1,29 +1,29 @@ -import logging from typing import Any, Awaitable, Callable, Dict from aiogram import BaseMiddleware, Bot from aiogram.types import TelegramObject -from database import async_session_, Worker from sqlalchemy import select +from loguru import logger +from database import async_session_, Worker - -class AccessCheckMiddleware(BaseMiddleware): +class SessionMiddleware(BaseMiddleware): sessions_in_memory_db = set() + async def __call__( self, handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]], event: TelegramObject, data: Dict[str, Any] ) -> Any: + logger.info("Session check") 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: - async with session.begin(): - result = await session.execute(select(Worker).where(Worker.telegram_id == event_data.from_user.id)) - user = result.scalars().first() - if user: - self.sessions_in_memory_db.add(event_data.from_user.id) - return await handler(event, data) - return None - + 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)