72 lines
2.2 KiB
Go
72 lines
2.2 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"knowlege-lsxd/internal/types"
|
|
"knowlege-lsxd/internal/types/interfaces"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
var ErrKnowledgeBaseNotFound = errors.New("knowledge base not found")
|
|
|
|
// knowledgeBaseRepository implements the KnowledgeBaseRepository interface
|
|
type knowledgeBaseRepository struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
// NewKnowledgeBaseRepository creates a new knowledge base repository
|
|
func NewKnowledgeBaseRepository(db *gorm.DB) interfaces.KnowledgeBaseRepository {
|
|
return &knowledgeBaseRepository{db: db}
|
|
}
|
|
|
|
// CreateKnowledgeBase creates a new knowledge base
|
|
func (r *knowledgeBaseRepository) CreateKnowledgeBase(ctx context.Context, kb *types.KnowledgeBase) error {
|
|
return r.db.WithContext(ctx).Create(kb).Error
|
|
}
|
|
|
|
// GetKnowledgeBaseByID gets a knowledge base by id
|
|
func (r *knowledgeBaseRepository) GetKnowledgeBaseByID(ctx context.Context, id string) (*types.KnowledgeBase, error) {
|
|
var kb types.KnowledgeBase
|
|
if err := r.db.WithContext(ctx).Where("id = ?", id).First(&kb).Error; err != nil {
|
|
if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return nil, ErrKnowledgeBaseNotFound
|
|
}
|
|
return nil, err
|
|
}
|
|
return &kb, nil
|
|
}
|
|
|
|
// ListKnowledgeBases lists all knowledge bases
|
|
func (r *knowledgeBaseRepository) ListKnowledgeBases(ctx context.Context) ([]*types.KnowledgeBase, error) {
|
|
var kbs []*types.KnowledgeBase
|
|
if err := r.db.WithContext(ctx).Find(&kbs).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return kbs, nil
|
|
}
|
|
|
|
// ListKnowledgeBasesByTenantID lists all knowledge bases by tenant id
|
|
func (r *knowledgeBaseRepository) ListKnowledgeBasesByTenantID(
|
|
ctx context.Context, tenantID uint,
|
|
) ([]*types.KnowledgeBase, error) {
|
|
var kbs []*types.KnowledgeBase
|
|
if err := r.db.WithContext(ctx).Where("tenant_id = ?", tenantID).
|
|
Order("created_at DESC").Find(&kbs).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return kbs, nil
|
|
}
|
|
|
|
// UpdateKnowledgeBase updates a knowledge base
|
|
func (r *knowledgeBaseRepository) UpdateKnowledgeBase(ctx context.Context, kb *types.KnowledgeBase) error {
|
|
return r.db.WithContext(ctx).Save(kb).Error
|
|
}
|
|
|
|
// DeleteKnowledgeBase deletes a knowledge base
|
|
func (r *knowledgeBaseRepository) DeleteKnowledgeBase(ctx context.Context, id string) error {
|
|
return r.db.WithContext(ctx).Where("id = ?", id).Delete(&types.KnowledgeBase{}).Error
|
|
}
|