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 FissionUserJattr struct { Cache } func NewFissionUserJattr(ctx context.Context) *FissionUserJattr { c := new(FissionUserJattr) c.init(ctx, &model.FissionUserJattr{}) return c } // FindByUniqIdx 通过唯一索引获取数据 func (c FissionUserJattr) FindByUniqIdx(userId int64, attr string, events ...Event) (*model.FissionUserJattr, error) { data, err := c.get(c.uniqKey(userId, attr), func() ([]byte, error) { m := dao.Q.FissionUserJattr data, err := m.WithContext(c.ctx).Where(m.UserID.Eq(userId), m.Attr.Eq(attr)).Take() if err = dbcheck.DbError(err); err != nil { return nil, err } return jsonm.MarshalCkZero(data) }, events...) if err != nil { return nil, err } var info *model.FissionUserJattr err = jsonm.Unmarshal(data, &info) return info, err } func (c FissionUserJattr) uniqKey(userId int64, attr string) string { return fmt.Sprintf("%s:%d_%s", c.Prefix(), userId, attr) } // Clear 清理缓存 func (c FissionUserJattr) Clear(vals ...*model.FissionUserJattr) error { var key []string for _, v := range vals { key = append(key, c.uniqKey(v.UserID, v.Attr)) } if len(key) > 0 { return app.Redis.Cache.Del(c.ctx, key...).Err() } return nil }