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.

119 lines
2.8 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"
"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
}