feat: persist ingest flow in postgres
Tests / test (push) Failing after 1m16s
Tests / lint (push) Failing after 34s

This commit is contained in:
Xiaoxia AI
2026-06-15 19:34:47 +08:00
parent 7f416700de
commit 99e72cdcba
16 changed files with 161 additions and 78 deletions
+3 -3
View File
@@ -2,7 +2,7 @@ from fastapi import APIRouter, Depends
from app.dependencies import get_asset_library_repository
from app.schemas.asset_library import AssetLibraryResponse, CreateAssetLibraryRequest, ListAssetLibrariesResponse
from packages.adapters.in_memory import InMemoryAssetLibraryRepository
from packages.adapters.sqlalchemy_impl import SQLAlchemyAssetLibraryRepository
from packages.application import CreateAssetLibraryCommand, CreateAssetLibraryUseCase, ListAssetLibrariesUseCase
from packages.domain import AssetLibraryKind
@@ -13,7 +13,7 @@ router = APIRouter()
def list_asset_libraries(
project_id: str,
kind: str | None = None,
asset_library_repository: InMemoryAssetLibraryRepository = Depends(get_asset_library_repository),
asset_library_repository: SQLAlchemyAssetLibraryRepository = Depends(get_asset_library_repository),
) -> ListAssetLibrariesResponse:
use_case = ListAssetLibrariesUseCase(asset_library_repository)
parsed_kind = AssetLibraryKind(kind) if kind else None
@@ -35,7 +35,7 @@ def list_asset_libraries(
@router.post("", response_model=AssetLibraryResponse)
def create_asset_library(
request: CreateAssetLibraryRequest,
asset_library_repository: InMemoryAssetLibraryRepository = Depends(get_asset_library_repository),
asset_library_repository: SQLAlchemyAssetLibraryRepository = Depends(get_asset_library_repository),
) -> AssetLibraryResponse:
use_case = CreateAssetLibraryUseCase(asset_library_repository)
item = use_case.execute(
+3 -3
View File
@@ -2,7 +2,7 @@ from fastapi import APIRouter, Depends
from app.dependencies import get_asset_repository
from app.schemas.asset import AssetResponse, CreateAssetRequest, ListAssetsResponse
from packages.adapters.in_memory import InMemoryAssetRepository
from packages.adapters.sqlalchemy_impl import SQLAlchemyAssetRepository
from packages.application import CreateAssetCommand, CreateAssetUseCase, ListAssetsUseCase
router = APIRouter()
@@ -11,7 +11,7 @@ router = APIRouter()
@router.get("", response_model=ListAssetsResponse)
def list_assets(
library_id: str,
asset_repository: InMemoryAssetRepository = Depends(get_asset_repository),
asset_repository: SQLAlchemyAssetRepository = Depends(get_asset_repository),
) -> ListAssetsResponse:
use_case = ListAssetsUseCase(asset_repository)
items = use_case.execute(library_id)
@@ -35,7 +35,7 @@ def list_assets(
@router.post("", response_model=AssetResponse)
def create_asset(
request: CreateAssetRequest,
asset_repository: InMemoryAssetRepository = Depends(get_asset_repository),
asset_repository: SQLAlchemyAssetRepository = Depends(get_asset_repository),
) -> AssetResponse:
use_case = CreateAssetUseCase(asset_repository)
item = use_case.execute(
+2 -2
View File
@@ -3,7 +3,7 @@ from fastapi import APIRouter, Depends
from app.core.celery_app import celery_app
from app.dependencies import get_ingest_job_repository
from app.schemas.ingest_job import IngestJobResponse, SubmitIngestJobRequest
from packages.adapters.in_memory import InMemoryIngestJobRepository
from packages.adapters.sqlalchemy_impl import SQLAlchemyIngestJobRepository
from packages.application import SubmitIngestJobCommand, SubmitIngestJobUseCase
router = APIRouter()
@@ -12,7 +12,7 @@ router = APIRouter()
@router.post("", response_model=IngestJobResponse)
def submit_ingest_job(
request: SubmitIngestJobRequest,
ingest_job_repository: InMemoryIngestJobRepository = Depends(get_ingest_job_repository),
ingest_job_repository: SQLAlchemyIngestJobRepository = Depends(get_ingest_job_repository),
) -> IngestJobResponse:
use_case = SubmitIngestJobUseCase(ingest_job_repository)
job = use_case.execute(
+3 -3
View File
@@ -2,8 +2,8 @@ from fastapi import APIRouter, Depends
from app.dependencies import get_project_repository
from app.schemas.project import CreateProjectRequest, ListProjectsResponse, ProjectResponse
from packages.adapters.sqlalchemy_impl import SQLAlchemyProjectRepository
from packages.application import CreateProjectCommand, CreateProjectUseCase, ListProjectsUseCase
from packages.adapters.in_memory import InMemoryProjectRepository
router = APIRouter()
@@ -11,7 +11,7 @@ router = APIRouter()
@router.get("", response_model=ListProjectsResponse)
def list_projects(
workspace_id: str,
project_repository: InMemoryProjectRepository = Depends(get_project_repository),
project_repository: SQLAlchemyProjectRepository = Depends(get_project_repository),
) -> ListProjectsResponse:
use_case = ListProjectsUseCase(project_repository)
projects = use_case.execute(workspace_id)
@@ -31,7 +31,7 @@ def list_projects(
@router.post("", response_model=ProjectResponse)
def create_project(
request: CreateProjectRequest,
project_repository: InMemoryProjectRepository = Depends(get_project_repository),
project_repository: SQLAlchemyProjectRepository = Depends(get_project_repository),
) -> ProjectResponse:
use_case = CreateProjectUseCase(project_repository)
project = use_case.execute(
+3 -3
View File
@@ -3,9 +3,9 @@ from uuid import uuid4
from app.core.celery_app import celery_app
from app.dependencies import get_ingest_job_repository
from app.core.storage import get_minio_service, MinIOService
from app.core.storage import MinIOService, get_minio_service
from app.schemas.upload import UploadAssetResponse
from packages.adapters.in_memory import InMemoryIngestJobRepository
from packages.adapters.sqlalchemy_impl import SQLAlchemyIngestJobRepository
from packages.application import SubmitIngestJobCommand, SubmitIngestJobUseCase
router = APIRouter()
@@ -17,7 +17,7 @@ async def upload_asset(
workspace_id: str = Form(..., description="工作空间 ID"),
project_id: str = Form(..., description="项目 ID"),
library_id: str = Form(..., description="资产库 ID"),
ingest_job_repository: InMemoryIngestJobRepository = Depends(get_ingest_job_repository),
ingest_job_repository: SQLAlchemyIngestJobRepository = Depends(get_ingest_job_repository),
storage_service: MinIOService = Depends(get_minio_service),
) -> UploadAssetResponse:
"""