package cache import ( "context" "joybuywork/internal/app" "joybuywork/internal/plugins/jsonm" "joybuywork/internal/repository/dao" "joybuywork/internal/repository/dbcheck" "joybuywork/internal/repository/model" "joybuywork/internal/repository/mtype" "errors" "fmt" ) type CampaignChannel struct { Cache } func NewCampaignChannel(ctx context.Context) *CampaignChannel { c := new(CampaignChannel) c.init(ctx, &model.FissionCampaignChannel{}) return c } // FindById id 获取数据 func (c CampaignChannel) FindById(id int64) (*model.FissionCampaignChannel, error) { data, err := c.get(c.idKey(id), func() ([]byte, error) { m := dao.Q.FissionCampaignChannel 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 info *model.FissionCampaignChannel err = jsonm.Unmarshal(data, &info) return info, err } // FindByMark 通过活动渠道标识找渠道 func (c CampaignChannel) FindByMark(campaignId int64, mark string) (*model.FissionCampaignChannel, error) { if campaignId == 0 || mark == "" { return nil, errors.New("params not empty") } key := c.IdxKey("campaign_id", campaignId, "mark", mark) id, err := c.getIdxInt64(key, func() ([]byte, error) { m := dao.Q.FissionCampaignChannel data, err := m.WithContext(c.ctx).Select(m.ID).Where(m.CampaignID.Eq(campaignId), m.Mark.Eq(mark), m.IsDel.Eq(mtype.No)).Take() if err = dbcheck.DbError(err); err != nil { return nil, err } if data == nil { return nil, nil } return jsonm.MarshalCkZero(data.ID) }) if err != nil || id == 0 { return nil, err } return c.FindById(id) } func (c CampaignChannel) idKey(id int64) string { return fmt.Sprintf("%s:%d", c.Prefix(), id) } // Clear 清理缓存 func (c CampaignChannel) Clear(campaigns ...*model.FissionCampaignChannel) error { var key []string for _, v := range campaigns { key = append(key, c.idKey(v.ID)) } if len(key) > 0 { return app.Redis.Cache.Del(c.ctx, key...).Err() } return nil }