from collections.abc import AsyncGenerator from typing import Any from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from src.config import get_settings settings = get_settings() # Build engine kwargs conditionally (SQLite doesn't support pool settings) engine_kwargs: dict[str, Any] = { "echo": settings.debug, } if settings.database_url.startswith("postgresql"): engine_kwargs.update( pool_pre_ping=True, pool_size=5, max_overflow=10, pool_recycle=3600, ) engine = create_async_engine(settings.database_url, **engine_kwargs) async_session_factory = async_sessionmaker( engine, class_=AsyncSession, expire_on_commit=False, ) async def get_db() -> AsyncGenerator[AsyncSession, None]: """Dependency that provides a database session.""" async with async_session_factory() as session: try: yield session await session.commit() except Exception: await session.rollback() raise