saw-go/service/knowledgeBaseService.go

95 lines
2.6 KiB
Go
Raw Permalink Normal View History

2025-04-08 15:58:29 +08:00
package service
import (
"StuAcaWorksAI/dao"
"StuAcaWorksAI/proto"
"StuAcaWorksAI/worker"
2025-04-08 15:58:29 +08:00
"errors"
"github.com/google/uuid"
"time"
2025-04-08 15:58:29 +08:00
)
func CreateKnowledgeBase(userID int, req proto.KnowledgeBaseReq) (dao.KnowledgeBase, error) {
//生成uuid
uuid := uuid.New().String()
sessionName := "知识库会话:" + req.Name
//创建会话
err, sessionID := CreateSession(userID, proto.SessionTypeKnowledgeBase, sessionName)
if err != nil {
return dao.KnowledgeBase{}, err
}
// 创建知识库
base := dao.KnowledgeBase{AuthID: uint(userID), Name: req.Name, Description: req.Description, UUID: uuid, FileIDs: req.FileIDS, SessionID: sessionID}
knowledgeBase, err := dao.CreateKnowledgeBase(base)
if err != nil {
return dao.KnowledgeBase{}, err
}
// 创建向量数据库,后面完成
return knowledgeBase, err
}
// 更新知识库
func UpdateKnowledgeBase(userID int, req proto.KnowledgeBaseReq) (dao.KnowledgeBase, error) {
//查找知识库
knowledgeBase, err := dao.GetKnowledgeBaseByID(req.ID)
if err != nil {
return dao.KnowledgeBase{}, err
}
if knowledgeBase.AuthID != uint(userID) {
return dao.KnowledgeBase{}, errors.New("not authorized to update this knowledge base")
}
knowledgeBase.Name = req.Name
knowledgeBase.Description = req.Description
knowledgeBase.FileIDs = req.FileIDS
return dao.UpdateKnowledgeBase(knowledgeBase)
}
// 获取知识库列表
func GetKnowledgeBaseList(userID int) ([]dao.KnowledgeBase, error) {
knowledgeBases, err := dao.GetKnowledgeBaseList(userID)
if err != nil {
return nil, err
}
return knowledgeBases, nil
}
// 删除知识库
func DeleteKnowledgeBase(userID int, req proto.KnowledgeBaseReq) error {
//查找知识库
knowledgeBase, err := dao.GetKnowledgeBaseByID(req.ID)
if err != nil {
return err
}
if knowledgeBase.AuthID != uint(userID) {
return errors.New("not authorized to delete this knowledge base")
}
return dao.DeleteKnowledgeBase(knowledgeBase.ID)
}
// 将配置文件中支持的知识库处理服务器添加到集合
func AddKnowledgeBaseServer() {
set := "kbase_server_id_set"
var serverIDs []string
for _, server := range proto.Config.KBASE_SERVER {
serverIDs = append(serverIDs, server.ServerID)
}
worker.SetRedisSet(set, serverIDs, time.Hour)
}
// 根据会话id查找知识库
func FindKnowledgeBaseBySessionID(sessionID uint, userID uint) (dao.KnowledgeBase, error) {
knowledgeBase, err := dao.GetKnowledgeBaseBySessionID(sessionID)
if err != nil {
return dao.KnowledgeBase{}, err
}
if knowledgeBase.AuthID != userID {
return dao.KnowledgeBase{}, errors.New("not authorized to access this knowledge base")
}
return knowledgeBase, nil
}