Files
model-gateway/dao/error_memory_dao.go
T

64 lines
1.9 KiB
Go

package dao
import (
"context"
"model-gateway/consts/public"
"model-gateway/model/entity"
"gitea.redpowerfuture.com/red-future/common/db/gfdb"
)
var ErrorMemory = &errorMemoryDao{}
type errorMemoryDao struct{}
// GetByKey 按记忆键查询(未命中返回 (nil, nil))
func (d *errorMemoryDao) GetByKey(ctx context.Context, key string) (res *entity.ErrorMemory, err error) {
r, err := gfdb.DB(ctx, public.DbNameModelGateway).Model(ctx, public.TableNameErrorMemory).
Where(entity.ErrorMemoryCol.MemoryKey, key).
One()
if err != nil {
return
}
err = r.Struct(&res)
return
}
// Upsert 存在则更新 retryable/reason/analyzed_by,不存在则插入
func (d *errorMemoryDao) Upsert(ctx context.Context, m *entity.ErrorMemory) (err error) {
model := gfdb.DB(ctx, public.DbNameModelGateway).Model(ctx, public.TableNameErrorMemory)
n, err := model.Where(entity.ErrorMemoryCol.MemoryKey, m.MemoryKey).Count()
if err != nil {
return
}
if n > 0 {
_, err = model.Where(entity.ErrorMemoryCol.MemoryKey, m.MemoryKey).Data(map[string]any{
entity.ErrorMemoryCol.Retryable: m.Retryable,
entity.ErrorMemoryCol.Reason: m.Reason,
entity.ErrorMemoryCol.AnalyzedBy: m.AnalyzedBy,
}).Update()
return
}
_, err = model.Insert(m)
return
}
// List 分页查询(按 id 倒序)
func (d *errorMemoryDao) List(ctx context.Context, page, pageSize int) (list []entity.ErrorMemory, total int64, err error) {
model := gfdb.DB(ctx, public.DbNameModelGateway).Model(ctx, public.TableNameErrorMemory)
n, err := model.Count()
if err != nil {
return
}
total = int64(n)
err = model.Page(page, pageSize).OrderDesc(entity.ErrorMemoryCol.Id).Scan(&list)
return
}
// Delete 按 id 删除(软删除)
func (d *errorMemoryDao) Delete(ctx context.Context, id int64) (err error) {
_, err = gfdb.DB(ctx, public.DbNameModelGateway).Model(ctx, public.TableNameErrorMemory).
Where(entity.ErrorMemoryCol.Id, id).Delete()
return
}