feat: 新增 Knowledge 知识库后端服务
- 添加 Knowledge 实体定义 - 添加 Knowledge 仓储层 - 添加 Knowledge 服务层 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
97
server/internal/repository/knowledge_repo.go
Normal file
97
server/internal/repository/knowledge_repo.go
Normal file
@@ -0,0 +1,97 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"x-agents/server/internal/model"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
type KnowledgeRepository struct {
|
||||
db *gorm.DB
|
||||
}
|
||||
|
||||
func NewKnowledgeRepository(db *gorm.DB) *KnowledgeRepository {
|
||||
return &KnowledgeRepository{db: db}
|
||||
}
|
||||
|
||||
// Create 创建知识库
|
||||
func (r *KnowledgeRepository) Create(kb *model.KnowledgeBase) error {
|
||||
return r.db.Create(kb).Error
|
||||
}
|
||||
|
||||
// FindByID 根据ID查询
|
||||
func (r *KnowledgeRepository) FindByID(id string) (*model.KnowledgeBase, error) {
|
||||
var kb model.KnowledgeBase
|
||||
err := r.db.First(&kb, "id = ?", id).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &kb, nil
|
||||
}
|
||||
|
||||
// FindAll 查询所有
|
||||
func (r *KnowledgeRepository) FindAll() ([]model.KnowledgeBase, error) {
|
||||
var list []model.KnowledgeBase
|
||||
err := r.db.Order("created_at DESC").Find(&list).Error
|
||||
return list, err
|
||||
}
|
||||
|
||||
// Update 更新知识库
|
||||
func (r *KnowledgeRepository) Update(id string, updates map[string]interface{}) error {
|
||||
return r.db.Model(&model.KnowledgeBase{}).Where("id = ?", id).Updates(updates).Error
|
||||
}
|
||||
|
||||
// Delete 删除知识库
|
||||
func (r *KnowledgeRepository) Delete(id string) error {
|
||||
return r.db.Delete(&model.KnowledgeBase{}, "id = ?", id).Error
|
||||
}
|
||||
|
||||
// ========== Document ==========
|
||||
|
||||
// CreateDocument 创建文档
|
||||
func (r *KnowledgeRepository) CreateDocument(doc *model.KnowledgeDocument) error {
|
||||
return r.db.Create(doc).Error
|
||||
}
|
||||
|
||||
// FindDocumentByID 根据ID查询文档
|
||||
func (r *KnowledgeRepository) FindDocumentByID(id string) (*model.KnowledgeDocument, error) {
|
||||
var doc model.KnowledgeDocument
|
||||
err := r.db.First(&doc, "id = ?", id).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &doc, nil
|
||||
}
|
||||
|
||||
// FindDocumentsByKBID 根据知识库ID查询文档
|
||||
func (r *KnowledgeRepository) FindDocumentsByKBID(kbID string, status string) ([]model.KnowledgeDocument, error) {
|
||||
var list []model.KnowledgeDocument
|
||||
query := r.db.Where("knowledge_base_id = ?", kbID).Order("uploaded_at DESC")
|
||||
if status != "" && status != "all" {
|
||||
query = query.Where("status = ?", status)
|
||||
}
|
||||
err := query.Find(&list).Error
|
||||
return list, err
|
||||
}
|
||||
|
||||
// UpdateDocument 更新文档
|
||||
func (r *KnowledgeRepository) UpdateDocument(id string, updates map[string]interface{}) error {
|
||||
return r.db.Model(&model.KnowledgeDocument{}).Where("id = ?", id).Updates(updates).Error
|
||||
}
|
||||
|
||||
// DeleteDocument 删除文档
|
||||
func (r *KnowledgeRepository) DeleteDocument(id string) error {
|
||||
return r.db.Delete(&model.KnowledgeDocument{}, "id = ?", id).Error
|
||||
}
|
||||
|
||||
// DeleteDocumentsByKBID 删除知识库下所有文档
|
||||
func (r *KnowledgeRepository) DeleteDocumentsByKBID(kbID string) error {
|
||||
return r.db.Delete(&model.KnowledgeDocument{}, "knowledge_base_id = ?", kbID).Error
|
||||
}
|
||||
|
||||
// CountDocumentsByKBID 统计知识库下文档数
|
||||
func (r *KnowledgeRepository) CountDocumentsByKBID(kbID string) (int64, error) {
|
||||
var count int64
|
||||
err := r.db.Model(&model.KnowledgeDocument{}).Where("knowledge_base_id = ?", kbID).Count(&count).Error
|
||||
return count, err
|
||||
}
|
||||
Reference in New Issue
Block a user