fix(#1774): 模板不存在明确返回404并收敛双表异常降级逻辑 #1779

Merged
auto-approve-bot merged 1 commits from fix/issue-1774-template-404 into develop 2026-09-08 00:30:09 +08:00
Owner

修复内容

Issue #1774:编辑器创建片段接口对不存在/已删除模板一律返回 400,且双表读取靠三层 try/except 异常降级,生产日志充斥 ValueError: 模板不存在 假修复堆栈(27dccf6 遗留)。

改动

  1. 404/422 语义明确:新增 TemplateNotFoundError,模板不存在/已删除/无权限 → 404;模板存在但未配置片段 → 422(配置错误),替代此前一律 400。
  2. 双表收敛_get_template_segments 删除「新表异常→直查配置表→旧表 segments」三层降级;片段配置统一由 EditTemplateService.list_clip_configs_for_editor 显式判定:
    • 用户自建模板(旧表 templates)→ template_owned_by 校验归属 + is_active 后直接读 template_clip_configs
    • 全局模板(新表 edit_templates)→ 全局可读直接读;
    • 两表都没有 → TemplateNotFoundError
  3. 访问门禁get_draft_plan_id 增加模板存在性/归属/未删除校验(草稿缓存命中也校验),模板删除后不能再借既有草稿 plan 继续操作;回滚端点版本不存在改返 404。
  4. 清理假修复日志:移除正常请求中的 ValueError: 模板不存在 堆栈噪声。
  5. 测试:新增 404/422 场景用例(test_editor_clips_random_start / test_mediakit_smart_clips),双表路径测试全量更新(test_get_template_segments_fallback 重写)。

测试

  • pytest tests/unit/test_editor_clips_random_start.py test_mediakit_smart_clips.py test_get_template_segments_fallback.py test_scene_change_prerender.py test_smart_match_integration.py test_unify_template_segments.py110 passed
  • black + isort 已过

关联

  • 与 #1772(模板列表 valid_only 过滤,加载时排除无效模板)互补:#1772 管「列表不展示」,本 PR 管「运行时访问明确报错」,前端 #1777 据 404/422 做自动回退。
  • 两个 PR 都改 template_repository.py 但无逻辑冲突,合并先后均可。

Closes #1774

## 修复内容 Issue #1774:编辑器创建片段接口对不存在/已删除模板一律返回 400,且双表读取靠三层 try/except 异常降级,生产日志充斥 `ValueError: 模板不存在` 假修复堆栈(27dccf6 遗留)。 ### 改动 1. **404/422 语义明确**:新增 `TemplateNotFoundError`,模板不存在/已删除/无权限 → **404**;模板存在但未配置片段 → **422**(配置错误),替代此前一律 400。 2. **双表收敛**:`_get_template_segments` 删除「新表异常→直查配置表→旧表 segments」三层降级;片段配置统一由 `EditTemplateService.list_clip_configs_for_editor` 显式判定: - 用户自建模板(旧表 `templates`)→ `template_owned_by` 校验归属 + is_active 后直接读 `template_clip_configs`; - 全局模板(新表 `edit_templates`)→ 全局可读直接读; - 两表都没有 → `TemplateNotFoundError`。 3. **访问门禁**:`get_draft_plan_id` 增加模板存在性/归属/未删除校验(草稿缓存命中也校验),模板删除后不能再借既有草稿 plan 继续操作;回滚端点版本不存在改返 404。 4. **清理假修复日志**:移除正常请求中的 `ValueError: 模板不存在` 堆栈噪声。 5. **测试**:新增 404/422 场景用例(test_editor_clips_random_start / test_mediakit_smart_clips),双表路径测试全量更新(test_get_template_segments_fallback 重写)。 ## 测试 - `pytest tests/unit/test_editor_clips_random_start.py test_mediakit_smart_clips.py test_get_template_segments_fallback.py test_scene_change_prerender.py test_smart_match_integration.py test_unify_template_segments.py`:**110 passed** - black + isort 已过 ## 关联 - 与 #1772(模板列表 valid_only 过滤,加载时排除无效模板)互补:#1772 管「列表不展示」,本 PR 管「运行时访问明确报错」,前端 #1777 据 404/422 做自动回退。 - 两个 PR 都改 template_repository.py 但无逻辑冲突,合并先后均可。 Closes #1774

🚀 预览环境已部署

项目 详情
PR号 #1779
预览链接 https://pr-1779.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1779 | | 预览链接 | [https://pr-1779.preview.xiaoxiajianji.com](https://pr-1779.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia added 1 commit 2026-09-08 00:23:51 +08:00
fix(#1774): 模板不存在明确返回404并收敛双表异常降级逻辑
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 2s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 31s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 29s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m26s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 1m44s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m44s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 1m47s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m10s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m57s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 5m36s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 4s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m18s
AI Code Review / AI Code Review (pull_request) Successful in 6m20s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 11s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 31s
bac08c2612
- 新增 TemplateNotFoundError:模板不存在/已删除/无权限统一抛 404,
  模板存在但无片段配置返回 422,替代此前一律 400 的模糊行为
- 收敛 _get_template_segments 三层 try/except 异常降级:
  片段配置统一由 list_clip_configs_for_editor 显式判定双表
  (templates 归属校验 + edit_templates 全局可读),不再靠异常控制流
- 编辑器依赖 get_draft_plan_id 增加访问门禁(含 is_active 校验),
  模板删除后草稿缓存命中也不再放行
- 清理 27dccf6 遗留的假修复日志(ValueError 堆栈噪声)
- 补充 404/422 场景测试,双表读取路径全覆盖
xiaoxia force-pushed fix/issue-1774-template-404 from 0d19f3944f to bac08c2612 2026-09-08 00:23:51 +08:00 Compare
auto-approve-bot merged commit 7766ba1479 into develop 2026-09-08 00:30:09 +08:00
auto-approve-bot deleted branch fix/issue-1774-template-404 2026-09-08 00:30:09 +08:00

🗑️ 预览环境已清理

PR #1779 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1779 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.