refactor(backend): 智能剪辑后端公共逻辑抽取+解耦 #1884
Reference in New Issue
Block a user
Delete Branch "refactor/backend-audit-cleanup-0914"
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?
重构内容
本次重构严格遵守「不增删功能、不改变接口契约、不改变业务逻辑」原则,聚焦 P2 解耦 + P1 重复代码消除。
1. 新增公共服务
apps/api/app/services/generation_common.py(+175 行)承载从路由层下沉的 4 个公共函数,消除多处重复实现:
query_voice_durations(db, voice_ids):批量查询配音素材时长(原generation_tasks._query_voice_durations,多处重复实现)writeback_edit_plan_config(plan_id, task_id, title_config, db):任务入队后回写 EditPlan.config(原generation_tasks._writeback_edit_plan_config,含标题变化清封面逻辑)collect_plan_segments(plan_id, clip_repo):分页读取 plan clips 构建素材区间避让表(消除了 generation_tasks、edit_plan_service 内两处完全重复的嵌套函数)resolve_latest_plan_by_template(db, template_id, user_id):按 template_id+user_id 查最新 EditPlan(消除 generation_tasks、generation_variant_plans 内 3 处重复查询块)2. 路由层保留兼容别名(re-export)
generation_tasks._query_voice_durations/_writeback_edit_plan_config改为委托公共函数,签名和返回值不变,外部 import 路径完全可用generation_variant_plans.py不再跨 route 私有函数依赖,统一走 service 层3. 收敛重复片段
template_id → 最新 plan查询统一走公共函数_collect_segments/_collect_plan_segments分页素材区间收集统一走公共函数4. 改动文件清单
apps/api/app/services/generation_common.pyapps/api/app/api/routes/generation_tasks.pyapps/api/app/api/routes/generation_variant_plans.pyapps/api/app/services/edit_plan_service.py5. 未做的高风险项(保守处理)
unified_render_service.py(2332 行)类级拆分:涉及 FFmpeg 滤镜链核心逻辑,类级拆分易破坏渲染时序,留给后续小步迭代edit_plan_service.pymixin 拆分:现有单元测试通过 monkey-patchedit_plan_service.record_used_segments验证副作用,拆到 mixin 会打破 patch 路径,需要同步改测试,本次「不改测试」原则下保留原状generation_tasks.py拆分 validator/dispatcher:与 schema/response 紧密耦合,独立拆分风险高db.query(AssetModel)绕过 repository:都是只读时长查询,当前 asset_repo 未提供批量时长接口,贸然改 repository 接口影响面大,保留验证
pytest tests/unit/)ruff checkF401/F811/F841 全部通过,无未使用 import / 未使用变量black/isort格式化通过tests/integration/test_error_scenarios.py报users.phone_verified列不存在,这是测试数据库 schema 落后于模型定义的环境问题(其他集成测试用例不受影响),与本次重构无关🚀 预览环境已部署
🗑️ 预览环境已清理
PR #1884 已关闭或合并,对应的预览环境已被清理。