package cache import ( "context" "joybuywork/internal/app" "joybuywork/internal/plugins/jsonm" "joybuywork/internal/repository/dao" "joybuywork/internal/repository/dbcheck" "joybuywork/internal/repository/model" "fmt" ) type FissionWebUser struct { Cache } func NewFissionWebUser(ctx context.Context) *FissionWebUser { c := new(FissionWebUser) c.init(ctx, &model.FissionWebUser{}) return c } // FindByWebId 通过活动的设备id找数据 func (c FissionWebUser) FindByWebId(campaignId int64, webId string) (*model.FissionWebUser, error) { data, err := c.get(c.webIdKey(campaignId, webId), func() ([]byte, error) { m := dao.Q.FissionWebUser data, err := m.WithContext(c.ctx).Where(m.CampaignID.Eq(campaignId), m.WebID.Eq(webId)).Take() if err = dbcheck.DbError(err); err != nil { return nil, err } return jsonm.MarshalCkZero(data) }) if err != nil { return nil, err } var user *model.FissionWebUser err = jsonm.Unmarshal(data, &user) return user, err } // FindById pk 获取数据 func (c FissionWebUser) FindById(id int64) (*model.FissionWebUser, error) { data, err := c.get(c.pkKey(id), func() ([]byte, error) { m := dao.Q.FissionWebUser data, err := m.WithContext(c.ctx).Where(m.ID.Eq(id)).Take() if err = dbcheck.DbError(err); err != nil { return nil, err } return jsonm.MarshalCkZero(data) }) if err != nil { return nil, err } var user *model.FissionWebUser err = jsonm.Unmarshal(data, &user) return user, err } // FindByUserId 通过活动的设备id找数据 func (c FissionWebUser) FindByUserId(campaignId, userId int64) (*model.FissionWebUser, error) { data, err := c.get(c.userIdKey(campaignId, userId), func() ([]byte, error) { if userId == 0 { return nil, nil } m := dao.Q.FissionWebUser data, err := m.WithContext(c.ctx).Where(m.CampaignID.Eq(campaignId), m.UserID.Eq(userId)).Take() if err = dbcheck.DbError(err); err != nil { return nil, err } return jsonm.MarshalCkZero(data) }) if err != nil { return nil, err } var user *model.FissionWebUser err = jsonm.Unmarshal(data, &user) return user, err } func (c FissionWebUser) pkKey(id int64) string { return fmt.Sprintf("%s:%d", c.Prefix(), id) } func (c FissionWebUser) webIdKey(cpnId int64, webId string) string { return fmt.Sprintf("%s:cmapaign_id_%d:web_id_%s", c.Prefix(), cpnId, webId) } func (c FissionWebUser) userIdKey(cpnId, userId int64) string { return fmt.Sprintf("%s:cmapaign_id_%d:user_id_%d", c.Prefix(), cpnId, userId) } // Clear 清理缓存 func (c FissionWebUser) Clear(vals ...*model.FissionWebUser) error { var key []string for _, v := range vals { key = append(key, c.pkKey(v.ID), c.webIdKey(v.CampaignID, v.WebID)) if v.UserID > 0 { key = append(key, c.pkKey(v.ID), c.userIdKey(v.UserID, v.UserID)) } } if len(key) > 0 { return app.Redis.Cache.Del(c.ctx, key...).Err() } return nil }