fix: 确认生成 API 改为复用 worker.generate_video 渲染路径(适配 develop 分支)
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 35s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Failing after 1m5s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m5s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m22s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m42s
AI Code Review / AI Code Review (pull_request) Failing after 2m4s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m59s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 1m58s
CI/CD Pipeline / Validate - Code Quality (pull_request) Failing after 2m54s
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 929h54m19s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 929h54m53s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 929h54m21s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 929h54m53s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 929h54m21s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 929h54m57s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 929h54m57s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 929h54m55s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 930h28m16s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 930h28m22s

从 main 分支 PR #1308 手动适配到 develop 分支,保留 develop 现有功能:

Schema 层:
- 新增 ConfirmGenerationRequest schema
- CreateGenerationTaskRequest 增加 6 个新字段(is_preview, source_task_id, output_width, output_height, cover_url, custom_title)
- GenerationTaskResponse 增加对应字段

Domain 层:
- GenerationTask 实体增加 source_task_id, output_width, output_height, cover_url, custom_title 字段
- create() 工厂方法增加对应参数

Application 层:
- CreateGenerationTaskCommand 增加对应字段
- UseCase 执行时传递新字段

DB 层:
- GenerationTaskModel 增加 5 个新列(is_preview 已存在于 develop)
- 仓储 _to_domain/create/update 映射更新

API 路由:
- 新增 POST /tasks/{task_id}/confirm 端点
- 使用 safe_enqueue_generation_task 适配 develop 任务入队机制
- 更新 _to_generation_task_response 和 retry 端点

Worker 层:
- _load_task_info 返回新字段
- generate_video 支持动态分辨率(output_width/output_height 覆盖默认分辨率)

Alembic 迁移 054:
- generation_tasks 表增加 source_task_id, output_width, output_height, cover_url, custom_title 列

单元测试:
- tests/unit/test_confirm_generation.py(7 个测试用例全部通过)
- 适配 develop 的 safe_enqueue_generation_task 入队机制
This commit is contained in:
xiaoxia
2026-08-08 21:31:41 +08:00
parent 9c7bf7f67f
commit 1c020aa622
10 changed files with 673 additions and 2 deletions
@@ -37,6 +37,11 @@ def _to_domain(model: GenerationTaskModel) -> GenerationTask:
resolution=getattr(model, "resolution", "") or "",
bgm_config=dict(getattr(model, "bgm_config", {}) or {}),
is_preview=bool(getattr(model, "is_preview", False)),
source_task_id=getattr(model, "source_task_id", "") or "",
output_width=getattr(model, "output_width", 1280) or 1280,
output_height=getattr(model, "output_height", 720) or 720,
cover_url=getattr(model, "cover_url", "") or "",
custom_title=getattr(model, "custom_title", "") or "",
logs=model.logs or "[]",
created_at=model.created_at,
updated_at=model.updated_at,
@@ -76,6 +81,11 @@ class SQLAlchemyGenerationTaskRepository:
resolution=task.resolution or "",
bgm_config=task.bgm_config or {},
is_preview=task.is_preview or False,
source_task_id=task.source_task_id or "",
output_width=task.output_width,
output_height=task.output_height,
cover_url=task.cover_url or "",
custom_title=task.custom_title or "",
logs=task.logs,
created_at=task.created_at,
updated_at=task.updated_at,
@@ -242,6 +252,11 @@ class SQLAlchemyGenerationTaskRepository:
model.bgm_config = task.bgm_config or {}
if hasattr(model, "is_preview"):
model.is_preview = task.is_preview or False
model.source_task_id = task.source_task_id or ""
model.output_width = task.output_width
model.output_height = task.output_height
model.cover_url = task.cover_url or ""
model.custom_title = task.custom_title or ""
model.logs = task.logs
self.session.commit()
return task
@@ -293,6 +293,11 @@ class GenerationTaskModel(Base):
video_title = Column(String(255), nullable=False, default="")
resolution = Column(String(20), nullable=False, default="")
is_preview = Column(Boolean, nullable=False, default=False, index=True)
source_task_id = Column(String(32), nullable=False, default="", index=True)
output_width = Column(Integer, nullable=False, default=1280)
output_height = Column(Integer, nullable=False, default=720)
cover_url = Column(String(1000), nullable=False, default="")
custom_title = Column(String(500), nullable=False, default="")
bgm_config = Column(JSON, nullable=False, default=dict)
extra_meta = Column("metadata", JSON, nullable=False, default=dict)
logs = Column(Text, nullable=False, default="[]", server_default="[]")