package mysqlmodel type Quota struct { Model UserID int64 `gorm:"column:user_id;uniqueIndex:uk_user_quota,priority:1"` // 用户ID QuotaType int8 `gorm:"column:quota_type;uniqueIndex:uk_user_quota,priority:2"` // 1=cos 2=AI 3=社区分享 4=衣柜分享 Total int64 `gorm:"column:total"` // 免费额度底值(仅 Cos 永久额度使用;AI/社区/衣柜 每日额度不再落库) Used int64 `gorm:"column:used"` // 免费额度已用(仅 Cos 使用,永久累计) } func (Quota) TableName() string { return "user_quotas" } // QuotaGrant 有有效期额度凭证(会员包/加量包/广告激励)。 // AI/社区/衣柜 每日额度场景 Amount 表示「有效期内每天额外赠送次数」,Used 恒为 0; // Cos 永久额度场景 Amount/Used 表示「一次性赠送库存及其已用」。 type QuotaGrant struct { Model UserID int64 `gorm:"column:user_id;index:idx_grant_user_type_expire,priority:1"` // 用户ID QuotaType int8 `gorm:"column:quota_type;index:idx_grant_user_type_expire,priority:2;uniqueIndex:uk_grant_ref_type,priority:2"` // 额度类型 1=cos 2=AI 3=社区分享 4=衣柜分享 Amount int64 `gorm:"column:amount"` // 赠送总量 Used int64 `gorm:"column:used"` // 已用量(仅 Cos 扣减) Source int8 `gorm:"column:source"` // 来源 1=会员包 2=加量包 3=广告激励 ExpireTime int64 `gorm:"column:expire_time;index:idx_grant_user_type_expire,priority:3"` // 到期时间(秒,0 表示跟随 VIP) RefID string `gorm:"column:ref_id;uniqueIndex:uk_grant_ref_type,priority:1"` // 关联ID(订单号/广告记录ID) } func (QuotaGrant) TableName() string { return "quota_grants" } type UserDailyUsage struct { Model // UserID 用户ID;与 StatDate 组成联合唯一索引,保证每日每用户仅一行。 UserID int64 `gorm:"column:user_id;uniqueIndex:uk_daily_usage_user_date,priority:1"` StatDate int64 `gorm:"column:stat_date;uniqueIndex:uk_daily_usage_user_date,priority:2"` // 统计日期(YYYYMMDD) AIRecommendCount int64 `gorm:"column:ai_recommend_count"` // 当日AI推荐次数 OutfitShareCount int64 `gorm:"column:outfit_share_count"` // 当日社区分享次数 ClosetShareCount int64 `gorm:"column:closet_share_count"` // 当日衣柜分享次数 } func (UserDailyUsage) TableName() string { return "user_daily_usages" }