4fee87c5e8
CI/CD Pipeline / Deploy Staging (push) Has been skipped
CI/CD Pipeline / Staging E2E Tests (push) Has been skipped
CI/CD Pipeline / Build Production Runtime Images (push) Has been skipped
CI/CD Pipeline / Deploy Production (push) Has been skipped
CI/CD Pipeline / Production Browser E2E (push) Has been skipped
CI/CD Pipeline / Frontend Lint (push) Failing after 45h56m35s
CI/CD Pipeline / Validate Code Quality And Tests (push) Failing after 45h56m48s
任务1: 素材重复上传检测 - 上传接口支持 file_hash 参数,通过 MD5+素材库ID 去重 - 命中去重直接返回已有 asset_id,不重复存 OSS - file_hash 透传: API → IngestJob → Asset 全链路 - 三条上传路径(表单/直传/分片)均支持去重 - Alembic 031: assets + ingest_jobs 加 file_hash 列+索引 - 6 个单元测试覆盖去重命中/未命中/空hash/透传 任务3: 批量生成视频 - POST /generations 支持 count 参数,一次创建多条生成任务 - 每条任务独立状态跟踪,响应返回 task_ids 列表 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
29 lines
815 B
Python
29 lines
815 B
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from packages.domain import IngestJob
|
|
from packages.ports.ingest_job_repository import IngestJobRepository
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class SubmitIngestJobCommand:
|
|
project_id: str
|
|
library_id: str
|
|
storage_key: str
|
|
file_hash: str = ""
|
|
|
|
|
|
class SubmitIngestJobUseCase:
|
|
def __init__(self, ingest_job_repository: IngestJobRepository):
|
|
self.ingest_job_repository = ingest_job_repository
|
|
|
|
def execute(self, command: SubmitIngestJobCommand) -> IngestJob:
|
|
job = IngestJob.create(
|
|
project_id=command.project_id,
|
|
library_id=command.library_id,
|
|
storage_key=command.storage_key,
|
|
file_hash=command.file_hash,
|
|
)
|
|
return self.ingest_job_repository.create(job)
|