package models import ( "time" "gorm.io/gorm" ) type Lottery struct { ID uint `gorm:"primaryKey" json:"id"` Name string `gorm:"size:100;not null" json:"name"` Description string `json:"description"` StartTime time.Time `json:"start_time"` EndTime time.Time `json:"end_time"` Cycle string `gorm:"size:20" json:"cycle"` DailyQuota *int `json:"daily_quota"` TotalQuota *int `json:"total_quota"` RegistrationValidity *int `json:"registration_validity"` IsActive bool `gorm:"default:true" json:"is_active"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt gorm.DeletedAt `gorm:"index" json:"-"` Prizes []LotteryPrize `json:"prizes,omitempty"` } func (Lottery) TableName() string { return "lotteries" } type LotteryPrize struct { ID uint `gorm:"primaryKey" json:"id"` LotteryID uint `gorm:"index;not null" json:"lottery_id"` Name string `gorm:"size:100;not null" json:"name"` Type string `gorm:"size:20;not null" json:"type"` Quantity int `gorm:"not null" json:"quantity"` Weight int `gorm:"default:1" json:"weight"` CreditReward *int `json:"credit_reward"` DrawMode string `gorm:"size:20;default:'random'" json:"draw_mode"` } func (LotteryPrize) TableName() string { return "lottery_prizes" } type LotteryParticipant struct { ID uint `gorm:"primaryKey" json:"id"` LotteryID uint `gorm:"index;not null" json:"lottery_id"` UserID uint `gorm:"index;not null" json:"user_id"` PurchaseWeight int `gorm:"default:0" json:"purchase_weight"` RegisteredAt time.Time `json:"registered_at"` } func (LotteryParticipant) TableName() string { return "lottery_participants" } type LotteryWinner struct { ID uint `gorm:"primaryKey" json:"id"` LotteryID uint `gorm:"index;not null" json:"lottery_id"` PrizeID uint `gorm:"index;not null" json:"prize_id"` UserID uint `gorm:"index;not null" json:"user_id"` DrawnAt time.Time `json:"drawn_at"` } func (LotteryWinner) TableName() string { return "lottery_winners" } const ( PrizeTypePhysical = "physical" PrizeTypeVirtual = "virtual" PrizeTypeCredit = "credit" DrawModeRandom = "random" DrawModeWeight = "weight" CycleDaily = "daily" CycleWeekly = "weekly" CycleMonthly = "monthly" )