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
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()
|
|
}
|