diff --git a/models/resource_model/resource_model_mongo_accessor.go b/models/resource_model/resource_model_mongo_accessor.go index 6edf988..73e5704 100644 --- a/models/resource_model/resource_model_mongo_accessor.go +++ b/models/resource_model/resource_model_mongo_accessor.go @@ -53,9 +53,12 @@ func (wfa ResourceModelMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, e return objs, 200, nil } -func (wfa *ResourceModelMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { +func (wfa *ResourceModelMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) { objs := []utils.ShallowDBObject{} - res_mongo, code, err := mongo.MONGOService.Search(word, []string{"resource_type"}, wfa.GetType()) + if len(options) == 0 { + options = []string{"resource_type"} + } + res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType()) if err != nil { wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) return nil, code, err diff --git a/models/resources/data/data_mongo_accessor.go b/models/resources/data/data_mongo_accessor.go index b93e15c..79faf36 100644 --- a/models/resources/data/data_mongo_accessor.go +++ b/models/resources/data/data_mongo_accessor.go @@ -70,10 +70,12 @@ func (wfa dataMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error) { return objs, 200, nil } -func (wfa *dataMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { +func (wfa *dataMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) { objs := []utils.ShallowDBObject{} - res_mongo, code, err := mongo.MONGOService.Search(word, []string{"abstractresource.abstractobject.name", "abstractresource.short_description", "abstractresource.description", "abstractresource.owner", "abstractresource.source_url"}, - wfa.GetType()) + if len(options) == 0 { + options = []string{"abstractresource.abstractobject.name", "abstractresource.short_description", "abstractresource.description", "abstractresource.owner", "abstractresource.source_url"} + } + res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType()) if err != nil { wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) return nil, code, err diff --git a/models/resources/datacenter/datacenter_mongo_accessor.go b/models/resources/datacenter/datacenter_mongo_accessor.go index fdfeea5..cb4b2be 100644 --- a/models/resources/datacenter/datacenter_mongo_accessor.go +++ b/models/resources/datacenter/datacenter_mongo_accessor.go @@ -72,9 +72,12 @@ func (wfa datacenterMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, erro return objs, 200, nil } -func (wfa *datacenterMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { +func (wfa *datacenterMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) { objs := []utils.ShallowDBObject{} - res_mongo, code, err := mongo.MONGOService.Search(word, []string{"abstractresource.abstractobject.name", "abstractresource.short_description", "abstractresource.description", "abstractresource.owner", "abstractresource.source_url"}, wfa.GetType()) + if len(options) == 0 { + options = []string{"abstractresource.abstractobject.name", "abstractresource.short_description", "abstractresource.description", "abstractresource.owner", "abstractresource.source_url"} + } + res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType()) if err != nil { wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) return nil, code, err diff --git a/models/resources/processing/processing_mongo_accessor.go b/models/resources/processing/processing_mongo_accessor.go index 0f4bcb2..009ad14 100644 --- a/models/resources/processing/processing_mongo_accessor.go +++ b/models/resources/processing/processing_mongo_accessor.go @@ -73,9 +73,12 @@ func (wfa processingMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, erro return objs, 200, nil } -func (wfa *processingMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { +func (wfa *processingMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) { objs := []utils.ShallowDBObject{} - res_mongo, code, err := mongo.MONGOService.Search(word, []string{"abstractresource.abstractobject.name", "abstractresource.short_description", "abstractresource.description", "abstractresource.owner", "abstractresource.source_url"}, wfa.GetType()) + if len(options) == 0 { + options = []string{"abstractresource.abstractobject.name", "abstractresource.short_description", "abstractresource.description", "abstractresource.owner", "abstractresource.source_url"} + } + res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType()) if err != nil { wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) return nil, code, err diff --git a/models/resources/storage/storage_mongo_accessor.go b/models/resources/storage/storage_mongo_accessor.go index 329b880..7ee2d39 100644 --- a/models/resources/storage/storage_mongo_accessor.go +++ b/models/resources/storage/storage_mongo_accessor.go @@ -73,9 +73,12 @@ func (wfa storageMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error) return objs, 200, nil } -func (wfa *storageMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { +func (wfa *storageMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) { objs := []utils.ShallowDBObject{} - res_mongo, code, err := mongo.MONGOService.Search(word, []string{"abstractresource.abstractobject.name", "abstractresource.short_description", "abstractresource.description", "abstractresource.owner", "abstractresource.source_url"}, wfa.GetType()) + if len(options) == 0 { + options = []string{"abstractresource.abstractobject.name", "abstractresource.short_description", "abstractresource.description", "abstractresource.owner", "abstractresource.source_url"} + } + res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType()) if err != nil { wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) return nil, code, err diff --git a/models/resources/workflow/workflow_mongo_accessor.go b/models/resources/workflow/workflow_mongo_accessor.go index 2dcd342..43c8068 100644 --- a/models/resources/workflow/workflow_mongo_accessor.go +++ b/models/resources/workflow/workflow_mongo_accessor.go @@ -77,9 +77,12 @@ func (wfa workflowResourceMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int return objs, 200, nil } -func (wfa *workflowResourceMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { +func (wfa *workflowResourceMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) { objs := []utils.ShallowDBObject{} - res_mongo, code, err := mongo.MONGOService.Search(word, []string{"abstractresource.abstractobject.name", "abstractresource.short_description", "abstractresource.description", "abstractresource.owner", "abstractresource.source_url"}, wfa.GetType()) + if len(options) == 0 { + options = []string{"abstractresource.abstractobject.name", "abstractresource.short_description", "abstractresource.description", "abstractresource.owner", "abstractresource.source_url"} + } + res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType()) if err != nil { wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) return nil, code, err diff --git a/models/utils/abstracts.go b/models/utils/abstracts.go index 8bf633a..4d17af5 100644 --- a/models/utils/abstracts.go +++ b/models/utils/abstracts.go @@ -1,7 +1,7 @@ package utils import ( - "fmt" + "errors" "cloud.o-forge.io/core/oc-lib/dbs/mongo" "cloud.o-forge.io/core/oc-lib/logs" @@ -45,7 +45,9 @@ func (dma *AbstractAccessor) SetLogger(t DataType) { func (wfa *AbstractAccessor) GenericStoreOne(data DBObject, accessor Accessor) (DBObject, int, error) { data.GenerateID() - fmt.Println(data.Serialize()) + if cursor, _, _ := accessor.Search(data.GetName(), "abstractresource.abstractobject.name", "abstractobject.name"); len(cursor) > 0 { + return nil, 409, errors.New(accessor.GetType() + " with name " + data.GetName() + " already exists") + } err := validate.Struct(data) if err != nil { return nil, 422, err @@ -90,13 +92,3 @@ func (dma *AbstractAccessor) GenericUpdateOne(set DBObject, id string, accessor } return accessor.LoadOne(id) } - -/* -type ResourceProxy struct { - Host string `json:"host,omitempty" bson:"host,omitempty"` - Port int `json:"port,omitempty" bson:"port,omitempty"` - Command string `json:"command,omitempty" bson:"command,omitempty"` - Args []string `json:"args,omitempty" bson:"args,omitempty"` - EnvArgs map[string]interface{} `json:"env_args,omitempty" bson:"env_args,omitempty"` -} -*/ diff --git a/models/workflow/workflow_mongo_accessor.go b/models/workflow/workflow_mongo_accessor.go index 83ad68a..0c0c733 100644 --- a/models/workflow/workflow_mongo_accessor.go +++ b/models/workflow/workflow_mongo_accessor.go @@ -159,9 +159,12 @@ func (wfa workflowMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error) return objs, 200, nil } -func (wfa *workflowMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { +func (wfa *workflowMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) { objs := []utils.ShallowDBObject{} - res_mongo, code, err := mongo.MONGOService.Search(word, []string{"abstractobject.name"}, wfa.GetType()) + if len(options) == 0 { + options = []string{"abstractobject.name"} + } + res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType()) if err != nil { wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) return nil, code, err diff --git a/models/workflow_execution/workflow_execution_mongo_accessor.go b/models/workflow_execution/workflow_execution_mongo_accessor.go index da5f0ff..5f01358 100644 --- a/models/workflow_execution/workflow_execution_mongo_accessor.go +++ b/models/workflow_execution/workflow_execution_mongo_accessor.go @@ -57,9 +57,12 @@ func (wfa workflowExecutionMongoAccessor) LoadAll() ([]utils.ShallowDBObject, in return objs, 200, nil } -func (wfa *workflowExecutionMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { +func (wfa *workflowExecutionMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) { objs := []utils.ShallowDBObject{} - res_mongo, code, err := mongo.MONGOService.Search(word, []string{}, wfa.GetType()) + if len(options) == 0 { + options = []string{} + } + res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType()) if err != nil { wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) return nil, code, err diff --git a/models/workspace/workspace_mongo_accessor.go b/models/workspace/workspace_mongo_accessor.go index dfb8223..667f10a 100644 --- a/models/workspace/workspace_mongo_accessor.go +++ b/models/workspace/workspace_mongo_accessor.go @@ -1,8 +1,6 @@ package workspace import ( - "errors" - "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/datacenter" @@ -52,9 +50,6 @@ func (wfa *workspaceMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject d.StorageResources = nil d.ProcessingResources = nil d.WorkflowResources = nil - if res, _, _ := wfa.Search(d.Name); len(res) > 0 { - return nil, 409, errors.New("Workspace with name " + d.Name + " already exists") - } return wfa.GenericStoreOne(d, wfa) } @@ -140,9 +135,12 @@ func (wfa workspaceMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error return objs, 200, nil } -func (wfa *workspaceMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { +func (wfa *workspaceMongoAccessor) Search(word string, options ...string) ([]utils.ShallowDBObject, int, error) { objs := []utils.ShallowDBObject{} - res_mongo, code, err := mongo.MONGOService.Search(word, []string{"abstractobject.name"}, wfa.GetType()) + if len(options) == 0 { + options = []string{"abstractobject.name"} + } + res_mongo, code, err := mongo.MONGOService.Search(word, options, wfa.GetType()) if err != nil { wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) return nil, code, err