feat: Step2选素材同步写入edit_plan_clips #1469
Reference in New Issue
Block a user
Delete Branch "feat/sync-edit-plan-clips"
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?
背景
后端正在改造 Worker 渲染逻辑,改为直接读取数据库
edit_plan_clips表渲染(不再从asset_ids重建)。前端需要在选素材时把 clips 写入数据库。改动
updateEditPlanClips(templateId, clips, signal?)— PUT/templates/{id}/editor/clipsbuildClipsFromAssets()— clips 构建逻辑与FrontendPreviewPlayer.buildPlaybackSegments完全一致(clamp(assetDuration, seg.duration_min, seg.duration_max),start_time=0)templateSegmentssource_edit_plan_id、title_config、cover_url、asset_ids都已正确传递(无需额外改动)验收
- New API updateEditPlanClips (PUT /templates/{id}/editor/clips) - useStep2Materials: debounced 800ms, builds clips with same logic as FrontendPreviewPlayer.buildPlaybackSegments (clamp asset duration to template segment duration_min/max) - buildClipsFromAssets shared util ensures duration consistency between preview and clips written to DB - Supports both manual and smart-match modes - Failures are silent (console.warn), never block the user - Step2MaterialSelect/GenerateStepContent pass templateSegments🚀 预览环境已部署
代码审查结果 - PR #1469
⚠️ 问题(1个需要修改)
ids.length为 0),代码直接 return 导致未调用updateEditPlanClips。这会导致后端无法清空 clips 数据,造成前后端数据不一致,生成任务可能残留旧的 clips 数据。templateSegments为空数组时,lastSeg为 undefined,且tplSeg也会为 undefined。虽然代码有 fallback 逻辑Math.min(assetDuration, 10),但在没有模板结构信息的情况下硬编码 10 秒作为默认时长可能不符合业务预期(通常应阻止生成或报错),建议确认此边界场景的业务逻辑。💡 建议(2个可选)
useEffect依赖数组中未包含materials,仅通过useRef获取最新值。如果素材列表中的元数据(如 duration)在加载后被更新,已选中的 clips 将不会自动同步更新时长。建议评估是否需要监听materials的变化或在关键操作时强制刷新。FrontendPreviewPlayer.tsx保持一致,建议抽取公共逻辑函数或增加单元测试以防止未来修改导致两边逻辑不一致。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ✅ 性能良好
🤖 由 AI 代码审查机器人自动生成 | 2026-08-23 08:21:42 | 模型:
🗑️ 预览环境已清理
PR #1469 已关闭或合并,对应的预览环境已被清理。