package model import "time" type PromoCodeUsage struct { Id int `json:"id" gorm:"primaryKey;autoIncrement"` PromoCodeId int `json:"promo_code_id" gorm:"not null;index:idx_promo_code_user,unique"` UserId int `json:"user_id" gorm:"not null;index:idx_promo_code_user,unique"` UsedAt time.Time `json:"used_at" gorm:"not null"` } func (PromoCodeUsage) TableName() string { return "promo_code_usages" } func (u *PromoCodeUsage) Insert() error { return DB.Create(u).Error } func GetPromoCodeUsageByCodeAndUser(promoCodeId int, userId int) (*PromoCodeUsage, error) { var usage PromoCodeUsage err := DB.Where("promo_code_id = ? AND user_id = ?", promoCodeId, userId).First(&usage).Error return &usage, err } func GetPromoCodeUsages(page int, pageSize int, promoCodeId int) ([]PromoCodeUsage, int64, error) { var usages []PromoCodeUsage var total int64 query := DB.Model(&PromoCodeUsage{}).Where("promo_code_id = ?", promoCodeId) if err := query.Count(&total).Error; err != nil { return nil, 0, err } if page < 1 { page = 1 } if pageSize < 1 { pageSize = 20 } err := query.Order("id DESC").Offset((page - 1) * pageSize).Limit(pageSize).Find(&usages).Error return usages, total, err }