feat(wallet,tag): 钱包和标签系统多租户改造

核心变更:
- 钱包表:删除 user_id,添加 resource_type/resource_id(绑定资源而非用户)
- 标签表:添加 enterprise_id/shop_id(实现三级隔离:全局/企业/店铺)
- GORM Callback:自动数据权限过滤
- 迁移脚本:可重复执行,已验证回滚功能

钱包归属重构原因:
- 旧设计:钱包绑定用户账号,个人客户卡/设备转手后新用户无法使用余额
- 新设计:钱包绑定资源(卡/设备/店铺),余额随资源流转

标签三级隔离:
- 平台全局标签:所有用户可见
- 企业标签:仅该企业可见(企业内唯一)
- 店铺标签:该店铺及下级可见(店铺内唯一)

测试覆盖:
- 9 个单元测试验证标签多租户过滤(全部通过)
- 迁移和回滚功能测试通过(测试环境)
- OpenSpec 验证通过

变更 ID: fix-wallet-tag-multi-tenant
迁移版本: 000008
参考: openspec/changes/archive/2026-01-13-fix-wallet-tag-multi-tenant/
This commit is contained in:
2026-01-13 16:52:37 +08:00
parent 6e2dc325d7
commit 2570269c8d
18 changed files with 3145 additions and 41 deletions

View File

@@ -4,10 +4,17 @@ package constants
// 钱包系统常量定义
// ========================================
// 钱包资源类型
const (
WalletResourceTypeIotCard = "iot_card" // 物联网卡钱包(个人客户)
WalletResourceTypeDevice = "device" // 设备钱包(个人客户,多卡共享)
WalletResourceTypeShop = "shop" // 店铺钱包(代理商)
)
// 钱包类型
const (
WalletTypeUser = "user" // 用户钱包
WalletTypeAgent = "agent" // 代理钱包
WalletTypeMain = "main" // 钱包
WalletTypeCommission = "commission" // 分佣钱包
)
// 钱包状态