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/withdefault" "fmt" ) type FissionChat struct { Cache } func NewFissionChat(ctx context.Context) *FissionChat { c := new(FissionChat) c.init(ctx, &model.FissionChat{}) return c } // FindByUniq 获取数据 func (c FissionChat) FindByUniq(campaignId, userId int64) (*model.FissionChat, error) { data, err := c.get(c.uniqKey(userId), func() ([]byte, error) { m := dao.Q.FissionChat data, err := m.WithContext(c.ctx).Where(m.UserID.Eq(userId), m.CancelTime.Eq(0)).Take() if err = dbcheck.DbError(err); err != nil { return nil, err } return jsonm.MarshalCkZero(data) }, WithNilSet(func() ([]byte, error) { chat := withdefault.FissionChat(&model.FissionChat{ CampaignID: campaignId, UserID: userId, CancelTime: 0, }) err := dao.Q.FissionChat.WithContext(c.ctx).Create(chat) if err != nil { return nil, err } return jsonm.MarshalCkZero(chat) })) if err != nil { return nil, err } var conf *model.FissionChat err = jsonm.Unmarshal(data, &conf) return conf, err } func (c FissionChat) uniqKey(userId int64) string { return fmt.Sprintf("%s:user_id:%d", c.Prefix(), userId) } // Clear 清理缓存 func (c FissionChat) Clear(vals ...*model.FissionChat) error { var key []string for _, v := range vals { key = append(key, c.uniqKey(v.UserID)) } if len(key) > 0 { return app.Redis.Cache.Del(c.ctx, key...).Err() } return nil }