Files
junhong_cmp_fiber/.scratch/enterprise-auth-and-asset-enhancements/issues/01-card-enterprise-auth-unique-constraint.md
break 3b7b856e48
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m9s
企业授权增强与资产列表扩展
- 企业卡授权唯一约束:新增 DB 迁移(000154),卡级部分唯一索引防止同一张卡被多个企业同时持有,Service 层新增跨企业冲突检测
- 单卡列表新增 network_status 过滤参数
- 单卡/设备列表新增 asset_status、asset_status_name、generation 响应字段
- 单卡/设备列表新增企业维度过滤(authorized_enterprise_id、is_authorized_to_enterprise)及响应中企业授权信息(批量加载,无 N+1)
- 主钱包流水/退款列表新增 asset_identifier 精确过滤参数
- 企业卡授权/收回接口升级为三模式(list/range/filter),企业设备授权/收回升级为双模式(list/filter)
- 升级 sonic v1.14.2 → v1.15.2 以兼容 Go 1.26

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-17 16:23:03 +09:00

1.6 KiB
Raw Blame History

Status: ready-for-human

Parent

.scratch/enterprise-auth-and-asset-enhancements/PRD.md

What to build

修复卡企业授权的数据一致性问题,使其与设备授权保持一致:一张卡在同一时间只能授权给一个企业。

分两步:

第一步:数据库迁移tb_enterprise_card_authorization 表上新增部分唯一索引,约束同一张卡不能同时存在两条有效授权记录(revoked_at IS NULL AND deleted_at IS NULL)。迁移执行前需先查询是否存在脏数据(同一 card_id 有多条 revoked_at IS NULL 的记录),若有需在迁移脚本中先行清理。

第二步service 层校验补充 卡授权 serviceBatchAuthorize)在执行授权前,增加"目标卡是否已授权给其他企业"的校验。目前代码只跳过已授权给同一企业的卡,不阻止授权给第二个企业。新逻辑:若目标卡已存在有效授权(revoked_at IS NULL)且授权对象不是当前企业,则将该卡加入失败列表并给出明确错误原因(如"卡已授权给其他企业,请先收回")。

Acceptance criteria

  • tb_enterprise_card_authorization 表存在部分唯一索引,约束 (card_id) WHERE revoked_at IS NULL AND deleted_at IS NULL
  • 尝试将同一张卡授权给第二个企业时,接口返回失败,错误信息明确说明"已授权给其他企业"
  • 已撤回revoked_at 有值)的历史记录不受唯一约束影响,可正常查询
  • 同一张卡授权给同一企业时仍返回"已授权给该企业"的原有错误,行为不变

Blocked by

None - can start immediately