from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine from sqlalchemy.orm import DeclarativeBase from app.core.config import settings class Base(DeclarativeBase): pass _engine = None _session_factory = None def get_engine(): global _engine if _engine is None: _engine = create_async_engine( settings.DATABASE_URL, echo=settings.ENVIRONMENT == "development", ) return _engine async def get_db() -> AsyncSession: global _session_factory if _session_factory is None: _session_factory = async_sessionmaker(get_engine(), expire_on_commit=False) async with _session_factory() as session: yield session