You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.2 KiB
Go

package cmm
import (
"context"
"joybuywork/internal/app"
"joybuywork/internal/consts/ckey"
"joybuywork/internal/plugins/jsonm"
"joybuywork/internal/repository/cache"
"joybuywork/internal/repository/dao"
"joybuywork/internal/repository/model"
"joybuywork/internal/repository/mtype"
"joybuywork/internal/utils/lockdo"
"joybuywork/internal/utils/merr"
"fmt"
"gorm.io/gen/field"
)
type UserAppReward struct {
ctx context.Context
be *merr.BusinessError
}
func NewUserAppReward(ctx context.Context) UserAppReward {
return UserAppReward{
ctx: ctx,
be: merr.NewBE(ctx),
}
}
func (s UserAppReward) Get(dao *dao.Query, user *model.FissionUser, orders ...field.Expr) (list []*model.FissionCampaignReward, err error) {
conf, err := cache.NewCampaignConfig(s.ctx).FindByCampaignId(user.CampaignID)
if err != nil {
err = s.be.CacheError(err)
return
}
userLang, userLevel, userCountry := user.UserLang, user.UserLevel, user.UserCountry
var mark string
switch conf.RewardGroup {
case mtype.FissionRewardGroupLang:
mark += ":lang_" + userLang
case mtype.FissionRewardGroupUserLevel:
mark += ":lv_" + fmt.Sprint(userLevel)
case mtype.FissionRewardGroupLangAndUserLevel:
mark += fmt.Sprintf(":lang_%s:lv_%d", userLang, userLevel)
case mtype.FissionRewardGroupCountry:
mark += ":country_" + userCountry
default:
}
key := ckey.DataUserAppReward(user.CampaignID, mark)
data, err := lockdo.Bytes(s.ctx, key, func() (data []byte, err error) {
rewards, err1 := NewCMM(s.ctx, dao).UserAppReward(user, orders...)
if err1 != nil {
return nil, err1
}
return jsonm.MarshalCkZero(rewards)
})
err = jsonm.Unmarshal(data, &list)
return
}
func (s UserAppReward) Delete(cpnId int64, rewardGroup int8, lang string, lv int64, country string) (err error) {
var mark string
switch rewardGroup {
case mtype.FissionRewardGroupLang:
mark += ":lang_" + lang
case mtype.FissionRewardGroupUserLevel:
mark += ":lv_" + fmt.Sprint(lv)
case mtype.FissionRewardGroupLangAndUserLevel:
mark += fmt.Sprintf(":lang_%s:lv_%d", lang, lv)
case mtype.FissionRewardGroupCountry:
mark += ":country_" + country
default:
}
return app.Redis.Cache.Del(s.ctx, ckey.DataUserAppReward(cpnId, mark)).Err()
}