feat(#1714): prepare_direct_upload 去重 + 预建 PROCESSING asset 占位 #1730

Merged
auto-approve-bot merged 2 commits from feature/prepare-dedup-1714 into develop 2026-09-06 12:31:38 +08:00

2 Commits

Author SHA1 Message Date
saas-backend-agent 9088be360f test(#1714): 补 prepare 去重边界分支——预建失败降级、update异常吞掉、PROCESSING hash不同跳过/相同命中
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 2s
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 / Check if frontend-only change (pull_request) Successful in 3s
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 Web 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 API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
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 / PR Build API Image (pull_request) Successful in 30s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 30s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 1m35s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m48s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m53s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 2m20s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m5s
AI Code Review / AI Code Review (pull_request) Successful in 4m11s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 5m28s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 6m49s
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 / CI Gate (pull_request) Successful in 4s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 4m31s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 9s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 17s
2026-09-06 12:23:28 +08:00
saas-backend-agent 6a11680f62 feat(#1714): prepare_direct_upload 去重 + 预建 PROCESSING asset 占位
- schema: DirectUploadPrepareRequest 加 client_upload_id;
  DirectUploadPrepareResponse 加 duplicated/skip_transfer/asset_id(向后兼容)
- _create_pending_asset: find-or-create 模式,先按 client_upload_id/file_hash
  查现有记录,命中则复用并补齐字段,未命中才新建
- prepare_direct_upload: 签名 OSS 前按 file_hash/client_upload_id 去重,
  命中直接返回 duplicated=true+skip_transfer=true;未命中正常签名并预建
  PROCESSING 占位 asset(占位失败不阻塞签名)
- _find_duplicate_asset 兜底规则细化:READY/ERROR 总命中;PROCESSING/
  UPLOADING 仅当 hash 一致或占位无 hash 时命中,避免同文件名不同内容冲突
- 8 个新单测覆盖:首次带 hash、重复命中、client_upload_id 重试、
  文件名兜底不命中 PROCESSING、兜底命中 READY、find-or-create 复用
2026-09-06 12:12:02 +08:00