- 添加 Knowledge 实体定义 - 添加 Knowledge 仓储层 - 添加 Knowledge 服务层 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
98 lines
2.8 KiB
Go
98 lines
2.8 KiB
Go
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
|
|
}
|