后端:模板不存在返回 404,收敛 templates/edit_templates 双表查询 #1774

Closed
opened 2026-09-07 22:06:10 +08:00 by xiaoxia · 0 comments
Owner

背景

  • POST /api/v1/templates/{template_id}/editor/clips/from-assets 在模板已删除/不存在时,当前返回 400「模板没有片段配置,无法创建片段」,会把“模板不存在”误报成“模板配置错误”。
  • 现有用户模板主要在旧表 templates + template_clip_configs;新表 edit_templates 目前只有 2 条测试数据。
  • apps/api/app/services/edit_template_service.pyget_template_or_raise / list_clip_configs 强依赖新表,旧表模板每次请求都会抛 ValueError: 模板不存在,再由 apps/api/app/api/routes/templates_editor/clips.py 的多层 try/except 降级兜底,正常请求也打印异常堆栈。
  • 27dccf6 只增加了日志,没有修改实际逻辑,不能视为修复。

修复要求

  1. 收敛模板读取路径:repository/service 必须能正确读取现有用户模板。禁止继续叠加“新表失败查旧表、旧表失败再查 segments”的多套兜底逻辑;如果新表是未来方向,本任务内给出兼容或迁移方案,不能把预期分支建立在异常控制流上。
  2. 区分 404 与配置错误
    • 模板不存在、已删除或当前用户无权限:返回 404,错误码和消息明确。
    • 模板存在但确实没有片段/clip config:返回 400 或项目现有约定的 422,消息明确为“模板未配置片段”。
  3. list_clip_configs 对旧表中的正常用户模板应直接返回配置,不得每次打印 ValueError 堆栈。
  4. 清理 27dccf6 中只制造噪音、没有实际修复作用的日志;保留的日志必须有明确诊断价值。
  5. 补充单元测试/接口测试,覆盖不存在、无权限、存在但无配置、正常配置四类场景。

重点文件

  • apps/api/app/api/routes/templates_editor/clips.py
  • apps/api/app/services/edit_template_service.py
  • packages/adapters/sqlalchemy_impl/template_clip_config_repository.py
  • packages/adapters/sqlalchemy_impl/models.py
  • 相关 repository / service / migration / test 文件

验收标准

  • 已删除模板调用 from-assets 返回 404
  • 带 3 条 template_clip_configs 的现有用户模板能正常创建片段,顺序和时长配置正确。
  • 模板存在但无配置时返回明确的 400/422。
  • 用户不能访问他人模板。
  • 正常请求日志中不再出现 ValueError: 模板不存在 堆栈。
  • PR 目标分支为 develop,禁止合并 main
## 背景 - `POST /api/v1/templates/{template_id}/editor/clips/from-assets` 在模板已删除/不存在时,当前返回 400「模板没有片段配置,无法创建片段」,会把“模板不存在”误报成“模板配置错误”。 - 现有用户模板主要在旧表 `templates` + `template_clip_configs`;新表 `edit_templates` 目前只有 2 条测试数据。 - `apps/api/app/services/edit_template_service.py` 中 `get_template_or_raise` / `list_clip_configs` 强依赖新表,旧表模板每次请求都会抛 `ValueError: 模板不存在`,再由 `apps/api/app/api/routes/templates_editor/clips.py` 的多层 `try/except` 降级兜底,正常请求也打印异常堆栈。 - `27dccf6` 只增加了日志,没有修改实际逻辑,不能视为修复。 ## 修复要求 1. **收敛模板读取路径**:repository/service 必须能正确读取现有用户模板。禁止继续叠加“新表失败查旧表、旧表失败再查 segments”的多套兜底逻辑;如果新表是未来方向,本任务内给出兼容或迁移方案,不能把预期分支建立在异常控制流上。 2. **区分 404 与配置错误**: - 模板不存在、已删除或当前用户无权限:返回 **404**,错误码和消息明确。 - 模板存在但确实没有片段/clip config:返回 400 或项目现有约定的 422,消息明确为“模板未配置片段”。 3. `list_clip_configs` 对旧表中的正常用户模板应直接返回配置,不得每次打印 `ValueError` 堆栈。 4. 清理 `27dccf6` 中只制造噪音、没有实际修复作用的日志;保留的日志必须有明确诊断价值。 5. 补充单元测试/接口测试,覆盖不存在、无权限、存在但无配置、正常配置四类场景。 ## 重点文件 - `apps/api/app/api/routes/templates_editor/clips.py` - `apps/api/app/services/edit_template_service.py` - `packages/adapters/sqlalchemy_impl/template_clip_config_repository.py` - `packages/adapters/sqlalchemy_impl/models.py` - 相关 repository / service / migration / test 文件 ## 验收标准 - 已删除模板调用 `from-assets` 返回 **404**。 - 带 3 条 `template_clip_configs` 的现有用户模板能正常创建片段,顺序和时长配置正确。 - 模板存在但无配置时返回明确的 400/422。 - 用户不能访问他人模板。 - 正常请求日志中不再出现 `ValueError: 模板不存在` 堆栈。 - PR 目标分支为 `develop`,禁止合并 `main`。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: xiaoxia/xiaoxia-saas#1774