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.
93 lines
2.1 KiB
Go
93 lines
2.1 KiB
Go
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
|
|
}
|