from fastapi import Depends from sqlalchemy.orm import Session from app.config import settings from packages.adapters.sqlalchemy_impl.asset_library_repository import SQLAlchemyAssetLibraryRepository from packages.adapters.sqlalchemy_impl.asset_repository import SQLAlchemyAssetRepository from packages.adapters.sqlalchemy_impl.classification_job_repository import SQLAlchemyClassificationJobRepository from packages.adapters.sqlalchemy_impl.generated_video_repository import SQLAlchemyGeneratedVideoRepository from packages.adapters.sqlalchemy_impl.generation_task_repository import SQLAlchemyGenerationTaskRepository from packages.adapters.sqlalchemy_impl.ingest_job_repository import SQLAlchemyIngestJobRepository from packages.adapters.sqlalchemy_impl.project_repository import SQLAlchemyProjectRepository from packages.adapters.sqlalchemy_impl.session import build_session_factory _engine, _SessionLocal = build_session_factory(settings.DATABASE_URL) def get_db_session(): session: Session = _SessionLocal() try: yield session finally: session.close() def get_asset_repository(session: Session = Depends(get_db_session)) -> SQLAlchemyAssetRepository: return SQLAlchemyAssetRepository(session) def get_asset_library_repository(session: Session = Depends(get_db_session)) -> SQLAlchemyAssetLibraryRepository: return SQLAlchemyAssetLibraryRepository(session) def get_ingest_job_repository(session: Session = Depends(get_db_session)) -> SQLAlchemyIngestJobRepository: return SQLAlchemyIngestJobRepository(session) def get_classification_job_repository(session: Session = Depends(get_db_session)) -> SQLAlchemyClassificationJobRepository: return SQLAlchemyClassificationJobRepository(session) def get_generation_task_repository(session: Session = Depends(get_db_session)) -> SQLAlchemyGenerationTaskRepository: return SQLAlchemyGenerationTaskRepository(session) def get_generated_video_repository(session: Session = Depends(get_db_session)) -> SQLAlchemyGeneratedVideoRepository: return SQLAlchemyGeneratedVideoRepository(session) def get_project_repository(session: Session = Depends(get_db_session)) -> SQLAlchemyProjectRepository: return SQLAlchemyProjectRepository(session)