"""Настройка базы данных: AsyncEngine, AsyncSession, dependency для FastAPI.""" from collections.abc import AsyncGenerator from sqlalchemy.ext.asyncio import ( AsyncSession, async_sessionmaker, create_async_engine, ) from sqlalchemy.orm import DeclarativeBase from app.config import settings class Base(DeclarativeBase): """Базовый класс для всех SQLAlchemy моделей.""" pass # Асинхронный движок engine = create_async_engine( settings.database_url, echo=settings.DEBUG, pool_size=10, max_overflow=20, pool_pre_ping=True, pool_recycle=3600, ) # Фабрика сессий AsyncSessionLocal = async_sessionmaker( bind=engine, class_=AsyncSession, expire_on_commit=False, autocommit=False, autoflush=False, ) async def get_db() -> AsyncGenerator[AsyncSession, None]: """ FastAPI dependency для получения сессии БД. Сессия автоматически закрывается после запроса. """ async with AsyncSessionLocal() as session: try: yield session await session.commit() except Exception: await session.rollback() raise finally: await session.close()