feat: #1775 默认项目/素材库幂等化(DB 唯一约束兜底) #1783
Reference in New Issue
Block a user
Delete Branch "feature/default-project-idempotent-1775"
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?
背景
小程序端
getOrCreateDefaultProject在重试、并发、前端重复调用下,仅靠"先查再插"会给同一用户重复创建默认项目和默认素材库。改动
ProjectModel新增is_default: bool+ 部分唯一索引uq_projects_owner_default(WHERE is_default=true,每用户至多一个默认项目)asset_library_repository.get_or_create_default_library用 IntegrityError 回滚重查,替代先查后插(修复并发 500)project_repository.get_or_create_default_project同上POST /projects/ensure-default,一次拿到 project_id + image/video/voice 三类 library_id测试
15 个新测试 + 99 个旧测试全过。覆盖:并发 10 次只建 1 个、跨用户/跨 kind 独立、IntegrityError 回滚重查、字段语义。
数据清理
存量重复数据清单 SQL 见 discussion,禁止自动删除,由主人/灵应确认后执行。
🚀 预览环境已部署
🗑️ 预览环境已清理
PR #1783 已关闭或合并,对应的预览环境已被清理。