e61988d78f
Co-authored-by: multica-agent <github@multica.ai>
72 lines
2.0 KiB
Go
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
|
|
}
|