fix(clips): P0 自建模板 from-assets 400 直接查 clip_configs 表兜底 #1596

Merged
xiaoxia merged 1 commits from fix/from-assets-400-clip-config-fallback into develop 2026-09-01 12:03:00 +08:00
Owner

P0 修复:自建模板 from-assets 400(所有自建模板选素材流程全断)

根因

_get_template_segmentstpl_svc.list_clip_configs(template_id) 内部调用 get_template_or_raise → 模板主体在 edit_templates 新表不存在 → ValueError → 被 except Exception 捕获 → 回退旧 template_segments 表 → 数据已迁移至 template_clip_configs 新表 → 返回空列表 → 400 "模板没有片段配置"。

数据规模:全库 583 个自建模板主体在旧表 templates、片段配置在新表 template_clip_configs,全部受影响。

修复

在 except 块与旧系统回退之间新增一段直接查 template_clip_configs 表的逻辑:

  • SQLAlchemyTemplateClipConfigRepository(db).list_by_template(template_id)
  • 片段表自带 template_id 外键,不依赖模板主表

三级回退链

  1. 新模板系统(主表存在)→ 原逻辑不变
  2. 主表不存在 → 直接查 clip_configs 表兜住(新路径
  3. 直接查表也失败 → 回退旧 template_segments
  4. 全部失败 → 返回空

不改

  • edit_template_service.py 公共方法签名
  • clip_config_repo.list_by_template 行为
  • 旧模板兼容逻辑

测试

8 个单测覆盖三级回退链:

  • 新系统正常返回
  • 主表缺失 + 直接查表成功(P0 核心场景)
  • 主表缺失 + 直接查表空 + 旧系统回退
  • 全部失败返回空
  • 直接查表排序
  • None duration 默认值
  • 新系统返回空列表时继续直接查表
  • 正常模板不受影响

验收

  • staging 上用测试账号(自建模板「混剪8/31」template_id=4694c1be3a6f42c5ba737e5c0909a294)走完 AI 选素材 → from-assets,不再 400
## P0 修复:自建模板 from-assets 400(所有自建模板选素材流程全断) ### 根因 `_get_template_segments` 中 `tpl_svc.list_clip_configs(template_id)` 内部调用 `get_template_or_raise` → 模板主体在 `edit_templates` 新表不存在 → `ValueError` → 被 `except Exception` 捕获 → 回退旧 `template_segments` 表 → 数据已迁移至 `template_clip_configs` 新表 → 返回空列表 → 400 "模板没有片段配置"。 数据规模:全库 583 个自建模板主体在旧表 `templates`、片段配置在新表 `template_clip_configs`,全部受影响。 ### 修复 在 except 块与旧系统回退之间新增一段直接查 `template_clip_configs` 表的逻辑: - `SQLAlchemyTemplateClipConfigRepository(db).list_by_template(template_id)` - 片段表自带 `template_id` 外键,不依赖模板主表 ### 三级回退链 1. 新模板系统(主表存在)→ 原逻辑不变 2. 主表不存在 → 直接查 `clip_configs` 表兜住(**新路径**) 3. 直接查表也失败 → 回退旧 `template_segments` 表 4. 全部失败 → 返回空 ### 不改 - `edit_template_service.py` 公共方法签名 - `clip_config_repo.list_by_template` 行为 - 旧模板兼容逻辑 ### 测试 8 个单测覆盖三级回退链: - 新系统正常返回 - 主表缺失 + 直接查表成功(P0 核心场景) - 主表缺失 + 直接查表空 + 旧系统回退 - 全部失败返回空 - 直接查表排序 - None duration 默认值 - 新系统返回空列表时继续直接查表 - 正常模板不受影响 ### 验收 - [ ] staging 上用测试账号(自建模板「混剪8/31」template_id=4694c1be3a6f42c5ba737e5c0909a294)走完 AI 选素材 → from-assets,不再 400
xiaoxia added 1 commit 2026-09-01 07:37:22 +08:00
fix(clips): 自建模板 from-assets 400——直接查 clip_configs 表兜底
CI/CD Pipeline / Check push changed paths (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 / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (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 / 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 / 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 Worker Image (pull_request) Successful in 3m28s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Failing after 4m36s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 5m22s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 5m25s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m36s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 6m9s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 7m9s
CI/CD Pipeline / Validate - Style (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Security (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
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
83cb632653
根因:_get_template_segments 中 tpl_svc.list_clip_configs() 内部调用
get_template_or_raise → 模板主体在 edit_templates 新表不存在 →
ValueError 被 except 捕获 → 回退旧 template_segments 表 → 数据已迁移
至 template_clip_configs → 返回空 → 400 "模板没有片段配置"。

修复:在 except 块与旧系统回退之间新增一段直接查 template_clip_configs
表的逻辑(SQLAlchemyTemplateClipConfigRepository.list_by_template),
绕过主表校验,片段表自带 template_id 外键即可独立查询。

三级回退链:
1. 新模板系统(主表存在)→ 原逻辑不变
2. 主表不存在 → 直接查 clip_configs 表兜住(新路径)
3. 直接查表也失败 → 回退旧 template_segments 表
4. 全部失败 → 返回空

新增 8 个单测覆盖三级回退链全部路径。

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1596 | | 预览链接 | [https://pr-1596.preview.xiaoxiajianji.com](https://pr-1596.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot added 1 commit 2026-09-01 07:44:37 +08:00
style: auto-format with black + isort + prettier [skip ci-format-check]
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 1s
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 / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3s
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web 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 3m59s
AI Code Review / AI Code Review (pull_request) Successful in 4m8s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 4m12s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m25s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 5m46s
CI/CD Pipeline / Integration Tests (pull_request) Failing after 5m54s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 6m27s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 7m30s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Failing after 8m24s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 8m48s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 18m30s
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 / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Failing after 2s
c08a064e55
xiaoxia added 1 commit 2026-09-01 11:29:04 +08:00
chore: trigger CI for PR #1596
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 / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 4s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 3m5s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m17s
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 / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Failing after 3m46s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m50s
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 Worker Image (pull_request) Successful in 1m45s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Failing after 5m21s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 5m30s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 6m0s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 7m52s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 10m57s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 17m22s
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 / Canary Release to Production (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 / CI Gate (pull_request) Failing after 3s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 3m49s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Waiting to run
4396c6be08
xiaoxia merged commit 6ea77725a5 into develop 2026-09-01 12:03:00 +08:00

🗑️ 预览环境已清理

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

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

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