[P0] 查重优化: 手动查重页 Worker 任务补全 #1661

Open
opened 2026-09-03 18:45:01 +08:00 by xiaoxia · 0 comments
Owner

背景

/duplication/upload 接口只创建了查重记录,但没有 Worker 任务执行实际查重计算。duplicate_rateduplicate_count 字段永远为空。

任务

  1. 新增 Celery task worker.process_duplication_check:
    • 从 OSS 下载用户上传的视频
    • 计算指纹分片(复用 Issue #1659 的动态抽帧 + 分片逻辑)
    • 与用户所有项目的已有视频比对(跨项目查重)
    • 计算查重率和重复片段列表
    • 更新 DuplicationRecord 的 status, duplicate_rate, duplicate_count, segments
  2. upload_for_duplication() 路由中触发该 Celery task
  3. 状态流转: pending → processing → completed/failed
  4. 重试机制: 失败后最多重试 3 次,间隔 60 秒
  5. 处理完成后清理临时文件

关键文件

  • apps/api/app/api/routes/duplication.py — 上传路由
  • apps/worker/video_processing/dedup.py — 查重算法
  • packages/application/duplication.py — 应用层用例
  • packages/domain/duplication.py — DuplicationRecord 实体

优先级

P0

依赖

Issue #1660(查重率计算 + 跨项目查重)

技术债务约束(铁律)

  • 新代码必须有单元测试覆盖(每个新增/修改函数都要有测试)
  • API 向后兼容:旧字段保留不删,新字段是扩展不是替换
  • 旧逻辑代码改造完成后直接替换,不留 if/else 分支兼容新旧两套
  • staging 先验证通过再上生产
## 背景 `/duplication/upload` 接口只创建了查重记录,但没有 Worker 任务执行实际查重计算。`duplicate_rate` 和 `duplicate_count` 字段永远为空。 ## 任务 1. 新增 Celery task `worker.process_duplication_check`: - 从 OSS 下载用户上传的视频 - 计算指纹分片(复用 Issue #1659 的动态抽帧 + 分片逻辑) - 与用户所有项目的已有视频比对(跨项目查重) - 计算查重率和重复片段列表 - 更新 DuplicationRecord 的 status, duplicate_rate, duplicate_count, segments 2. 在 `upload_for_duplication()` 路由中触发该 Celery task 3. 状态流转: pending → processing → completed/failed 4. 重试机制: 失败后最多重试 3 次,间隔 60 秒 5. 处理完成后清理临时文件 ## 关键文件 - `apps/api/app/api/routes/duplication.py` — 上传路由 - `apps/worker/video_processing/dedup.py` — 查重算法 - `packages/application/duplication.py` — 应用层用例 - `packages/domain/duplication.py` — DuplicationRecord 实体 ## 优先级 P0 ## 依赖 Issue #1660(查重率计算 + 跨项目查重) ## 技术债务约束(铁律) - 新代码必须有单元测试覆盖(每个新增/修改函数都要有测试) - API 向后兼容:旧字段保留不删,新字段是扩展不是替换 - 旧逻辑代码改造完成后直接替换,不留 if/else 分支兼容新旧两套 - staging 先验证通过再上生产
xiaoxia added this to the 技术债务与优化 milestone 2026-09-03 18:45:01 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: xiaoxia/xiaoxia-saas#1661