knowledge_base_repository.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package repository
  2. import (
  3. "github.com/2930134478/AI-CS/backend/models"
  4. "gorm.io/gorm"
  5. )
  6. // KnowledgeBaseRepository 封装与知识库相关的数据库操作
  7. type KnowledgeBaseRepository struct {
  8. db *gorm.DB
  9. }
  10. // NewKnowledgeBaseRepository 创建知识库仓库实例
  11. func NewKnowledgeBaseRepository(db *gorm.DB) *KnowledgeBaseRepository {
  12. return &KnowledgeBaseRepository{db: db}
  13. }
  14. // Create 创建新的知识库
  15. func (r *KnowledgeBaseRepository) Create(kb *models.KnowledgeBase) error {
  16. return r.db.Create(kb).Error
  17. }
  18. // GetByID 根据ID查询知识库
  19. func (r *KnowledgeBaseRepository) GetByID(id uint) (*models.KnowledgeBase, error) {
  20. var kb models.KnowledgeBase
  21. if err := r.db.Where("id = ?", id).First(&kb).Error; err != nil {
  22. return nil, err
  23. }
  24. return &kb, nil
  25. }
  26. // List 获取所有知识库列表
  27. func (r *KnowledgeBaseRepository) List() ([]models.KnowledgeBase, error) {
  28. var kbs []models.KnowledgeBase
  29. if err := r.db.Order("created_at DESC").Find(&kbs).Error; err != nil {
  30. return nil, err
  31. }
  32. return kbs, nil
  33. }
  34. // Update 更新知识库
  35. func (r *KnowledgeBaseRepository) Update(kb *models.KnowledgeBase) error {
  36. return r.db.Save(kb).Error
  37. }
  38. // Delete 删除知识库
  39. func (r *KnowledgeBaseRepository) Delete(id uint) error {
  40. return r.db.Delete(&models.KnowledgeBase{}, id).Error
  41. }
  42. // UpdateDocumentCount 更新知识库的文档数量
  43. func (r *KnowledgeBaseRepository) UpdateDocumentCount(id uint, count int) error {
  44. return r.db.Model(&models.KnowledgeBase{}).Where("id = ?", id).Update("document_count", count).Error
  45. }
  46. // GetByIDs 根据多个 ID 批量查询知识库(用于 RAG 过滤)。
  47. func (r *KnowledgeBaseRepository) GetByIDs(ids []uint) ([]models.KnowledgeBase, error) {
  48. if len(ids) == 0 {
  49. return nil, nil
  50. }
  51. var list []models.KnowledgeBase
  52. if err := r.db.Where("id IN ?", ids).Find(&list).Error; err != nil {
  53. return nil, err
  54. }
  55. return list, nil
  56. }