Files
dax-pay/_config/sql/update-tables.sql
DaxPay Dev bc4e388dfd feat(merchant): 默认应用/门店策略统一治理(唯一约束/删除阻挡/异常分类)
- 数据库加部分唯一索引 uk_mch_app_info_default / uk_mch_store_info_default 兜底
- Service.delete 检查默认项, 禁止删除默认应用/门店
- MchAppInfoService.add 首应用自动默认, 与 MchStoreInfoService 对齐
- resolveApp 异常分类: 默认应用不存在 vs 已停用 vs 指定应用异常
- resolveStoreNo 改抛异常 (替代返回 null), 与 resolveApp 策略对齐
- update-datas.sql 提供脏数据/缺默认项诊断查询
- 6 语种 i18n 新增 5 个错误 key
2026-07-18 23:56:22 +08:00

26 lines
1.3 KiB
SQL

-- ============================================================
-- 门店/应用默认项唯一性约束(升级脚本)
-- ============================================================
-- 背景:
-- 商户应用(MchAppInfo)和门店(MchStoreInfo)均引入「默认项」机制,
-- 要求同一商户下至多一个默认应用 / 至多一个默认门店。
-- 原有约束仅由 Service 层 setDefault(先 clearDefault 再 set)保证,
-- 并发或绕过 Service 直接改库时存在隐患。
-- 策略:
-- 数据库层加 PostgreSQL 部分唯一索引(Partial Unique Index)兜底,
-- 与 Service 层逻辑形成双保险。
-- 影响范围:
-- - 升级前请先执行 update-datas.sql 中的诊断查询,
-- 如发现「同商户多个默认应用/门店」需先人工修复, 否则建索引会失败。
-- ============================================================
-- 商户默认应用唯一索引 (同一商户至多一个 default_app=true 且未删除的记录)
CREATE UNIQUE INDEX IF NOT EXISTS uk_mch_app_info_default
ON mch_app_info (mch_no)
WHERE default_app = TRUE AND deleted = FALSE;
-- 商户默认门店唯一索引 (同一商户至多一个 default_store=true 且未删除的记录)
CREATE UNIQUE INDEX IF NOT EXISTS uk_mch_store_info_default
ON mch_store_info (mch_no)
WHERE default_store = TRUE AND deleted = FALSE;