102 lines
2.3 KiB
Go
102 lines
2.3 KiB
Go
package models
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"cloud.o-forge.io/core/oc-catalog/services"
|
|
"github.com/beego/beego/v2/core/logs"
|
|
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
"go.mongodb.org/mongo-driver/mongo/options"
|
|
)
|
|
|
|
type SearchResult struct {
|
|
Computing []ComputingModel `json:"computing" required:"true"`
|
|
Datacenter []DatacenterModel `json:"datacenter"`
|
|
Storage []StorageModel `json:"storage"`
|
|
Data []DataModel `json:"data"`
|
|
}
|
|
|
|
func FindByWord(word string) (object *SearchResult, err error) {
|
|
|
|
returnObject := SearchResult{}
|
|
opts := options.Find()
|
|
opts.SetLimit(100) //FIXME: Decide if limit and how
|
|
|
|
var cursor *mongo.Cursor
|
|
if strings.TrimSpace(word) == "*" {
|
|
word = ""
|
|
} else {
|
|
word = `(?i).*` + word + `.*`
|
|
}
|
|
// filter := bson.M{"$text": bson.M{"$search": word}}
|
|
|
|
if cursor, err = services.MngoCollComputing.Find(
|
|
services.MngoCtx,
|
|
bson.M{"$or": []bson.M{
|
|
{"description": bson.M{"$regex": word}},
|
|
{"owner": bson.M{"$regex": word}},
|
|
{"license": bson.M{"$regex": word}},
|
|
}},
|
|
opts,
|
|
); err != nil {
|
|
logs.Error(err)
|
|
return nil, err
|
|
}
|
|
if err = cursor.All(services.MngoCtx, &returnObject.Computing); err != nil {
|
|
logs.Error(err)
|
|
return nil, err
|
|
}
|
|
|
|
if cursor, err = services.MngoCollDatacenter.Find(
|
|
services.MngoCtx,
|
|
bson.M{"$or": []bson.M{
|
|
{"name": bson.M{"$regex": word}},
|
|
{"description": bson.M{"$regex": word}},
|
|
{"owner": bson.M{"$regex": word}},
|
|
}}, opts,
|
|
); err != nil {
|
|
logs.Error(err)
|
|
return nil, err
|
|
}
|
|
if err = cursor.All(services.MngoCtx, &returnObject.Datacenter); err != nil {
|
|
logs.Error(err)
|
|
return nil, err
|
|
}
|
|
|
|
if cursor, err = services.MngoCollStorage.Find(
|
|
services.MngoCtx,
|
|
bson.M{"$or": []bson.M{
|
|
{"name": bson.M{"$regex": word}},
|
|
{"description": bson.M{"$regex": word}},
|
|
}},
|
|
opts,
|
|
); err != nil {
|
|
logs.Error(err)
|
|
return nil, err
|
|
}
|
|
if err = cursor.All(services.MngoCtx, &returnObject.Storage); err != nil {
|
|
logs.Error(err)
|
|
return nil, err
|
|
}
|
|
|
|
if cursor, err = services.MngoCollData.Find(
|
|
services.MngoCtx,
|
|
bson.M{"$or": []bson.M{
|
|
{"description": bson.M{"$regex": word}},
|
|
{"example": bson.M{"$regex": word}},
|
|
}},
|
|
opts,
|
|
); err != nil {
|
|
logs.Error(err)
|
|
return nil, err
|
|
}
|
|
if err = cursor.All(services.MngoCtx, &returnObject.Data); err != nil {
|
|
logs.Error(err)
|
|
return nil, err
|
|
}
|
|
|
|
return &returnObject, nil
|
|
}
|