feat(api): 成品视频接口补全查重字段 duplicate_rate/visual_similarity/match_count #1660 #1678

Merged
auto-approve-bot merged 1 commits from feat/api-dup-fields-1660 into develop 2026-09-04 01:03:37 +08:00
Owner

背景

Issue #1660 的 worker/DB 层(PR #1675)已把查重率百分比、视觉相似度、匹配帧数写入数据库,但成品视频 API 响应未返回这三个字段,前端 #1662 已在消费 visual_similarity / match_count(products 页面)。

改动

  • GeneratedVideoResponse 新增三个可选字段:duplicate_rate / visual_similarity / match_count(默认 None,向后兼容)
  • VideoItemResponseGET /videos 列表实际使用的 schema)补充 visual_similarity / match_count(此前只有 duplicate_rate)
  • 两条响应构造路径透传:generation_tasks._to_generated_video_responsevideos._to_video_response
  • domain GeneratedVideo 与 SQLAlchemy repository 读写映射改为 nullable 语义:
    • 未跑过查重的老数据保持 None,前端 != null 判断自动隐藏展示块
    • 计算后 match_count=0 / visual_similarity=0.0 是合法值,不会再被 or 0 吞成默认值
  • 新增 7 个透传单测(含老数据无字段、显式 None、零值场景)

字段说明

  • duplicate_rate: 百分比 0~100
  • visual_similarity: 归一化 0~1(融合相似度)
  • match_count: 匹配帧数 int

测试

  • 新增 7 测试全过;相关 121 个既有测试全过
  • black + ruff 通过

不碰 dedup.py,与在跑的 PR #1674(#1658)无冲突。

## 背景 Issue #1660 的 worker/DB 层(PR #1675)已把查重率百分比、视觉相似度、匹配帧数写入数据库,但成品视频 API 响应未返回这三个字段,前端 #1662 已在消费 `visual_similarity` / `match_count`(products 页面)。 ## 改动 - `GeneratedVideoResponse` 新增三个可选字段:`duplicate_rate` / `visual_similarity` / `match_count`(默认 None,向后兼容) - `VideoItemResponse`(`GET /videos` 列表实际使用的 schema)补充 `visual_similarity` / `match_count`(此前只有 duplicate_rate) - 两条响应构造路径透传:`generation_tasks._to_generated_video_response`、`videos._to_video_response` - domain `GeneratedVideo` 与 SQLAlchemy repository 读写映射改为 nullable 语义: - 未跑过查重的老数据保持 `None`,前端 `!= null` 判断自动隐藏展示块 - 计算后 `match_count=0` / `visual_similarity=0.0` 是合法值,不会再被 `or 0` 吞成默认值 - 新增 7 个透传单测(含老数据无字段、显式 None、零值场景) ## 字段说明 - `duplicate_rate`: 百分比 0~100 - `visual_similarity`: 归一化 0~1(融合相似度) - `match_count`: 匹配帧数 int ## 测试 - 新增 7 测试全过;相关 121 个既有测试全过 - black + ruff 通过 不碰 dedup.py,与在跑的 PR #1674(#1658)无冲突。
xiaoxia added 1 commit 2026-09-04 00:55:04 +08:00
feat(api): 成品视频接口补全查重字段 duplicate_rate/visual_similarity/match_count #1660
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 3s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 36s
CI/CD Pipeline / PR Build Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 31s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 1m52s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 2m0s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m13s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m32s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m4s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 4m37s
AI Code Review / AI Code Review (pull_request) Successful in 6m15s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 7m36s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 11s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 5m23s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 17s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 22s
9ac54dde6e
- GeneratedVideoResponse 新增三个可选字段(duplicate_rate/visual_similarity/match_count)
- VideoItemResponse(/videos 列表) 补 visual_similarity/match_count,前端 #1662 已在消费
- generation_tasks/videos 路由透传三个字段
- domain GeneratedVideo 与 repository 读写映射改为 nullable 语义:
  未计算的老数据保持 None(前端自动隐藏),计算后 0 是合法值不被吞掉
- 新增 7 个透传单测

🚀 预览环境已部署

项目 详情
PR号 #1678
预览链接 https://pr-1678.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1678 | | 预览链接 | [https://pr-1678.preview.xiaoxiajianji.com](https://pr-1678.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot merged commit 4725d94c7e into develop 2026-09-04 01:03:37 +08:00
auto-approve-bot deleted branch feat/api-dup-fields-1660 2026-09-04 01:03:38 +08:00

🗑️ 预览环境已清理

PR #1678 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1678 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.