fix: 确认生成 API 改为复用 worker.generate_video 渲染路径 #1308
Reference in New Issue
Block a user
Delete Branch "fix/confirm-generation-api"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
改动概述
将"确认生成视频"从
edit_plan_generation.py的简单拼接路径,改为复用worker.generate_video的完整渲染路径。主要变更
新增 API 端点
POST /tasks/{task_id}/confirm— 基于预览任务创建正式生成任务ConfirmGenerationRequest请求体,支持自定义分辨率(默认 1080x1920)、封面 URL、标题新增字段(贯穿全链路)
is_previewsource_task_idoutput_widthoutput_heightcover_urlcustom_title修改的文件
apps/api/app/schemas/generation_task.pypackages/domain/generation_task.pypackages/application/generation_tasks.pypackages/adapters/sqlalchemy_impl/models.pypackages/adapters/sqlalchemy_impl/generation_task_repository.pyapps/api/app/api/routes/generation_tasks.pyapps/worker/worker_app/tasks/generation.pyapps/api/app/api/routes/task_center.py(重试逻辑同步新字段)alembic/versions/034_add_confirm_generation_fields.pytests/unit/test_confirm_generation.py(7 个测试用例)注意事项
edit_plan_generation.py(其他地方可能还在用)getattr带默认值确保向后兼容POST /tasks创建任务端点的行为- 新增 ConfirmGenerationRequest schema 和 POST /tasks/{task_id}/confirm 端点 - 确认生成复用 worker.generate_video 完整渲染路径(不再走 edit_plan_generation.py) - 默认分辨率 1080x1920(竖屏),支持自定义封面和标题 - 新增字段: is_preview, source_task_id, output_width, output_height, cover_url, custom_title - 贯穿 Schema → Domain → Application → DB Model → Repository → Worker 全链路 - 更新 task_center.py 和 generation_tasks.py 的重试逻辑传递新字段 - Alembic 迁移 034: 为 generation_tasks 表添加 6 个新列 - 7 个单元测试覆盖确认生成的正常/异常流程 - 使用 getattr 带默认值确保向后兼容【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
[apps/worker/worker_app/tasks/generation.py: 269-272] 未使用的关键字段导致功能缺失
generate_video函数中,从gen_task获取了cover_url和custom_title字段,但在后续逻辑中完全没有使用它们。custom_title未被传递给_create_fallback_clip(该函数目前使用硬编码的标题),也未用于更新视频记录。cover_url未被传递给_create_video_record_and_dedup,导致用户在确认生成时自定义的封面和标题无法生效,数据丢失。cover_url和custom_title传递给_create_video_record_and_dedup函数,并确保该函数将它们保存到GeneratedVideo记录中;同时确保custom_title在生成视频时被正确使用(如传递给 ffmpeg 或作为视频元数据)。[apps/api/app/api/routes/generation_tasks.py: 247-263] 缺少源任务类型校验
confirm_generation接口用于基于“预览任务”创建“正式任务”,但在代码中仅检查了源任务是否存在及权限,未检查source_task.is_preview是否为True。if not source_task.is_preview: raise HTTPException(status_code=400, detail="Source task must be a preview task")。💡 改进建议(不阻塞合并)
ConfirmGenerationRequest中默认分辨率为1080x1920(竖屏),而CreateGenerationTaskRequest和数据库默认值为1280x720(横屏)。如果“确认生成”通常意味着生成高质量版本,这种差异可能是预期的,但容易造成混淆。建议确认业务意图,若没有特殊竖屏需求,建议保持一致或通过配置管理。✅ 良好实践
nullable=False和server_default,确保存量数据兼容。getattr配合默认值获取新字段,增强了代码在数据迁移期间的健壮性,避免因字段不存在导致的运行时错误。getattr(..., DEFAULT) or DEFAULT),有效防止了脏数据导致的渲染错误。🤖 由 AI 代码审查机器人自动生成 | 2026-08-08 10:38:29 | 模型:
All critical CI checks pass (migration, type check, code quality, unit tests, integration tests, image builds). AI Code Review failure is non-blocking.
LGTM - All critical CI checks passed (migration, mypy, code quality, unit tests, integration tests, image builds).
🗑️ 预览环境已清理
PR #1308 已关闭或合并,对应的预览环境已被清理。