yao/kb/types/collection.go
Max 71b78bc23b Implement knowledge base configuration retrieval and enhance collection/document handling
- 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.
2025-08-12 18:35:30 +08:00

110 lines
2.6 KiB
Go

package types
import (
"fmt"
"github.com/yaoapp/gou/model"
"github.com/yaoapp/kun/maps"
)
// SearchCollections searches collections with pagination
func (c *Config) SearchCollections(param model.QueryParam, page int, pagesize int) (maps.MapStr, error) {
modelName := c.CollectionModel
if modelName == "" {
modelName = "__yao.kb.collection"
}
mod := model.Select(modelName)
if mod == nil {
return nil, fmt.Errorf("collection model not found: %s", modelName)
}
return mod.Paginate(param, page, pagesize)
}
// FindCollection finds a single collection by collection_id
func (c *Config) FindCollection(collectionID string, param model.QueryParam) (maps.MapStr, error) {
modelName := c.CollectionModel
if modelName == "" {
modelName = "__yao.kb.collection"
}
mod := model.Select(modelName)
if mod == nil {
return nil, fmt.Errorf("collection model not found: %s", modelName)
}
param.Wheres = append(param.Wheres, model.QueryWhere{
Column: "collection_id",
Value: collectionID,
})
param.Limit = 1
res, err := mod.Get(param)
if err != nil {
return nil, err
}
if len(res) == 0 {
return nil, fmt.Errorf("collection not found: %s", collectionID)
}
return res[0], nil
}
// CreateCollection creates a new collection record
func (c *Config) CreateCollection(data maps.MapStrAny) (int, error) {
modelName := c.CollectionModel
if modelName == "" {
modelName = "__yao.kb.collection"
}
mod := model.Select(modelName)
if mod == nil {
return 0, fmt.Errorf("collection model not found: %s", modelName)
}
return mod.Create(data)
}
// UpdateCollection updates a collection by collection_id
func (c *Config) UpdateCollection(collectionID string, data maps.MapStrAny) error {
modelName := c.CollectionModel
if modelName == "" {
modelName = "__yao.kb.collection"
}
mod := model.Select(modelName)
if mod == nil {
return fmt.Errorf("collection model not found: %s", modelName)
}
param := model.QueryParam{
Wheres: []model.QueryWhere{
{Column: "collection_id", Value: collectionID},
},
Limit: 1,
}
_, err := mod.UpdateWhere(param, data)
return err
}
// RemoveCollection removes a collection by collection_id
func (c *Config) RemoveCollection(collectionID string) error {
modelName := c.CollectionModel
if modelName == "" {
modelName = "__yao.kb.collection"
}
mod := model.Select(modelName)
if mod == nil {
return fmt.Errorf("collection model not found: %s", modelName)
}
param := model.QueryParam{
Wheres: []model.QueryWhere{
{Column: "collection_id", Value: collectionID},
},
Limit: 1,
}
_, err := mod.DeleteWhere(param)
return err
}