feat(generate): 编辑流程自动保存草稿+创建任务参数修复+轮询改新接口+清理幽灵API #1465
Reference in New Issue
Block a user
Delete Branch "fix/auto-save-draft-and-api-cleanup"
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?
改动清单
不改动
校验
🚀 预览环境已部署
fe635ef12ato0e619a2da21. Step2选素材后防抖500ms自动保存asset_ids到草稿 2. Step4标题变化后防抖800ms自动保存title到草稿 3. Step6封面请求带上title_config(初始调用+预览缺失后重试) 4. Step7创建任务带source_edit_plan_id + cover_url优先thumbnail_url 5. 轮询改用GET /generation/tasks/{task_id},task_id从创建响应获取 6. 删除7个幽灵API函数:getEditPlans/createEditPlan/deleteEditPlan/ cancelGeneration/copyEditPlan/generateFromTemplate,BGM预设路径改为 /templates/{id}/editor/bgm/presets 7. CreateGenerationTaskResponse对齐后端批量结构{items,total} 8. 所有自动保存失败console.warn静默,不弹窗不阻塞0e619a2da2to83491297f6【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
flush函数在开始执行时将pendingPatchRef.current置为null。如果在后续的getEditPlan或updateEditPlan过程中发生网络错误(非 AbortError),catch块仅打印警告,而finally块中检查pendingPatchRef.current时为空(假设期间没有新的scheduleSave调用),导致本次需要保存的patch数据直接丢失,且不会触发重试。pendingPatchRef的清空操作推迟到updateEditPlan成功之后;或者在catch块中将失败的patch重新放回pendingPatchRef以便下次重试。建议修改逻辑为:仅在updateEditPlan成功后才清除引用,失败时保留数据以便重试。💡 改进建议(不阻塞合并)
[apps/web/src/pages/generate/hooks/generate-video/useGenerationPolling.ts: 32] 生成结果获取失败的提示不够明确
task.status === "completed"但getGenerationTaskResults请求失败时,代码会catch错误并调用onComplete([])。这会导致用户看到“生成成功”但结果列表为空,容易产生困惑。建议在getGenerationTaskResults失败时,通过onFailed传递错误信息,或者在 UI 层区分“生成无结果”和“获取结果列表失败”的状态。[apps/web/src/pages/generate/hooks/useDraftAutoSave.ts: 57] GET 请求失败也导致数据丢失
getEditPlan(读取当前配置)失败,代码也会直接退出,导致待保存的patch丢失。虽然读取失败的概率较低,但为了数据安全,建议同样实现失败重试或数据恢复机制。✅ 良好实践
useGenerationPolling.ts: 重构后的轮询逻辑将templateId依赖改为taskId,解耦了对草稿状态的依赖,逻辑更加健壮;且增加了对 4xx/5xx 错误的区分处理和最大重试次数限制,避免了无限轮询。useDraftAutoSave.ts: 使用AbortController处理组件卸载时的请求取消,防止了内存泄漏和无效状态更新;使用pendingPatchRef合并多次快速变更,减少了不必要的网络请求。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-08-23 05:38:02 | 模型:
CI全绿,自动审批通过。
CI全绿,自动审批通过。
🗑️ 预览环境已清理
PR #1465 已关闭或合并,对应的预览环境已被清理。