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>
1.6 KiB
1.6 KiB
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 层校验补充
卡授权 service(BatchAuthorize)在执行授权前,增加"目标卡是否已授权给其他企业"的校验。目前代码只跳过已授权给同一企业的卡,不阻止授权给第二个企业。新逻辑:若目标卡已存在有效授权(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