All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m29s
主要变更: - 新增 tb_shop_series_allocation 表,存储系列级别的一次性佣金配置 - ShopPackageAllocation 移除 one_time_commission_amount 字段 - PackageSeries 新增 enable_one_time_commission 字段控制是否启用一次性佣金 - 新增 /api/admin/shop-series-allocations CRUD 接口 - 佣金计算逻辑改为从 ShopSeriesAllocation 获取一次性佣金金额 - 删除废弃的 ShopSeriesOneTimeCommissionTier 模型 - OpenAPI Tag '系列分配' 和 '单套餐分配' 合并为 '套餐分配' 迁移脚本: - 000042: 重构佣金套餐模型 - 000043: 简化佣金分配 - 000044: 一次性佣金分配重构 - 000045: PackageSeries 添加 enable_one_time_commission 字段 测试: - 新增验收测试 (shop_series_allocation, commission_calculation) - 新增流程测试 (one_time_commission_chain) - 删除过时的单元测试(已被验收测试覆盖)
160 lines
5.3 KiB
Go
160 lines
5.3 KiB
Go
package constants
|
||
|
||
import "fmt"
|
||
|
||
// ========================================
|
||
// 认证相关 Redis Key
|
||
// ========================================
|
||
|
||
// RedisAuthTokenKey 生成访问令牌的 Redis 键
|
||
// 用途:存储用户 access token 信息
|
||
// 过期时间:24 小时(可配置)
|
||
func RedisAuthTokenKey(token string) string {
|
||
return fmt.Sprintf("auth:token:%s", token)
|
||
}
|
||
|
||
// RedisRefreshTokenKey 生成刷新令牌的 Redis 键
|
||
// 用途:存储用户 refresh token 信息
|
||
// 过期时间:7 天(可配置)
|
||
func RedisRefreshTokenKey(token string) string {
|
||
return fmt.Sprintf("auth:refresh:%s", token)
|
||
}
|
||
|
||
// RedisUserTokensKey 生成用户令牌列表的 Redis 键
|
||
// 用途:维护用户的所有有效 token 列表(Set 结构)
|
||
// 过期时间:7 天(可配置)
|
||
func RedisUserTokensKey(userID uint) string {
|
||
return fmt.Sprintf("auth:user:%d:tokens", userID)
|
||
}
|
||
|
||
// RedisRateLimitKey 生成限流的 Redis 键
|
||
func RedisRateLimitKey(ip string) string {
|
||
return fmt.Sprintf("ratelimit:%s", ip)
|
||
}
|
||
|
||
// RedisTaskLockKey 生成任务锁的 Redis 键
|
||
// 用途:幂等性控制,防止重复执行
|
||
// 过期时间:24 小时
|
||
func RedisTaskLockKey(requestID string) string {
|
||
return fmt.Sprintf("task:lock:%s", requestID)
|
||
}
|
||
|
||
// RedisTaskStatusKey 生成任务状态的 Redis 键
|
||
// 用途:存储任务执行状态
|
||
// 过期时间:7 天
|
||
func RedisTaskStatusKey(taskID string) string {
|
||
return fmt.Sprintf("task:status:%s", taskID)
|
||
}
|
||
|
||
// RedisShopSubordinatesKey 生成店铺下级 ID 列表的 Redis 键
|
||
// 用途:缓存递归查询的下级店铺 ID 列表
|
||
// 过期时间:30 分钟
|
||
func RedisShopSubordinatesKey(shopID uint) string {
|
||
return fmt.Sprintf("shop:subordinates:%d", shopID)
|
||
}
|
||
|
||
// RedisVerificationCodeKey 生成验证码的 Redis 键
|
||
// 用途:存储手机验证码
|
||
// 过期时间:5 分钟
|
||
func RedisVerificationCodeKey(phone string) string {
|
||
return fmt.Sprintf("verification:code:%s", phone)
|
||
}
|
||
|
||
// RedisVerificationCodeLimitKey 生成验证码发送频率限制的 Redis 键
|
||
// 用途:限制验证码发送频率
|
||
// 过期时间:60 秒
|
||
func RedisVerificationCodeLimitKey(phone string) string {
|
||
return fmt.Sprintf("verification:limit:%s", phone)
|
||
}
|
||
|
||
// ========================================
|
||
// 钱包相关 Redis Key
|
||
// ========================================
|
||
|
||
// RedisWalletLockKey 生成钱包操作锁的 Redis 键
|
||
// 用途:钱包余额变更时的分布式锁,防止并发冲突
|
||
// 过期时间:10 秒
|
||
func RedisWalletLockKey(walletID uint) string {
|
||
return fmt.Sprintf("wallet:lock:%d", walletID)
|
||
}
|
||
|
||
// RedisWalletBalanceKey 生成钱包余额缓存的 Redis 键
|
||
// 用途:缓存钱包余额,减少数据库查询
|
||
// 过期时间:5 分钟
|
||
func RedisWalletBalanceKey(walletID uint) string {
|
||
return fmt.Sprintf("wallet:balance:%d", walletID)
|
||
}
|
||
|
||
// RedisRechargeOrderKey 生成充值订单缓存的 Redis 键
|
||
// 用途:充值订单状态查询缓存
|
||
// 过期时间:1 小时
|
||
func RedisRechargeOrderKey(rechargeNo string) string {
|
||
return fmt.Sprintf("recharge:order:%s", rechargeNo)
|
||
}
|
||
|
||
// RedisWalletTransactionKey 生成钱包交易幂等性的 Redis 键
|
||
// 用途:防止重复交易
|
||
// 过期时间:24 小时
|
||
func RedisWalletTransactionKey(requestID string) string {
|
||
return fmt.Sprintf("wallet:transaction:%s", requestID)
|
||
}
|
||
|
||
// ========================================
|
||
// 标签相关 Redis Key
|
||
// ========================================
|
||
|
||
// RedisTagCacheKey 生成标签缓存的 Redis 键
|
||
// 用途:缓存热门标签列表
|
||
// 过期时间:1 小时
|
||
func RedisTagCacheKey() string {
|
||
return "tag:cache:list"
|
||
}
|
||
|
||
// RedisResourceTagsKey 生成资源标签关联缓存的 Redis 键
|
||
// 用途:缓存资源的标签列表
|
||
// 过期时间:30 分钟
|
||
func RedisResourceTagsKey(resourceType string, resourceID uint) string {
|
||
return fmt.Sprintf("resource:tags:%s:%d", resourceType, resourceID)
|
||
}
|
||
|
||
// ========================================
|
||
// 权限相关 Redis Key
|
||
// ========================================
|
||
|
||
// RedisUserPermissionsKey 生成用户权限列表缓存的 Redis 键
|
||
// 用途:缓存用户的所有权限列表(包含 permCode 和 platform 信息)
|
||
// 格式:JSON 数组 [{"perm_code":"user:list","platform":"web"},...]
|
||
// 过期时间:30 分钟
|
||
func RedisUserPermissionsKey(userID uint) string {
|
||
return fmt.Sprintf("permission:user:%d:list", userID)
|
||
}
|
||
|
||
// ========================================
|
||
// 佣金统计相关 Redis Key
|
||
// ========================================
|
||
|
||
// RedisCommissionStatsKey 生成佣金统计缓存的 Redis 键
|
||
// 用途:缓存梯度返佣统计数据(Hash 结构: total_count, total_amount)
|
||
// 过期时间:周期结束后 7 天
|
||
func RedisCommissionStatsKey(allocationID uint, period string) string {
|
||
return fmt.Sprintf("commission:stats:%d:%s", allocationID, period)
|
||
}
|
||
|
||
// RedisCommissionStatsLockKey 生成佣金统计同步锁的 Redis 键
|
||
// 用途:定时同步任务的分布式锁,防止并发同步
|
||
// 过期时间:5 分钟
|
||
func RedisCommissionStatsLockKey() string {
|
||
return "commission:stats:sync:lock"
|
||
}
|
||
|
||
// ========================================
|
||
// 系列分配相关 Redis Key
|
||
// ========================================
|
||
|
||
// RedisShopSeriesAllocationKey 生成店铺系列分配缓存的 Redis 键
|
||
// 用途:缓存店铺+系列的分配配置
|
||
// 过期时间:30 分钟
|
||
func RedisShopSeriesAllocationKey(shopID, seriesID uint) string {
|
||
return fmt.Sprintf("shop_series_alloc:%d:%d", shopID, seriesID)
|
||
}
|