feat: #1775 默认项目/素材库幂等化(DB 唯一约束兜底) #1783
Merged
xiaoxia
merged 2 commits from 2026-09-08 08:43:31 +08:00
feature/default-project-idempotent-1775 into develop
2 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
f6c18b3aa9 |
chore: schema 快照仅增量 is_default 列+部分唯一索引(修正缩进格式)
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m47s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m25s
AI Code Review / AI Code Review (pull_request) Successful in 6m19s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 3m6s
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 1s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
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 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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E 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 14s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 14s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 1m25s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 1m28s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 1m56s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 3m29s
CI/CD Pipeline / Unit Tests (pull_request) Failing after 6m10s
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 / CI Gate (pull_request) Failing after 3s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 8s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 22s
|
||
|
|
6b1966ce90 |
feat: #1775 默认项目/默认素材库幂等化(DB 唯一约束兜底)
问题:小程序端 getOrCreateDefaultProject 在重试/并发/重复调用下, 仅靠应用层"先查后插"不保证幂等,会给同一用户重复创建默认项目。 素材库虽有唯一约束 uq_asset_libraries_project_kind(迁移058), 但 ensure-default 接口未捕获冲突,并发下直接 500。 改动: 1. projects 表新增 is_default 列 + 部分唯一索引 uq_projects_owner_default(owner_user_id WHERE is_default=true), 保证每用户至多一个默认项目(迁移069,存量"默认项目"最早一条回填) 2. Project 实体/Model/Repository 增加 is_default 字段 3. 新增 get_or_create_default_project / find_default_by_owner: INSERT 冲突时捕获 IntegrityError 回滚重查,返回已有记录不报500 4. 素材库仓储新增 get_or_create_default_library(同上幂等语义) 5. 新增 POST /projects/ensure-default 组合接口: 一次请求幂等返回默认项目 + 三类默认素材库ID 6. ensure-default 素材库接口改用幂等仓储方法(修复并发500) 7. in-memory 仓储同步幂等方法 测试:15 个新测试(并发10次只建1个、跨用户独立、IntegrityError恢复、 字段语义),99 个相关旧测试全过。 |