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