- Added GetConfig function to retrieve the knowledge base configuration, ensuring proper initialization checks. - Refactored CreateCollection, AddFile, AddText, and AddURL functions to utilize the new GetConfig method for improved error handling and database record management. - Introduced preparation functions (PrepareCreateCollection, PrepareAddFile, PrepareAddText, PrepareAddURL) to streamline request handling and database data preparation. - Enhanced error responses and rollback mechanisms for document and collection operations, improving robustness and clarity in error handling.
110 lines
2.5 KiB
Go
110 lines
2.5 KiB
Go
package types
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/yaoapp/gou/model"
|
|
"github.com/yaoapp/kun/maps"
|
|
)
|
|
|
|
// SearchDocuments searches documents with pagination
|
|
func (c *Config) SearchDocuments(param model.QueryParam, page int, pagesize int) (maps.MapStr, error) {
|
|
modelName := c.DocumentModel
|
|
if modelName == "" {
|
|
modelName = "__yao.kb.document"
|
|
}
|
|
|
|
mod := model.Select(modelName)
|
|
if mod == nil {
|
|
return nil, fmt.Errorf("document model not found: %s", modelName)
|
|
}
|
|
return mod.Paginate(param, page, pagesize)
|
|
}
|
|
|
|
// FindDocument finds a single document by document_id
|
|
func (c *Config) FindDocument(documentID string, param model.QueryParam) (maps.MapStr, error) {
|
|
modelName := c.DocumentModel
|
|
if modelName == "" {
|
|
modelName = "__yao.kb.document"
|
|
}
|
|
|
|
mod := model.Select(modelName)
|
|
if mod == nil {
|
|
return nil, fmt.Errorf("document model not found: %s", modelName)
|
|
}
|
|
|
|
param.Wheres = append(param.Wheres, model.QueryWhere{
|
|
Column: "document_id",
|
|
Value: documentID,
|
|
})
|
|
param.Limit = 1
|
|
|
|
res, err := mod.Get(param)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if len(res) == 0 {
|
|
return nil, fmt.Errorf("document not found: %s", documentID)
|
|
}
|
|
return res[0], nil
|
|
}
|
|
|
|
// CreateDocument creates a new document record
|
|
func (c *Config) CreateDocument(data maps.MapStrAny) (int, error) {
|
|
modelName := c.DocumentModel
|
|
if modelName == "" {
|
|
modelName = "__yao.kb.document"
|
|
}
|
|
|
|
mod := model.Select(modelName)
|
|
if mod == nil {
|
|
return 0, fmt.Errorf("document model not found: %s", modelName)
|
|
}
|
|
return mod.Create(data)
|
|
}
|
|
|
|
// UpdateDocument updates a document by document_id
|
|
func (c *Config) UpdateDocument(documentID string, data maps.MapStrAny) error {
|
|
modelName := c.DocumentModel
|
|
if modelName == "" {
|
|
modelName = "__yao.kb.document"
|
|
}
|
|
|
|
mod := model.Select(modelName)
|
|
if mod == nil {
|
|
return fmt.Errorf("document model not found: %s", modelName)
|
|
}
|
|
|
|
param := model.QueryParam{
|
|
Wheres: []model.QueryWhere{
|
|
{Column: "document_id", Value: documentID},
|
|
},
|
|
Limit: 1,
|
|
}
|
|
|
|
_, err := mod.UpdateWhere(param, data)
|
|
return err
|
|
}
|
|
|
|
// RemoveDocument removes a document by document_id
|
|
func (c *Config) RemoveDocument(documentID string) error {
|
|
modelName := c.DocumentModel
|
|
if modelName == "" {
|
|
modelName = "__yao.kb.document"
|
|
}
|
|
|
|
mod := model.Select(modelName)
|
|
if mod == nil {
|
|
return fmt.Errorf("document model not found: %s", modelName)
|
|
}
|
|
|
|
param := model.QueryParam{
|
|
Wheres: []model.QueryWhere{
|
|
{Column: "document_id", Value: documentID},
|
|
},
|
|
Limit: 1,
|
|
}
|
|
|
|
_, err := mod.DeleteWhere(param)
|
|
return err
|
|
}
|