package dto // UserListRequest 用户列表请求。 type UserListRequest struct { PageRequest Keyword string `form:"keyword"` // 模糊匹配昵称/手机号/OpenID Status int8 `form:"status" binding:"omitempty,oneof=1 2 3 4"` // 1=正常 2=临时禁用 3=永久禁用 4=已注销 } // UserListItem 用户列表项。 type UserListItem struct { ID int64 `json:"id"` UserUUID string `json:"user_uuid"` Username string `json:"username"` Avatar string `json:"avatar"` Sex int8 `json:"sex"` Phone string `json:"phone"` Status int8 `json:"status"` // 1=正常 2=临时禁用 3=永久禁用 4=已注销 BanReason string `json:"ban_reason"` BanStart int64 `json:"ban_start"` BanExpire int64 `json:"ban_expire"` VIPType int8 `json:"vip_type"` // 1=非会员 2=月度会员 3=年度会员 4=体验会员 VIPExpire int64 `json:"vip_expire"` // VIP 到期时间(秒),已过期时归一为 0 LastLoginTime int64 `json:"last_login_time"` CreatedAt int64 `json:"created_at"` } // UserListResponse 用户列表响应。 type UserListResponse struct { PageResponse List []UserListItem `json:"list"` } // QuotaItem 用户某类额度。 // Cos(quota_type=1):Total=永久总额度、Used=永久累计已用、Remain=永久剩余; // AI/社区/衣柜(2/3/4):Total=每日总额度、Used=当日已用、Remain=当日剩余(次日 0 点重置)。 type QuotaItem struct { QuotaType int8 `json:"quota_type"` // 1=上传 2=AI 3=社区分享 4=衣柜分享 Total int64 `json:"total"` // 总额度(Cos 永久 / 每日额度) Used int64 `json:"used"` // 已用(Cos 永久累计 / 当日已用) Remain int64 `json:"remain"` // 剩余 } // UserGrantItem 用户额度凭证(有有效期赠送额度)。 type UserGrantItem struct { ID int64 `json:"id"` QuotaType int8 `json:"quota_type"` // 1=上传 2=AI 3=社区分享 4=衣柜分享 Amount int64 `json:"amount"` // 赠送总量(Cos=一次性库存;AI/社区/衣柜=有效期内每日加量) Used int64 `json:"used"` // 已用量(仅 Cos 扣减) Source int8 `json:"source"` // 1=会员包 2=加量包 3=广告激励 ExpireTime int64 `json:"expire_time"` // 到期时间(秒,0=跟随 VIP) RefID string `json:"ref_id"` // 关联ID(订单号/广告记录ID/人工发放标识) CreatedAt int64 `json:"created_at"` } // UserDetailResponse 用户详情响应。 type UserDetailResponse struct { UserListItem Quotas []QuotaItem `json:"quotas"` Grants []UserGrantItem `json:"grants"` } // UserBanRequest 封禁用户请求。 type UserBanRequest struct { BanType int8 `json:"ban_type" binding:"required,oneof=1 2"` // 1=临时禁用 2=永久禁用 BanDays int `json:"ban_days" binding:"omitempty,min=1,max=3650"` // 临时禁用天数(ban_type=1 时必填) Reason string `json:"reason" binding:"required,max=200"` } // UserUnbanRequest 解封用户请求。 type UserUnbanRequest struct { Reason string `json:"reason" binding:"omitempty,max=200"` } // UserQuotaAdjustRequest 额度发放请求(发放有有效期额度凭证)。 // Cos(quota_type=1):Amount 为一次性库存,ExpireDays 天内有效; // AI/社区/衣柜(2/3/4):Amount 为有效期内每天额外赠送次数,ExpireDays 天内有效。 type UserQuotaAdjustRequest struct { QuotaType int8 `json:"quota_type" binding:"required,oneof=1 2 3 4"` // 1=上传 2=AI 3=社区分享 4=衣柜分享 Amount int64 `json:"amount" binding:"required,min=1,max=100000000"` // 发放数量 ExpireDays int64 `json:"expire_days" binding:"required,min=1,max=3650"` // 有效期天数 } // UserVIPAdjustRequest VIP 人工调整请求。 // 叠加语义(与购买发放一致):vip_expire = max(当前到期, now) + vip_days*86400。 // vip_days=0 表示取消会员(vip_type 归 1、到期清零)。 type UserVIPAdjustRequest struct { VIPType int8 `json:"vip_type" binding:"required,oneof=1 2 3 4"` // 1=非会员 2=月度会员 3=年度会员 4=体验会员 VIPDays int64 `json:"vip_days" binding:"omitempty,min=0,max=3650"` Reason string `json:"reason" binding:"required,max=200"` }