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 GameTotalDate struct { Cache } func NewGameTotalDate(ctx context.Context) *GameTotalDate { c := new(GameTotalDate) c.init(ctx, &model.GameTotalDate{}) return c } // FindByUniqIdx 通过唯一索引获取数据 func (c GameTotalDate) FindByUniqIdx(projectId, gameId, linkId int64, date string) (int64, error) { key := c.IdxKey("project_id", projectId, "game_id", gameId, "link_id", linkId, "date", date) id, err := c.getIdxInt64(key, func() ([]byte, error) { m := dao.Q.GameTotalDate data, err := m.WithContext(c.ctx).Where(m.ProjectID.Eq(projectId), m.GameID.Eq(gameId), m.LinkID.Eq(linkId), m.Ymd.Eq(date)).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 { return 0, err } return id, err } func (c GameTotalDate) pkKey(id int64) string { return fmt.Sprintf("%s:%d", c.Prefix(), id) } // Clear 清理缓存 func (c GameTotalDate) Clear(vals ...*model.GameTotalDate) error { var key []string for _, v := range vals { key = append(key, c.pkKey(v.ID), c.IdxKey("project_id", v.ProjectID, "game_id", v.GameID, "link_id", v.LinkID, "date", v.Ymd)) } if len(key) > 0 { return app.Redis.Cache.Del(c.ctx, key...).Err() } return nil }