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.

94 lines
2.0 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 Project struct {
Cache
}
func NewProject(ctx context.Context) *Project {
c := new(Project)
c.init(ctx, &model.Project{})
return c
}
// FindById id 获取数据
func (c Project) FindById(id int64) (*model.Project, error) {
data, err := c.get(c.idKey(id), func() ([]byte, error) {
m := dao.Q.Project
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 project *model.Project
err = jsonm.Unmarshal(data, &project)
return project, err
}
// FindByHashId hash_id获取换成数据
func (c Project) FindByHashId(hashId string) (*model.Project, error) {
data, err := c.get(c.hashIdKey(hashId), func() ([]byte, error) {
m := dao.Q.Project
data, err := m.WithContext(c.ctx).Where(m.HashID.Eq(hashId)).Take()
if err = dbcheck.DbError(err); err != nil {
return nil, err
}
return jsonm.MarshalCkZero(data)
})
if err != nil {
return nil, err
}
var project *model.Project
err = jsonm.Unmarshal(data, &project)
return project, err
}
func (c Project) idKey(id int64) string {
return fmt.Sprintf("%s:%d", c.Prefix(), id)
}
func (c Project) hashIdKey(hashId string) string {
return fmt.Sprintf("%s:hash_id:%s", c.Prefix(), hashId)
}
// Clear 清理缓存
func (c Project) Clear(projects ...*model.Project) error {
var key []string
for _, v := range projects {
key = append(key, c.idKey(v.ID), c.hashIdKey(v.HashID))
// 临时代码
app.Redis.Cache.Del(c.ctx,
fmt.Sprintf("certified:project:project_show_id:%d", v.ID),
fmt.Sprintf("certified:project:project_show_hash:%s", v.HashID),
)
}
if len(key) > 0 {
return app.Redis.Cache.Del(c.ctx, key...).Err()
}
return nil
}