initial commit
This commit is contained in:
101
models/search.go
Normal file
101
models/search.go
Normal file
@@ -0,0 +1,101 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user