from app.config import settings from fastapi import Depends from sqlalchemy.orm import Session 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 from packages.adapters.sqlalchemy_impl.user_repository import SQLAlchemyUserRepository from packages.adapters.sqlalchemy_impl.workspace_member_repository import SQLAlchemyWorkspaceMemberRepository from packages.adapters.sqlalchemy_impl.workspace_repository import SQLAlchemyWorkspaceRepository from packages.ports.user_repository import UserRepository from packages.ports.workspace_member_repository import WorkspaceMemberRepository from packages.ports.workspace_repository import WorkspaceRepository _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) def get_user_repository( session: Session = Depends(get_db_session), ) -> UserRepository: return SQLAlchemyUserRepository(session) def get_workspace_repository( session: Session = Depends(get_db_session), ) -> WorkspaceRepository: return SQLAlchemyWorkspaceRepository(session) def get_workspace_member_repository( session: Session = Depends(get_db_session), ) -> WorkspaceMemberRepository: return SQLAlchemyWorkspaceMemberRepository(session)