Files
hi-server/internal/model/promo_usage/model.go
T
2026-05-26 22:11:02 -07:00

72 lines
2.0 KiB
Go

package promo_usage
import (
"context"
"github.com/redis/go-redis/v9"
"gorm.io/gorm"
)
type customPromoUsageLogicModel interface {
FindByOrderNo(ctx context.Context, orderNo string) ([]*PromoUsage, error)
FindByUserAndRule(ctx context.Context, userId, promoRuleId int64) ([]*PromoUsage, error)
QueryListByPage(ctx context.Context, page, size int, userId, promoRuleId, subscribeId int64) (int64, []*PromoUsage, error)
}
func NewModel(conn *gorm.DB, c *redis.Client) Model {
return &customPromoUsageModel{
defaultPromoUsageModel: newPromoUsageModel(conn, c),
}
}
func (m *customPromoUsageModel) FindByOrderNo(ctx context.Context, orderNo string) ([]*PromoUsage, error) {
var list []*PromoUsage
err := m.QueryNoCacheCtx(ctx, &list, func(conn *gorm.DB, v interface{}) error {
return conn.Model(&PromoUsage{}).
Where("order_no = ?", orderNo).
Order("id DESC").
Find(v).Error
})
return list, err
}
func (m *customPromoUsageModel) FindByUserAndRule(ctx context.Context, userId, promoRuleId int64) ([]*PromoUsage, error) {
var list []*PromoUsage
err := m.QueryNoCacheCtx(ctx, &list, func(conn *gorm.DB, v interface{}) error {
return conn.Model(&PromoUsage{}).
Where("user_id = ? AND promo_rule_id = ?", userId, promoRuleId).
Order("id DESC").
Find(v).Error
})
return list, err
}
func (m *customPromoUsageModel) QueryListByPage(ctx context.Context, page, size int, userId, promoRuleId, subscribeId int64) (int64, []*PromoUsage, error) {
var list []*PromoUsage
var total int64
if page <= 0 {
page = 1
}
if size <= 0 {
size = 20
}
err := m.QueryNoCacheCtx(ctx, &list, func(conn *gorm.DB, v interface{}) error {
db := conn.Model(&PromoUsage{})
if userId > 0 {
db = db.Where("user_id = ?", userId)
}
if promoRuleId > 0 {
db = db.Where("promo_rule_id = ?", promoRuleId)
}
if subscribeId > 0 {
db = db.Where("subscribe_id = ?", subscribeId)
}
if err := db.Count(&total).Error; err != nil {
return err
}
return db.Order("id DESC").Limit(size).Offset((page - 1) * size).Find(v).Error
})
return total, list, err
}