fix session middleware

This commit is contained in:
2025-09-25 22:37:54 +03:00
parent e8e2d3dc58
commit bbf2b1e6f9
3 changed files with 16 additions and 16 deletions

View File

@@ -4,7 +4,7 @@ from dotenv import load_dotenv
from aiogram import Dispatcher, Bot from aiogram import Dispatcher, Bot
from handlers import * from handlers import *
from keyboards import set_main_menu from keyboards import set_main_menu
from middlewares import AccessCheckMiddleware from middlewares import SessionMiddleware
load_dotenv(".env") load_dotenv(".env")
bot = Bot(token=os.getenv("TOKEN")) bot = Bot(token=os.getenv("TOKEN"))
@@ -16,7 +16,7 @@ async def main() -> None:
dp.startup.register(set_main_menu) dp.startup.register(set_main_menu)
dp.include_router(registration_router) dp.include_router(registration_router)
dp.include_router(admin_router) dp.include_router(admin_router)
dp.update.outer_middleware(AccessCheckMiddleware()) dp.update.outer_middleware(SessionMiddleware())
dp.include_router(orders_router) dp.include_router(orders_router)
dp.include_router(components_router) dp.include_router(components_router)

View File

@@ -1,4 +1,4 @@
from .outer_middlewares import AccessCheckMiddleware from .outer_middlewares import SessionMiddleware
__all__ = ["AccessCheckMiddleware"] __all__ = ["SessionMiddleware"]

View File

@@ -1,29 +1,29 @@
import logging
from typing import Any, Awaitable, Callable, Dict from typing import Any, Awaitable, Callable, Dict
from aiogram import BaseMiddleware, Bot from aiogram import BaseMiddleware, Bot
from aiogram.types import TelegramObject from aiogram.types import TelegramObject
from database import async_session_, Worker
from sqlalchemy import select from sqlalchemy import select
from loguru import logger
from database import async_session_, Worker
class SessionMiddleware(BaseMiddleware):
class AccessCheckMiddleware(BaseMiddleware):
sessions_in_memory_db = set() sessions_in_memory_db = set()
async def __call__( async def __call__(
self, self,
handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]], handler: Callable[[TelegramObject, Dict[str, Any]], Awaitable[Any]],
event: TelegramObject, event: TelegramObject,
data: Dict[str, Any] data: Dict[str, Any]
) -> Any: ) -> Any:
logger.info("Session check")
event_data = event.message or event.callback_query event_data = event.message or event.callback_query
user = event_data.from_user.id user = event_data.from_user.id
if user not in self.sessions_in_memory_db: if user not in self.sessions_in_memory_db:
async with async_session_() as session: 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)) result = await session.execute(select(Worker).where(Worker.telegram_id == event_data.from_user.id))
user = result.scalars().first() user_in_db = result.scalars().first()
if user: if not user_in_db:
self.sessions_in_memory_db.add(event_data.from_user.id) data["through_registration"] = True
else:
self.sessions_in_memory_db.add(user)
return await handler(event, data) return await handler(event, data)
return None