Files
rag-local/kb/dao/evidence_dao.go
T
2026-08-20 12:05:53 +08:00

116 lines
3.6 KiB
Go

package dao
import (
"context"
"database/sql"
"errors"
"rag-local/kb/consts"
"rag-local/kb/model/entity"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime"
)
var Evidence = &evidenceDao{}
type evidenceDao struct{}
func init() {
ctx := context.Background()
_, err := g.DB(consts.DbGroupDefault).Exec(ctx, `CREATE TABLE IF NOT EXISTS `+consts.TableNameEvidence+` (
id INTEGER PRIMARY KEY AUTOINCREMENT,
filename TEXT NOT NULL DEFAULT '',
file_path TEXT NOT NULL DEFAULT '',
file_type TEXT NOT NULL DEFAULT '',
evidence_type TEXT NOT NULL DEFAULT 'document',
description TEXT NOT NULL DEFAULT '',
case_id INTEGER NOT NULL DEFAULT 0,
dataset_ids TEXT NOT NULL DEFAULT '',
contract_task_id INTEGER NOT NULL DEFAULT 0,
status INTEGER NOT NULL DEFAULT 0,
created_at DATETIME DEFAULT (datetime('now','localtime')),
updated_at DATETIME DEFAULT (datetime('now','localtime'))
)`)
if err != nil {
g.Log().Warningf(ctx, "create kb_evidence table failed: %v", err)
}
if _, err := g.DB(consts.DbGroupDefault).Exec(ctx, "CREATE INDEX IF NOT EXISTS idx_kb_evidence_case_id ON "+consts.TableNameEvidence+"(case_id)"); err != nil {
g.Log().Warningf(ctx, "create index idx_kb_evidence_case_id failed: %v", err)
}
}
func (d *evidenceDao) GetOne(ctx context.Context, id int64) (*entity.Evidence, error) {
var m entity.Evidence
err := g.DB(consts.DbGroupDefault).Model(consts.TableNameEvidence).Ctx(ctx).Where("id", id).Scan(&m)
if errors.Is(err, sql.ErrNoRows) {
return nil, nil
}
if err != nil {
return nil, err
}
return &m, nil
}
func (d *evidenceDao) List(ctx context.Context, page, pageSize int) ([]*entity.Evidence, int, error) {
if page < 1 {
page = 1
}
if pageSize < 1 {
pageSize = 20
}
total, err := g.DB(consts.DbGroupDefault).Model(consts.TableNameEvidence).Ctx(ctx).Count()
if err != nil {
return nil, 0, err
}
var list []*entity.Evidence
err = g.DB(consts.DbGroupDefault).Model(consts.TableNameEvidence).Ctx(ctx).
Page(page, pageSize).OrderDesc("id").Scan(&list)
if list == nil {
list = make([]*entity.Evidence, 0)
}
return list, total, err
}
func (d *evidenceDao) Insert(ctx context.Context, m *entity.Evidence) (int64, error) {
now := gtime.Now().Format("Y-m-d H:i:s")
r, err := g.DB(consts.DbGroupDefault).Model(consts.TableNameEvidence).Ctx(ctx).Data(g.Map{
"filename": m.Filename,
"file_path": m.FilePath,
"file_type": m.FileType,
"evidence_type": m.EvidenceType,
"description": m.Description,
"case_id": m.CaseId,
"dataset_ids": m.DatasetIds,
"contract_task_id": m.ContractTaskId,
"status": m.Status,
"created_at": now,
"updated_at": now,
}).Insert()
if err != nil {
return 0, err
}
return r.LastInsertId()
}
func (d *evidenceDao) Update(ctx context.Context, id int64, data g.Map) error {
data["updated_at"] = gtime.Now().Format("Y-m-d H:i:s")
_, err := g.DB(consts.DbGroupDefault).Model(consts.TableNameEvidence).Ctx(ctx).Data(data).Where("id", id).Update()
return err
}
func (d *evidenceDao) Delete(ctx context.Context, id int64) error {
_, err := g.DB(consts.DbGroupDefault).Model(consts.TableNameEvidence).Ctx(ctx).Where("id", id).Delete()
return err
}
func (d *evidenceDao) ListByCaseId(ctx context.Context, caseId int64) ([]*entity.Evidence, error) {
var list []*entity.Evidence
err := g.DB(consts.DbGroupDefault).Model(consts.TableNameEvidence).Ctx(ctx).
Where("case_id", caseId).OrderDesc("id").Scan(&list)
if list == nil {
list = make([]*entity.Evidence, 0)
}
return list, err
}