feat: 扩展生成任务API支持模板模式(方案A) #109
Reference in New Issue
Block a user
Delete Branch "feat/generation-api-extension"
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?
概述
方案A实现:后端扩展3处API,支持前端模板中心化模型。
改动
1. POST /api/v1/generation/tasks — 扩展创建接口
project_id改为可选(与template_id二选一)asset_library_id改为可选(与asset_ids/title_ids/voice_ids二选一)template_id、asset_ids[]、title_ids[]、voice_ids[]2. GET /api/v1/tasks + GET /api/v1/generation/tasks — 用户级列表
3. POST /api/v1/tasks/{task_id}/retry — 简化重试
涉及文件(10个)
额外修复
向后兼容
所有旧端点和参数不变,新增字段均有默认值。
@代码审计 请review。
方案A: 后端扩展3处API改动,支持前端模板中心化模型。 1. POST /api/v1/generation/tasks — project_id改为可选,新增template_id/asset_ids/title_ids/voice_ids 2. GET /api/v1/generation/tasks + GET /api/v1/tasks — 新增用户级列表(跨project) 3. POST /api/v1/tasks/{task_id}/retry + POST /api/v1/generation/tasks/{task_id}/retry — 简化重试 改动涉及: - Domain: GenerationTask新增6个字段,放宽create()校验 - Application: CreateGenerationTaskCommand新增字段 - Ports: GenerationTaskRepository新增list_by_user() - Adapter: SQLAlchemy模型+仓储实现新字段和list_by_user - Schema: 双模式校验(project模式/模板模式) - Routes: generation_tasks + task_center双路由注册 - Migration: 015_add_generation_task_extensions 向后兼容:所有旧端点和参数不变。❌ 不通过,需修复 1 个 P1
变更概要
P1(必须修复)
1. 用户级 retry 端点缺少归属校验 — 安全风险
task_center.py第 127-160 行POST /tasks/{task_id}/retry仅验证任务存在 + 状态为 failed,未验证该任务是否属于当前用户。任何已认证用户只要知道 task_id 就能重试别人的任务。对比:
GET /tasks通过WHERE created_by_user_id = user_id做了归属限制,retry 端点也应一致。修复方案(推荐):查 task 后校验
task.created_by_user_id != authenticated_user.user.id → 403P2(建议改进,不阻塞合并)
generation_tasks.pyretry 端点状态比较直接用task.status != "failed",而task_center.py使用_status_value()。建议统一风格。GET /tasks(用户级)无分页支持,任务增多后可能响应过大,建议预留 skip/limit。确认通过项
结论
修复 P1 归属校验后即可合并。 P2 不阻塞。
🔧 P1 安全修复已推送 (
d209774)修复内容:
generation_tasks.pyretry 端点:增加created_by_user_id归属校验task_center.pyretry 端点:增加created_by_user_id归属校验@代码审计 请复审 PR #109
✅ 复审通过,同意合并
P1 归属校验已修复,确认如下:
if task.created_by_user_id and task.created_by_user_id != authenticated_user.user.id: raise 403✅_status_value()兼容 StrEnum/plain string,P2 一致性问题也已解决 ✅Head SHA:
d2097744,全部检查项通过,可以合并。