fix(p0): #1922 from-assets 空 templateId 双斜杠 404 兜底 #1926

Merged
auto-approve-bot merged 2 commits from fix/p0-from-assets-default-template-fallback-v2 into develop 2026-09-15 11:54:06 +08:00

2 Commits

Author SHA1 Message Date
CI Bot d0937a6f29 style: auto-format with black + isort + ruff + prettier [skip ci-format-check]
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 39s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m46s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 1m43s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m43s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m5s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 4m17s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 4m19s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 4m39s
AI Code Review / AI Code Review (pull_request) Successful in 6m36s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 10m33s
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 8m10s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 23s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 47s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 27h30m15s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 27h30m17s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 27h40m51s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 27h40m55s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 27h40m12s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 27h40m12s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 27h40m18s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 27h40m18s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 27h40m20s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 27h29m39s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 27h40m9s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 27h40m7s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 27h29m39s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 27h40m7s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 27h40m12s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 27h40m13s
CI/CD Pipeline / Canary Release to Production (pull_request) Failing after 27h29m38s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 27h40m13s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 28h15m46s
2026-09-15 03:42:42 +00:00
xiaoxia f10106bc51 fix(p0): #1922 from-assets 空 templateId 双斜杠 404 兜底
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m52s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 2m29s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m5s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 3m18s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 3m49s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 4m7s
CI/CD Pipeline / Validate - Style (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Security (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Python (mypy + alembic) (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 Merge on CI Green + Approved (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 27h45m43s
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Failing after 27h45m52s
CI/CD Pipeline / PR Build Web Image (pull_request) Failing after 27h45m55s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 27h45m9s
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Failing after 27h45m11s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 27h45m16s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 27h45m17s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 27h45m17s
CI/CD Pipeline / Check push changed paths (pull_request) Failing after 27h45m24s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 27h45m5s
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Failing after 27h45m11s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 27h45m5s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 27h45m18s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 27h45m19s
根因:
1. PR#1918 清理模板管理 API 时误删了 GET /templates 自动创建默认模板兜底逻辑;
2. 前端 PR#1913 去掉空 tid 拦截后,新用户首次进入生成页 templateId='',
   拼出 URL /templates//editor/clips/from-assets(双斜杠)→ FastAPI 404,
   阻断首次生成流程。

修复(三层兜底):
- 新增 _default_template.py,提供共享函数 get_or_create_default_template_id:
  查有效模板 → 无则 CreateTemplateUseCase 创建默认 voice_over 模板 →
  创建异常回滚后重查(防并发唯一键冲突)。
- GET /templates 列表查询前调用兜底,确保生成页首次拉模板列表时一定有数据。
- 新增独立端点 POST /api/v1/clips/from-assets(tags=[Clips]),template_id 从
  body 传入(可选),为空时后端自动兜底,彻底消除双斜杠路径问题。
- dependencies.py 抽出纯函数 resolve_draft_plan_id(支持 auto_create_default),
  原 get_draft_plan_id Depends 改为薄封装。
- router.py 注册 clips_standalone_router。

配套:16 个单元测试覆盖兜底函数/resolve/list端点/standalone端点/路由注册,
保证 diff coverage ≥ 40% 过 CI 门禁。
2026-09-15 11:34:17 +08:00