package promo import ( "time" "gorm.io/gorm" ) type Rule struct { Id int64 `gorm:"primaryKey"` Name string `gorm:"type:varchar(100);not null;default:'';comment:Promo Rule Name"` Type string `gorm:"type:varchar(32);not null;default:'';comment:Promo Rule Type"` Params string `gorm:"type:json;not null;comment:Rule Params"` Priority int64 `gorm:"type:int;not null;default:0;comment:Priority"` Enabled *bool `gorm:"type:tinyint(1);not null;default:1;comment:Enabled"` StartTime *time.Time `gorm:"default:null;comment:Start Time"` EndTime *time.Time `gorm:"default:null;comment:End Time"` CreatedAt time.Time `gorm:"<-:create;comment:Create Time"` UpdatedAt time.Time `gorm:"comment:Update Time"` DeletedAt gorm.DeletedAt `gorm:"index;comment:Delete Time"` } func (*Rule) TableName() string { return "promo_rule" } type SubscribePromo struct { Id int64 `gorm:"primaryKey"` SubscribeId int64 `gorm:"not null;index:idx_subscribe_qty_rule,unique;comment:Subscribe ID"` Quantity int64 `gorm:"not null;default:0;index:idx_subscribe_qty_rule,unique;comment:Quantity"` PromoRuleId int64 `gorm:"not null;index:idx_subscribe_qty_rule,unique;index:idx_promo_rule_id;comment:Promo Rule ID"` PromoPrice int64 `gorm:"type:bigint;not null;default:0;comment:Promo Price"` CreatedAt time.Time `gorm:"<-:create;comment:Create Time"` UpdatedAt time.Time `gorm:"comment:Update Time"` } func (*SubscribePromo) TableName() string { return "subscribe_promo" } type Usage struct { Id int64 `gorm:"primaryKey"` UserId int64 `gorm:"not null;index:idx_user_rule;comment:User ID"` PromoRuleId int64 `gorm:"not null;index:idx_user_rule;comment:Promo Rule ID"` SubscribeId int64 `gorm:"not null;comment:Subscribe ID"` OrderNo string `gorm:"type:varchar(255);not null;default:'';index:idx_order_no;comment:Order No"` PromoPrice int64 `gorm:"type:bigint;not null;default:0;comment:Promo Price"` CreatedAt time.Time `gorm:"<-:create;comment:Create Time"` } func (*Usage) TableName() string { return "promo_usage" }