from collections.abc import AsyncGenerator from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from sqlalchemy.orm import declarative_base from app.core.config import settings # Engine setup engine = create_async_engine( settings.database_url, echo=False, future=True, connect_args={"check_same_thread": False} if settings.database_url.startswith("sqlite") else {} ) # Session factory async_session_maker = async_sessionmaker( engine, class_=AsyncSession, expire_on_commit=False, autoflush=False ) Base = declarative_base() async def get_db() -> AsyncGenerator[AsyncSession, None]: """Dependency for getting async database sessions.""" async with async_session_maker() as session: yield session