借款出借人增加员工与公司组合数据库唯一约束(09-17-company-loan-principal-repayment)
- 新迁移 20261011010000_loan_lender_employee_unique:(legal_entity_id, employee_id) 唯一,归档计入、无员工出借人不冲突;生产只读排查重复 0 组 - 触到约束时返回原有 loan.employee_lender_conflict,不报 500 或误报请求重复;员工行锁与代码检查保留 - 测试改为断言数据库拒绝模糊旧数据,补空员工共存与归档占用;变异 12 项含去索引与数据库兜底两种运行 - PRD 补本迁移回退说明;独立只读复核无阻断,发布窗口需重跑重复计数(AC59) Co-Authored-By: Claude Opus 5.5 <[email protected]>
这个提交包含在:
@@ -1,5 +1,21 @@
|
||||
# 公司借款台账与本金归还
|
||||
|
||||
## 2026-10-11 F:员工与公司组合数据库唯一约束(已实施、本地验证与只读复核完成;未提交)
|
||||
|
||||
生产只读排查重复组合为 0 组后,用户批准把“同一公司与员工最多一个出借人(归档计入)”落到数据库。结果见 implement 顶部 F 节。
|
||||
|
||||
- [x] AC56:数据库拒绝同一公司与员工的第二个出借人,含归档行;空员工的手工出借人可多条共存。
|
||||
- [x] AC57:应用触到约束时返回原有“出借人冲突”提示,不报 500、不误报请求重复;代码检查与员工行锁保持。
|
||||
- [x] AC58:借款完整回归通过,并经独立只读复核(涉及迁移)。两轮完整回归各 84 迁移、12 阶段、去重 247 项通过;另一会话只读复核无阻断项、20 个内存探针通过,唯一 P2(缺本迁移回退说明)已在下方补齐。
|
||||
- [ ] AC59:发布窗口重跑存量重复计数为 0,并按 1 个待执行迁移部署。
|
||||
|
||||
### 迁移回退说明(`20261011010000_loan_lender_employee_unique`)
|
||||
|
||||
- **建索引失败**:迁移只有一条 `CREATE UNIQUE INDEX`,单语句原子执行;若发布窗口内出现重复组合导致失败,索引不会部分建立,Prisma 将该迁移记为失败并阻止后续迁移,应用不切换到新版本。处理方式是停止本次发布,回到只读计数重新排查;不在发布中手工删改出借人数据,不改写已应用的迁移历史。失败迁移记录的处理(如标记回滚后重试)须另行批准后按运维手册执行。
|
||||
- **应用回退**:回退到上一版应用时**保留**该索引,不删除。上一版代码在员工行锁内已拒绝同一组合,正常路径不会触到约束;只有极端情况越过旧检查时,旧版创建路径会把约束冲突报为“请求重复”(409),旧身份确认入口会报 500,两者都不会写入重复数据。
|
||||
- **撤销约束**:如确需取消该约束,另起新迁移 `DROP INDEX` 并单独批准,不回退或删除本迁移文件。
|
||||
|
||||
|
||||
## 2026-10-10 E:追回证据刷新提示与员工资料误报(已实施、本地验证及独立只读复核完成;未提交)
|
||||
|
||||
用户批准两项小问题按方案修复,复用本任务,不含数据库唯一约束(需先查存量重复、单独规划)。结果见 implement 顶部 E 节。
|
||||
|
||||
在新工单中引用
屏蔽一个用户