from collections.abc import Generator from sqlalchemy import create_engine from sqlalchemy.orm import Session, sessionmaker from app.core.config import get_settings from .base import Base settings = get_settings() engine = create_engine(settings.database_url, pool_pre_ping=True, pool_recycle=3600) SessionLocal = sessionmaker(bind=engine, autoflush=False, autocommit=False, expire_on_commit=False) legacy_engine = ( create_engine(settings.legacy_database_url, pool_pre_ping=True, pool_recycle=3600) if settings.legacy_database_url else None ) LegacySessionLocal = ( sessionmaker(bind=legacy_engine, autoflush=False, autocommit=False, expire_on_commit=False) if legacy_engine else None ) __all__ = [ "Base", "LegacySessionLocal", "SessionLocal", "engine", "get_db", "get_legacy_db", "legacy_engine", ] def get_db() -> Generator[Session, None, None]: """Yield an application database session for FastAPI dependencies.""" db = SessionLocal() try: yield db finally: db.close() def get_legacy_db() -> Generator[Session, None, None]: """Yield a legacy database session when the legacy connection is configured.""" if LegacySessionLocal is None: raise RuntimeError("LEGACY_DATABASE_URL is not configured") db = LegacySessionLocal() try: yield db finally: db.close()