COMPLEX SEARCH
This commit is contained in:
parent
ad455e0e3a
commit
924a688a9d
83
dbs/dbs.go
83
dbs/dbs.go
@ -1,9 +1,92 @@
|
|||||||
package dbs
|
package dbs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"go.mongodb.org/mongo-driver/bson"
|
"go.mongodb.org/mongo-driver/bson"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type Operator int
|
||||||
|
|
||||||
|
const (
|
||||||
|
LIKE Operator = iota
|
||||||
|
EXISTS
|
||||||
|
IN
|
||||||
|
GTE
|
||||||
|
LTE
|
||||||
|
LT
|
||||||
|
GT
|
||||||
|
EQUAL
|
||||||
|
)
|
||||||
|
|
||||||
|
var str = [...]string{
|
||||||
|
"like",
|
||||||
|
"exists",
|
||||||
|
"in",
|
||||||
|
"gte",
|
||||||
|
"lte",
|
||||||
|
"lt",
|
||||||
|
"gt",
|
||||||
|
"equal",
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Operator) String() string {
|
||||||
|
return str[m]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m Operator) ToMongoOperator() string {
|
||||||
|
switch m {
|
||||||
|
case LIKE:
|
||||||
|
return "$regex"
|
||||||
|
case EXISTS:
|
||||||
|
return "$exists"
|
||||||
|
case IN:
|
||||||
|
return "$in"
|
||||||
|
case GTE:
|
||||||
|
return "$gte"
|
||||||
|
case GT:
|
||||||
|
return "$gt"
|
||||||
|
case LTE:
|
||||||
|
return "$lte"
|
||||||
|
case LT:
|
||||||
|
return "$lt"
|
||||||
|
case EQUAL:
|
||||||
|
return "$match"
|
||||||
|
default:
|
||||||
|
return "$regex"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func StringToOperator(s string) Operator {
|
||||||
|
for i, v := range str {
|
||||||
|
if v == s {
|
||||||
|
return Operator(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return LIKE
|
||||||
|
}
|
||||||
|
|
||||||
|
func ToValueOperator(operator Operator, value interface{}) interface{} {
|
||||||
|
if strings.TrimSpace(fmt.Sprintf("%v", value)) == "*" {
|
||||||
|
value = ""
|
||||||
|
}
|
||||||
|
if operator == LIKE {
|
||||||
|
return "(?i).*" + strings.TrimSpace(fmt.Sprintf("%v", value)) + ".*"
|
||||||
|
}
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
|
||||||
|
type Filters struct {
|
||||||
|
And map[string]Filter `json:"and"`
|
||||||
|
Or map[string]Filter `json:"or"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Filter struct {
|
||||||
|
Operator string `json:"operator,omitempty"`
|
||||||
|
Value interface{} `json:"value,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
type Input = map[string]interface{}
|
type Input = map[string]interface{}
|
||||||
|
|
||||||
func InputToBson(i Input, isUpdate bool) bson.D {
|
func InputToBson(i Input, isUpdate bool) bson.D {
|
||||||
|
@ -4,7 +4,6 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"cloud.o-forge.io/core/oc-lib/dbs"
|
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||||
@ -261,27 +260,35 @@ func (m *MongoDB) LoadOne(id string, collection_name string) (*mongo.SingleResul
|
|||||||
return res, 200, nil
|
return res, 200, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MongoDB) Search(search string, filter []string, collection_name string) (*mongo.Cursor, int, error) {
|
func (m *MongoDB) Search(filters dbs.Filters, collection_name string) (*mongo.Cursor, int, error) {
|
||||||
if err := m.createClient(mngoConfig.GetUrl()); err != nil {
|
if err := m.createClient(mngoConfig.GetUrl()); err != nil {
|
||||||
return nil, 503, err
|
return nil, 503, err
|
||||||
}
|
}
|
||||||
opts := options.Find()
|
opts := options.Find()
|
||||||
opts.SetLimit(100)
|
opts.SetLimit(100)
|
||||||
if strings.TrimSpace(search) == "*" {
|
|
||||||
search = ""
|
|
||||||
}
|
|
||||||
search = ".*" + strings.TrimSpace(search) + ".*"
|
|
||||||
targetDBCollection := CollectionMap[collection_name]
|
targetDBCollection := CollectionMap[collection_name]
|
||||||
list := []bson.M{}
|
andList := []bson.E{}
|
||||||
for _, k := range filter {
|
for k, filter := range filters.And {
|
||||||
list = append(list, bson.M{k: bson.M{"$regex": search, "$options": "i"}})
|
andList = append(andList, bson.E{Key: k, Value: bson.M{
|
||||||
|
dbs.StringToOperator(filter.Operator).ToMongoOperator(): dbs.ToValueOperator(dbs.StringToOperator(filter.Operator), filter.Value)}})
|
||||||
|
}
|
||||||
|
orList := []bson.M{}
|
||||||
|
for k, filter := range filters.Or {
|
||||||
|
orList = append(orList, bson.M{
|
||||||
|
k: bson.M{dbs.StringToOperator(filter.Operator).ToMongoOperator(): dbs.ToValueOperator(dbs.StringToOperator(filter.Operator), filter.Value)}})
|
||||||
}
|
}
|
||||||
MngoCtx, cancel = context.WithTimeout(context.Background(), 10*time.Second)
|
MngoCtx, cancel = context.WithTimeout(context.Background(), 10*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
f := bson.D{}
|
||||||
|
if len(andList) > 0 {
|
||||||
|
f = append(f, andList...)
|
||||||
|
}
|
||||||
|
if len(orList) > 0 {
|
||||||
|
f = append(f, bson.E{Key: "$or", Value: orList})
|
||||||
|
}
|
||||||
if cursor, err := targetDBCollection.Find(
|
if cursor, err := targetDBCollection.Find(
|
||||||
MngoCtx,
|
MngoCtx,
|
||||||
bson.M{"$or": list},
|
f,
|
||||||
opts,
|
opts,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return nil, 404, err
|
return nil, 404, err
|
||||||
@ -327,24 +334,3 @@ func (m *MongoDB) LoadAll(collection_name string) (*mongo.Cursor, int, error) {
|
|||||||
}
|
}
|
||||||
return res, 200, nil
|
return res, 200, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MongoDB) toOperator(operator string) string {
|
|
||||||
if operator == "like" {
|
|
||||||
return "$regex"
|
|
||||||
} else if operator == "exists" {
|
|
||||||
return "$exists"
|
|
||||||
} else if operator == "in" {
|
|
||||||
return "$in"
|
|
||||||
} else if operator == "gte" {
|
|
||||||
return "$gte"
|
|
||||||
} else if operator == "gt" {
|
|
||||||
return "$gt"
|
|
||||||
} else if operator == "lte" {
|
|
||||||
return "$lte"
|
|
||||||
} else if operator == "lt" {
|
|
||||||
return "$lt"
|
|
||||||
} else if operator == "eq" {
|
|
||||||
return "$match"
|
|
||||||
}
|
|
||||||
return operator
|
|
||||||
}
|
|
||||||
|
@ -3,6 +3,7 @@ package oclib
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||||
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
||||||
"cloud.o-forge.io/core/oc-lib/logs"
|
"cloud.o-forge.io/core/oc-lib/logs"
|
||||||
"cloud.o-forge.io/core/oc-lib/models"
|
"cloud.o-forge.io/core/oc-lib/models"
|
||||||
@ -19,6 +20,8 @@ import (
|
|||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type Filters = dbs.Filters
|
||||||
|
|
||||||
type LibDataEnum int
|
type LibDataEnum int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -58,7 +61,7 @@ func Init(appName string) {
|
|||||||
mongo.MONGOService.Init(models.GetModelsNames(), GetConfig())
|
mongo.MONGOService.Init(models.GetModelsNames(), GetConfig())
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
for _, model := range []string{utils.DATA_RESOURCE.String(), utils.PROCESSING_RESOURCE.String(), utils.STORAGE_RESOURCE.String(), utils.DATACENTER_RESOURCE.String(), utils.WORKFLOW_RESOURCE.String()} {
|
for _, model := range []string{utils.DATA_RESOURCE.String(), utils.PROCESSING_RESOURCE.String(), utils.STORAGE_RESOURCE.String(), utils.DATACENTER_RESOURCE.String(), utils.WORKFLOW_RESOURCE.String()} {
|
||||||
data, code, _ := accessor.Search(model)
|
data, code, _ := accessor.Search(nil, model)
|
||||||
if code == 404 || len(data) == 0 {
|
if code == 404 || len(data) == 0 {
|
||||||
m := map[string]resource_model.Model{}
|
m := map[string]resource_model.Model{}
|
||||||
if model == utils.PROCESSING_RESOURCE.String() {
|
if model == utils.PROCESSING_RESOURCE.String() {
|
||||||
@ -87,8 +90,8 @@ func GetLogger() zerolog.Logger {
|
|||||||
return logs.GetLogger()
|
return logs.GetLogger()
|
||||||
}
|
}
|
||||||
|
|
||||||
func Search(word string, collection LibDataEnum) LibDataShallow {
|
func Search(filters *dbs.Filters, word string, collection LibDataEnum) LibDataShallow {
|
||||||
d, code, err := models.Model(collection.EnumIndex()).GetAccessor().Search(word)
|
d, code, err := models.Model(collection.EnumIndex()).GetAccessor().Search(filters, word)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return LibDataShallow{Data: d, Code: code, Err: err.Error()}
|
return LibDataShallow{Data: d, Code: code, Err: err.Error()}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package resource_model
|
package resource_model
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||||
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/utils"
|
"cloud.o-forge.io/core/oc-lib/models/utils"
|
||||||
)
|
)
|
||||||
@ -53,12 +54,16 @@ func (wfa ResourceModelMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, e
|
|||||||
return objs, 200, nil
|
return objs, 200, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wfa *ResourceModelMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) {
|
func (wfa *ResourceModelMongoAccessor) Search(filters *dbs.Filters, search string) ([]utils.ShallowDBObject, int, error) {
|
||||||
objs := []utils.ShallowDBObject{}
|
objs := []utils.ShallowDBObject{}
|
||||||
if len(options) == 0 {
|
if (filters == nil || len(filters.And) == 0 || len(filters.Or) == 0) && search != "" {
|
||||||
options = []string{"resource_type"}
|
filters = &dbs.Filters{
|
||||||
|
Or: map[string]dbs.Filter{
|
||||||
|
"resource_type": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType())
|
res_mongo, code, err := mongo.MONGOService.Search(*filters, wfa.GetType())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
||||||
return nil, code, err
|
return nil, code, err
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package data
|
package data
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||||
mongo "cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
mongo "cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/resource_model"
|
"cloud.o-forge.io/core/oc-lib/models/resource_model"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/utils"
|
"cloud.o-forge.io/core/oc-lib/models/utils"
|
||||||
@ -41,7 +42,7 @@ func (dma *dataMongoAccessor) LoadOne(id string) (utils.DBObject, int, error) {
|
|||||||
}
|
}
|
||||||
res_mongo.Decode(&data)
|
res_mongo.Decode(&data)
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
resources, _, err := accessor.Search(dma.GetType())
|
resources, _, err := accessor.Search(nil, dma.GetType())
|
||||||
if err == nil && len(resources) > 0 {
|
if err == nil && len(resources) > 0 {
|
||||||
data.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
data.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
||||||
}
|
}
|
||||||
@ -60,7 +61,7 @@ func (wfa dataMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error) {
|
|||||||
return nil, 404, err
|
return nil, 404, err
|
||||||
}
|
}
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
resources, _, err := accessor.Search(wfa.GetType())
|
resources, _, err := accessor.Search(nil, wfa.GetType())
|
||||||
for _, r := range results {
|
for _, r := range results {
|
||||||
if err == nil && len(resources) > 0 {
|
if err == nil && len(resources) > 0 {
|
||||||
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
||||||
@ -70,12 +71,20 @@ func (wfa dataMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error) {
|
|||||||
return objs, 200, nil
|
return objs, 200, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wfa *dataMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) {
|
func (wfa *dataMongoAccessor) Search(filters *dbs.Filters, search string) ([]utils.ShallowDBObject, int, error) {
|
||||||
objs := []utils.ShallowDBObject{}
|
objs := []utils.ShallowDBObject{}
|
||||||
if len(options) == 0 {
|
if (filters == nil || len(filters.And) == 0 || len(filters.Or) == 0) && search != "" {
|
||||||
options = []string{"abstractresource.abstractobject.name", "abstractresource.short_description", "abstractresource.description", "abstractresource.owner", "abstractresource.source_url"}
|
filters = &dbs.Filters{
|
||||||
|
Or: map[string]dbs.Filter{
|
||||||
|
"abstractresource.abstractobject.name": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.short_description": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.description": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.owner": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.source_url": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType())
|
res_mongo, code, err := mongo.MONGOService.Search(*filters, wfa.GetType())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
||||||
return nil, code, err
|
return nil, code, err
|
||||||
@ -85,7 +94,7 @@ func (wfa *dataMongoAccessor) Search(word string, options ...string) ([]utils.Sh
|
|||||||
return nil, 404, err
|
return nil, 404, err
|
||||||
}
|
}
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
resources, _, err := accessor.Search(wfa.GetType())
|
resources, _, err := accessor.Search(nil, wfa.GetType())
|
||||||
for _, r := range results {
|
for _, r := range results {
|
||||||
if err == nil && len(resources) > 0 {
|
if err == nil && len(resources) > 0 {
|
||||||
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package datacenter
|
package datacenter
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||||
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/resource_model"
|
"cloud.o-forge.io/core/oc-lib/models/resource_model"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/utils"
|
"cloud.o-forge.io/core/oc-lib/models/utils"
|
||||||
@ -43,7 +44,7 @@ func (dca *datacenterMongoAccessor) LoadOne(id string) (utils.DBObject, int, err
|
|||||||
|
|
||||||
res_mongo.Decode(&datacenter)
|
res_mongo.Decode(&datacenter)
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
resources, _, err := accessor.Search(dca.GetType())
|
resources, _, err := accessor.Search(nil, dca.GetType())
|
||||||
if err == nil && len(resources) > 0 {
|
if err == nil && len(resources) > 0 {
|
||||||
datacenter.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
datacenter.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
||||||
}
|
}
|
||||||
@ -62,7 +63,7 @@ func (wfa datacenterMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, erro
|
|||||||
return nil, 404, err
|
return nil, 404, err
|
||||||
}
|
}
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
resources, _, err := accessor.Search(wfa.GetType())
|
resources, _, err := accessor.Search(nil, wfa.GetType())
|
||||||
for _, r := range results {
|
for _, r := range results {
|
||||||
if err == nil && len(resources) > 0 {
|
if err == nil && len(resources) > 0 {
|
||||||
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
||||||
@ -72,12 +73,20 @@ func (wfa datacenterMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, erro
|
|||||||
return objs, 200, nil
|
return objs, 200, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wfa *datacenterMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) {
|
func (wfa *datacenterMongoAccessor) Search(filters *dbs.Filters, search string) ([]utils.ShallowDBObject, int, error) {
|
||||||
objs := []utils.ShallowDBObject{}
|
objs := []utils.ShallowDBObject{}
|
||||||
if len(options) == 0 {
|
if (filters == nil || len(filters.And) == 0 || len(filters.Or) == 0) && search != "" {
|
||||||
options = []string{"abstractresource.abstractobject.name", "abstractresource.short_description", "abstractresource.description", "abstractresource.owner", "abstractresource.source_url"}
|
filters = &dbs.Filters{
|
||||||
|
Or: map[string]dbs.Filter{
|
||||||
|
"abstractresource.abstractobject.name": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.short_description": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.description": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.owner": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.source_url": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType())
|
res_mongo, code, err := mongo.MONGOService.Search(*filters, wfa.GetType())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
||||||
return nil, code, err
|
return nil, code, err
|
||||||
@ -87,7 +96,7 @@ func (wfa *datacenterMongoAccessor) Search(word string, options ...string) ([]ut
|
|||||||
return nil, 404, err
|
return nil, 404, err
|
||||||
}
|
}
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
resources, _, err := accessor.Search(wfa.GetType())
|
resources, _, err := accessor.Search(nil, wfa.GetType())
|
||||||
for _, r := range results {
|
for _, r := range results {
|
||||||
if err == nil && len(resources) > 0 {
|
if err == nil && len(resources) > 0 {
|
||||||
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package processing
|
package processing
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||||
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/resource_model"
|
"cloud.o-forge.io/core/oc-lib/models/resource_model"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/utils"
|
"cloud.o-forge.io/core/oc-lib/models/utils"
|
||||||
@ -44,7 +45,7 @@ func (pma *processingMongoAccessor) LoadOne(id string) (utils.DBObject, int, err
|
|||||||
|
|
||||||
res_mongo.Decode(&processing)
|
res_mongo.Decode(&processing)
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
resources, _, err := accessor.Search(pma.GetType())
|
resources, _, err := accessor.Search(nil, pma.GetType())
|
||||||
if err == nil && len(resources) > 0 {
|
if err == nil && len(resources) > 0 {
|
||||||
processing.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
processing.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
||||||
}
|
}
|
||||||
@ -63,7 +64,7 @@ func (wfa processingMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, erro
|
|||||||
return nil, 404, err
|
return nil, 404, err
|
||||||
}
|
}
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
resources, _, err := accessor.Search(wfa.GetType())
|
resources, _, err := accessor.Search(nil, wfa.GetType())
|
||||||
for _, r := range results {
|
for _, r := range results {
|
||||||
if err == nil && len(resources) > 0 {
|
if err == nil && len(resources) > 0 {
|
||||||
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
||||||
@ -73,12 +74,20 @@ func (wfa processingMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, erro
|
|||||||
return objs, 200, nil
|
return objs, 200, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wfa *processingMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) {
|
func (wfa *processingMongoAccessor) Search(filters *dbs.Filters, search string) ([]utils.ShallowDBObject, int, error) {
|
||||||
objs := []utils.ShallowDBObject{}
|
objs := []utils.ShallowDBObject{}
|
||||||
if len(options) == 0 {
|
if (filters == nil || len(filters.And) == 0 || len(filters.Or) == 0) && search != "" {
|
||||||
options = []string{"abstractresource.abstractobject.name", "abstractresource.short_description", "abstractresource.description", "abstractresource.owner", "abstractresource.source_url"}
|
filters = &dbs.Filters{
|
||||||
|
Or: map[string]dbs.Filter{
|
||||||
|
"abstractresource.abstractobject.name": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.short_description": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.description": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.owner": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.source_url": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType())
|
res_mongo, code, err := mongo.MONGOService.Search(*filters, wfa.GetType())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
||||||
return nil, code, err
|
return nil, code, err
|
||||||
@ -88,7 +97,7 @@ func (wfa *processingMongoAccessor) Search(word string, options ...string) ([]ut
|
|||||||
return nil, 404, err
|
return nil, 404, err
|
||||||
}
|
}
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
resources, _, err := accessor.Search(wfa.GetType())
|
resources, _, err := accessor.Search(nil, wfa.GetType())
|
||||||
for _, r := range results {
|
for _, r := range results {
|
||||||
if err == nil && len(resources) > 0 {
|
if err == nil && len(resources) > 0 {
|
||||||
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package storage
|
package storage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||||
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/resource_model"
|
"cloud.o-forge.io/core/oc-lib/models/resource_model"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/utils"
|
"cloud.o-forge.io/core/oc-lib/models/utils"
|
||||||
@ -44,7 +45,7 @@ func (sma *storageMongoAccessor) LoadOne(id string) (utils.DBObject, int, error)
|
|||||||
|
|
||||||
res_mongo.Decode(&storage)
|
res_mongo.Decode(&storage)
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
resources, _, err := accessor.Search(sma.GetType())
|
resources, _, err := accessor.Search(nil, sma.GetType())
|
||||||
if err == nil && len(resources) > 0 {
|
if err == nil && len(resources) > 0 {
|
||||||
storage.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
storage.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
||||||
}
|
}
|
||||||
@ -63,7 +64,7 @@ func (wfa storageMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error)
|
|||||||
return nil, 404, err
|
return nil, 404, err
|
||||||
}
|
}
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
resources, _, err := accessor.Search(wfa.GetType())
|
resources, _, err := accessor.Search(nil, wfa.GetType())
|
||||||
for _, r := range results {
|
for _, r := range results {
|
||||||
if err == nil && len(resources) > 0 {
|
if err == nil && len(resources) > 0 {
|
||||||
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
||||||
@ -73,12 +74,20 @@ func (wfa storageMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error)
|
|||||||
return objs, 200, nil
|
return objs, 200, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wfa *storageMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) {
|
func (wfa *storageMongoAccessor) Search(filters *dbs.Filters, search string) ([]utils.ShallowDBObject, int, error) {
|
||||||
objs := []utils.ShallowDBObject{}
|
objs := []utils.ShallowDBObject{}
|
||||||
if len(options) == 0 {
|
if (len(filters.And) == 0 || len(filters.Or) == 0) && search != "" {
|
||||||
options = []string{"abstractresource.abstractobject.name", "abstractresource.short_description", "abstractresource.description", "abstractresource.owner", "abstractresource.source_url"}
|
filters = &dbs.Filters{
|
||||||
|
Or: map[string]dbs.Filter{
|
||||||
|
"abstractresource.abstractobject.name": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.short_description": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.description": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.owner": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.source_url": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType())
|
res_mongo, code, err := mongo.MONGOService.Search(*filters, wfa.GetType())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
||||||
return nil, code, err
|
return nil, code, err
|
||||||
@ -88,7 +97,7 @@ func (wfa *storageMongoAccessor) Search(word string, options ...string) ([]utils
|
|||||||
return nil, 404, err
|
return nil, 404, err
|
||||||
}
|
}
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
resources, _, err := accessor.Search(wfa.GetType())
|
resources, _, err := accessor.Search(nil, wfa.GetType())
|
||||||
for _, r := range results {
|
for _, r := range results {
|
||||||
if err == nil && len(resources) > 0 {
|
if err == nil && len(resources) > 0 {
|
||||||
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package oclib
|
package oclib
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||||
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/resource_model"
|
"cloud.o-forge.io/core/oc-lib/models/resource_model"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/utils"
|
"cloud.o-forge.io/core/oc-lib/models/utils"
|
||||||
@ -48,7 +49,7 @@ func (wfa *workflowResourceMongoAccessor) LoadOne(id string) (utils.DBObject, in
|
|||||||
}
|
}
|
||||||
res_mongo.Decode(&workflow)
|
res_mongo.Decode(&workflow)
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
resources, _, err := accessor.Search(wfa.GetType())
|
resources, _, err := accessor.Search(nil, wfa.GetType())
|
||||||
if err == nil && len(resources) > 0 {
|
if err == nil && len(resources) > 0 {
|
||||||
workflow.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
workflow.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
||||||
}
|
}
|
||||||
@ -67,7 +68,7 @@ func (wfa workflowResourceMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int
|
|||||||
return nil, 404, err
|
return nil, 404, err
|
||||||
}
|
}
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
resources, _, err := accessor.Search(wfa.GetType())
|
resources, _, err := accessor.Search(nil, wfa.GetType())
|
||||||
for _, r := range results {
|
for _, r := range results {
|
||||||
if err == nil && len(resources) > 0 {
|
if err == nil && len(resources) > 0 {
|
||||||
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
||||||
@ -77,12 +78,20 @@ func (wfa workflowResourceMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int
|
|||||||
return objs, 200, nil
|
return objs, 200, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wfa *workflowResourceMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) {
|
func (wfa *workflowResourceMongoAccessor) Search(filters *dbs.Filters, search string) ([]utils.ShallowDBObject, int, error) {
|
||||||
objs := []utils.ShallowDBObject{}
|
objs := []utils.ShallowDBObject{}
|
||||||
if len(options) == 0 {
|
if (filters == nil || len(filters.And) == 0 || len(filters.Or) == 0) && search != "" {
|
||||||
options = []string{"abstractresource.abstractobject.name", "abstractresource.short_description", "abstractresource.description", "abstractresource.owner", "abstractresource.source_url"}
|
filters = &dbs.Filters{
|
||||||
|
Or: map[string]dbs.Filter{
|
||||||
|
"abstractresource.abstractobject.name": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.short_description": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.description": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.owner": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
"abstractresource.source_url": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType())
|
res_mongo, code, err := mongo.MONGOService.Search(*filters, wfa.GetType())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
||||||
return nil, code, err
|
return nil, code, err
|
||||||
@ -92,7 +101,7 @@ func (wfa *workflowResourceMongoAccessor) Search(word string, options ...string)
|
|||||||
return nil, 404, err
|
return nil, 404, err
|
||||||
}
|
}
|
||||||
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
accessor := (&resource_model.ResourceModel{}).GetAccessor()
|
||||||
resources, _, err := accessor.Search(wfa.GetType())
|
resources, _, err := accessor.Search(nil, wfa.GetType())
|
||||||
for _, r := range results {
|
for _, r := range results {
|
||||||
if err == nil && len(resources) > 0 {
|
if err == nil && len(resources) > 0 {
|
||||||
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
r.ResourceModel = resources[0].(*resource_model.ResourceModel)
|
||||||
|
@ -3,6 +3,7 @@ package utils
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
|
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||||
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
||||||
"cloud.o-forge.io/core/oc-lib/logs"
|
"cloud.o-forge.io/core/oc-lib/logs"
|
||||||
"github.com/go-playground/validator/v10"
|
"github.com/go-playground/validator/v10"
|
||||||
@ -45,7 +46,19 @@ func (dma *AbstractAccessor) SetLogger(t DataType) {
|
|||||||
|
|
||||||
func (wfa *AbstractAccessor) GenericStoreOne(data DBObject, accessor Accessor) (DBObject, int, error) {
|
func (wfa *AbstractAccessor) GenericStoreOne(data DBObject, accessor Accessor) (DBObject, int, error) {
|
||||||
data.GenerateID()
|
data.GenerateID()
|
||||||
if cursor, _, _ := accessor.Search(data.GetName(), "abstractresource.abstractobject.name", "abstractobject.name"); len(cursor) > 0 {
|
f := dbs.Filters{
|
||||||
|
Or: map[string]dbs.Filter{
|
||||||
|
"abstractresource.abstractobject.name": {
|
||||||
|
Operator: dbs.LIKE.String(),
|
||||||
|
Value: data.GetName(),
|
||||||
|
},
|
||||||
|
"abstractobject.name": {
|
||||||
|
Operator: dbs.LIKE.String(),
|
||||||
|
Value: data.GetName(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
if cursor, _, _ := accessor.Search(&f, ""); len(cursor) > 0 {
|
||||||
return nil, 409, errors.New(accessor.GetType() + " with name " + data.GetName() + " already exists")
|
return nil, 409, errors.New(accessor.GetType() + " with name " + data.GetName() + " already exists")
|
||||||
}
|
}
|
||||||
err := validate.Struct(data)
|
err := validate.Struct(data)
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package utils
|
package utils
|
||||||
|
|
||||||
|
import "cloud.o-forge.io/core/oc-lib/dbs"
|
||||||
|
|
||||||
type ShallowDBObject interface {
|
type ShallowDBObject interface {
|
||||||
GenerateID()
|
GenerateID()
|
||||||
GetID() string
|
GetID() string
|
||||||
@ -18,7 +20,7 @@ type DBObject interface {
|
|||||||
type Accessor interface {
|
type Accessor interface {
|
||||||
SetLogger(t DataType)
|
SetLogger(t DataType)
|
||||||
GetType() string
|
GetType() string
|
||||||
Search(word string, options ...string) ([]ShallowDBObject, int, error)
|
Search(filters *dbs.Filters, search string) ([]ShallowDBObject, int, error)
|
||||||
LoadAll() ([]ShallowDBObject, int, error)
|
LoadAll() ([]ShallowDBObject, int, error)
|
||||||
LoadOne(id string) (DBObject, int, error)
|
LoadOne(id string) (DBObject, int, error)
|
||||||
DeleteOne(id string) (DBObject, int, error)
|
DeleteOne(id string) (DBObject, int, error)
|
||||||
|
@ -4,6 +4,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||||
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/resources"
|
"cloud.o-forge.io/core/oc-lib/models/resources"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/utils"
|
"cloud.o-forge.io/core/oc-lib/models/utils"
|
||||||
@ -100,7 +101,12 @@ func (wfa *workflowMongoAccessor) CopyOne(data utils.DBObject) (utils.DBObject,
|
|||||||
|
|
||||||
func (wfa *workflowMongoAccessor) execute(workflow *Workflow) {
|
func (wfa *workflowMongoAccessor) execute(workflow *Workflow) {
|
||||||
accessor := (&workspace.Workspace{}).GetAccessor()
|
accessor := (&workspace.Workspace{}).GetAccessor()
|
||||||
resource, _, err := accessor.Search(workflow.Name+"_workspace", "abstractobject.name")
|
filters := &dbs.Filters{
|
||||||
|
Or: map[string]dbs.Filter{
|
||||||
|
"abstractobject.name": {Operator: dbs.LIKE.String(), Value: workflow.Name + "_workspace"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
resource, _, err := accessor.Search(filters, "")
|
||||||
if err == nil && len(resource) == 1 {
|
if err == nil && len(resource) == 1 {
|
||||||
accessor.UpdateOne(&workspace.Workspace{
|
accessor.UpdateOne(&workspace.Workspace{
|
||||||
Active: true,
|
Active: true,
|
||||||
@ -156,12 +162,16 @@ func (wfa workflowMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error)
|
|||||||
return objs, 200, nil
|
return objs, 200, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wfa *workflowMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) {
|
func (wfa *workflowMongoAccessor) Search(filters *dbs.Filters, search string) ([]utils.ShallowDBObject, int, error) {
|
||||||
objs := []utils.ShallowDBObject{}
|
objs := []utils.ShallowDBObject{}
|
||||||
if len(options) == 0 {
|
if (filters == nil || len(filters.And) == 0 || len(filters.Or) == 0) && search != "" {
|
||||||
options = []string{"abstractobject.name"}
|
filters = &dbs.Filters{
|
||||||
|
Or: map[string]dbs.Filter{
|
||||||
|
"abstractobject.name": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType())
|
res_mongo, code, err := mongo.MONGOService.Search(*filters, wfa.GetType())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
||||||
return nil, code, err
|
return nil, code, err
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package workflow_execution
|
package workflow_execution
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||||
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/utils"
|
"cloud.o-forge.io/core/oc-lib/models/utils"
|
||||||
)
|
)
|
||||||
@ -57,12 +58,9 @@ func (wfa workflowExecutionMongoAccessor) LoadAll() ([]utils.ShallowDBObject, in
|
|||||||
return objs, 200, nil
|
return objs, 200, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wfa *workflowExecutionMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) {
|
func (wfa *workflowExecutionMongoAccessor) Search(filters *dbs.Filters, search string) ([]utils.ShallowDBObject, int, error) {
|
||||||
objs := []utils.ShallowDBObject{}
|
objs := []utils.ShallowDBObject{}
|
||||||
if len(options) == 0 {
|
res_mongo, code, err := mongo.MONGOService.Search(dbs.Filters{}, wfa.GetType())
|
||||||
options = []string{}
|
|
||||||
}
|
|
||||||
res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType())
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
||||||
return nil, code, err
|
return nil, code, err
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package workspace
|
package workspace
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"cloud.o-forge.io/core/oc-lib/dbs"
|
||||||
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
"cloud.o-forge.io/core/oc-lib/dbs/mongo"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/resources/data"
|
"cloud.o-forge.io/core/oc-lib/models/resources/data"
|
||||||
"cloud.o-forge.io/core/oc-lib/models/resources/datacenter"
|
"cloud.o-forge.io/core/oc-lib/models/resources/datacenter"
|
||||||
@ -135,12 +136,16 @@ func (wfa workspaceMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error
|
|||||||
return objs, 200, nil
|
return objs, 200, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wfa *workspaceMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) {
|
func (wfa *workspaceMongoAccessor) Search(filters *dbs.Filters, search string) ([]utils.ShallowDBObject, int, error) {
|
||||||
objs := []utils.ShallowDBObject{}
|
objs := []utils.ShallowDBObject{}
|
||||||
if len(options) == 0 {
|
if (filters == nil || len(filters.And) == 0 || len(filters.Or) == 0) && search != "" {
|
||||||
options = []string{"abstractobject.name"}
|
filters = &dbs.Filters{
|
||||||
|
Or: map[string]dbs.Filter{
|
||||||
|
"abstractobject.name": {Operator: dbs.LIKE.String(), Value: search},
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType())
|
res_mongo, code, err := mongo.MONGOService.Search(*filters, wfa.GetType())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error())
|
||||||
return nil, code, err
|
return nil, code, err
|
||||||
|
Loading…
Reference in New Issue
Block a user