from typing import AsyncGenerator from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession from app.core.config import settings from sqlalchemy.orm import DeclarativeBase from app.core.config import settings engine = create_async_engine( settings.database_url, future=True, echo=False, pool_pre_ping=True, pool_size=5, max_overflow=10, ) class Base(DeclarativeBase): """Единая declarative Base для всех моделей.""" pass # каноничное имя async_session_maker = async_sessionmaker( bind=engine, class_=AsyncSession, expire_on_commit=False, autoflush=False, ) # алиас для обратной совместимости (если где-то используется) AsyncSessionLocal = async_session_maker # DI-генератор для FastAPI async def get_async_session() -> AsyncGenerator[AsyncSession, None]: async with async_session_maker() as session: try: yield session except Exception: await session.rollback() raise finally: await session.close() # тоже оставим старое имя-обёртку, если где-то подключено get_session = get_async_session