fix(#1769): 模板列表过滤无片段配置的无效模板,避免前端选中后400 #1772
Reference in New Issue
Block a user
Delete Branch "fix/filter-invalid-templates-1769"
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?
根因
智能剪辑页 Step1 加载模板列表后,前端自动选中第一个模板(
useTemplateSelection.ts→userTemplates[0].id)。但数据库中存在 在template_clip_configs和template_segments两张表都没有记录 的无效模板(如历史测试残留/创建流程中断产生的垃圾数据)。前端选中这类模板后,Step2 调用POST /api/v1/templates/{id}/clips/from-assets返回 400「模板没有片段配置,无法创建片段」,导致素材无法写入、播放器无内容。27dccf65仅在 clips 路由加了错误日志,未做真正过滤,本 PR 为彻底修复。修改点
后端(核心修复)
GET /api/v1/templates新增查询参数valid_only(默认false):valid_only=true:通过 EXISTS 子查询排除两张片段表都无记录的模板,列表查询与 total 计数共用同一过滤逻辑(SQLAlchemyTemplateRepository._filter_with_segment_configs)ListTemplatesFilter→ListTemplatesUseCase/CountTemplatesUseCase→TemplateRepositoryPort→SQLAlchemyTemplateRepository.list_by_user/count_by_user前端(双保险)
getEditingTemplates支持validOnly参数(序列化为valid_only)useTemplateSelection请求时传{ validOnly: true };自动选中逻辑改为选中第一个segments.length > 0的模板(即使后端过滤有遗漏,前端也不会选中空模板)editing-planner/useTemplateList)和我的模板(useMyTemplates)不传该参数,行为不变测试
tests/unit/test_unify_template_segments.py新增 2 个用例:验证valid_only=True过滤无片段模板(含旧表回退数据判定)、与 mode 等过滤条件及分页组合使用验收
🚀 预览环境已部署
根因:数据库存在 template_clip_configs 和 template_segments 两表都没有 记录的无效模板,剪辑页 Step1 自动选中这类模板后,Step2 调用 POST /templates/{id}/clips/from-assets 返回 400「模板没有片段配置」, 导致素材无法写入、播放器无内容。 修复: - 后端 GET /templates 新增 valid_only 查询参数(默认 false,不影响 模板编辑器/我的模板等管理场景,草稿模板仍可见) - 仓储层 list_by_user/count_by_user 通过 EXISTS 子查询过滤掉两张 片段表都无记录的模板,列表与计数共用同一过滤逻辑 - Port/Filter/UseCase 全链路透传 valid_only - 前端剪辑页 useTemplateSelection 请求时传 validOnly=true,并在自动 选中时跳过 segments 为空的模板(双保险) - 补充仓储层单元测试覆盖过滤逻辑61e84eea93to71a47f7fb7🗑️ 预览环境已清理
PR #1772 已关闭或合并,对应的预览环境已被清理。