package app import "time" type InviteCodeStatus string const ( InviteCodeStatusUnused InviteCodeStatus = "unused" InviteCodeStatusUsed InviteCodeStatus = "used" InviteCodeStatusRevoked InviteCodeStatus = "revoked" InviteCodeStatusExpired InviteCodeStatus = "expired" ) // AppInviteCode 玩家邀请码(明文不落库,仅保存 hash) type AppInviteCode struct { ID uint `json:"id" gorm:"primaryKey"` CreatedByUserID uint `json:"createdByUserId" gorm:"index;not null"` CodeHash string `json:"-" gorm:"uniqueIndex;size:64;not null"` CodeLast4 string `json:"codeLast4" gorm:"size:8"` Status InviteCodeStatus `json:"status" gorm:"type:varchar(16);index;not null"` ExpiresAt *time.Time `json:"expiresAt" gorm:"index"` UsedByUserID *uint `json:"usedByUserId" gorm:"index"` UsedAt *time.Time `json:"usedAt"` CreatedAt time.Time `json:"createdAt"` UpdatedAt time.Time `json:"updatedAt"` } func (AppInviteCode) TableName() string { return "app_invite_codes" }