From 8c97fca96c85ee903bfe5a71d11c3994f93bc257 Mon Sep 17 00:00:00 2001 From: mr Date: Fri, 26 Jul 2024 13:45:10 +0200 Subject: [PATCH] adding search func --- dbs/mongo/mongo.go | 24 +++++++++++++++++++ entrypoint.go | 8 +++++++ models/resources/data/data_mongo_accessor.go | 17 +++++++++++++ .../datacenter/datacenter_mongo_accessor.go | 17 +++++++++++++ .../processing/processing_mongo_accessor.go | 17 +++++++++++++ .../storage/storage_mongo_accessor.go | 17 +++++++++++++ .../workflow/workflow_mongo_accessor.go | 17 +++++++++++++ models/utils/interfaces.go | 1 + models/workflow/workflow_mongo_accessor.go | 17 +++++++++++++ models/workflow/workflow_schedule.go | 2 +- .../workflow_execution_mongo_accessor.go | 17 +++++++++++++ models/workspace/workspace_mongo_accessor.go | 17 +++++++++++++ 12 files changed, 170 insertions(+), 1 deletion(-) diff --git a/dbs/mongo/mongo.go b/dbs/mongo/mongo.go index 404859d..e0eb533 100644 --- a/dbs/mongo/mongo.go +++ b/dbs/mongo/mongo.go @@ -3,6 +3,7 @@ package mongo import ( "context" "errors" + "strings" "time" "cloud.o-forge.io/core/oc-lib/dbs" @@ -234,6 +235,29 @@ func (m *MongoDB) LoadOne(id string, collection_name string) (*mongo.SingleResul return res, 200, nil } +func (m *MongoDB) Search(search string, filter []string, collection_name string) (*mongo.Cursor, int, error) { + opts := options.Find() + opts.SetLimit(100) + if strings.TrimSpace(search) == "*" { + search = "" + } else { + search = `(?i).*` + search + `.*` + } + targetDBCollection := CollectionMap[collection_name] + list := []bson.M{} + for _, k := range filter { + list = append(list, bson.M{k: bson.M{"$regex": search}}) + } + if cursor, err := targetDBCollection.Find( + MngoCtx, bson.M{"$or": list}, + opts, + ); err != nil { + return nil, 404, err + } else { + return cursor, 200, nil + } +} + func (m *MongoDB) LoadFilter(filter map[string]interface{}, collection_name string) (*mongo.Cursor, int, error) { f := bson.D{} for k, v := range filter { diff --git a/entrypoint.go b/entrypoint.go index b1ea658..fbbca6f 100644 --- a/entrypoint.go +++ b/entrypoint.go @@ -47,6 +47,14 @@ func GetLogger() zerolog.Logger { return logs.GetLogger() } +func Search(word string, collection LibDataEnum) LibDataShallow { + d, code, err := models.Model(collection.EnumIndex()).GetAccessor().Search(word) + if err != nil { + return LibDataShallow{Data: d, Code: code, Err: err.Error()} + } + return LibDataShallow{Data: d, Code: code} +} + func LoadAll(collection LibDataEnum) LibDataShallow { d, code, err := models.Model(collection.EnumIndex()).GetAccessor().LoadAll() if err != nil { diff --git a/models/resources/data/data_mongo_accessor.go b/models/resources/data/data_mongo_accessor.go index 6b8d65c..a002206 100644 --- a/models/resources/data/data_mongo_accessor.go +++ b/models/resources/data/data_mongo_accessor.go @@ -53,3 +53,20 @@ func (wfa DataMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error) { } return objs, 200, nil } + +func (wfa *DataMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { + objs := []utils.ShallowDBObject{} + res_mongo, code, err := mongo.MONGOService.Search(word, []string{"name", "short_description", "description", "owner", "source_url"}, wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) + return nil, code, err + } + var results []DataResource + if err = res_mongo.All(mongo.MngoCtx, &results); err != nil { + return nil, 404, err + } + for _, r := range results { + objs = append(objs, &r.AbstractResource) + } + return objs, 200, nil +} diff --git a/models/resources/datacenter/datacenter_mongo_accessor.go b/models/resources/datacenter/datacenter_mongo_accessor.go index a408955..51d6582 100644 --- a/models/resources/datacenter/datacenter_mongo_accessor.go +++ b/models/resources/datacenter/datacenter_mongo_accessor.go @@ -55,3 +55,20 @@ func (wfa DatacenterMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, erro } return objs, 200, nil } + +func (wfa *DatacenterMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { + objs := []utils.ShallowDBObject{} + res_mongo, code, err := mongo.MONGOService.Search(word, []string{"name", "short_description", "description", "owner", "source_url"}, wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) + return nil, code, err + } + var results []DatacenterResource + if err = res_mongo.All(mongo.MngoCtx, &results); err != nil { + return nil, 404, err + } + for _, r := range results { + objs = append(objs, &r.AbstractResource) + } + return objs, 200, nil +} diff --git a/models/resources/processing/processing_mongo_accessor.go b/models/resources/processing/processing_mongo_accessor.go index 7ab114c..d4b5de5 100644 --- a/models/resources/processing/processing_mongo_accessor.go +++ b/models/resources/processing/processing_mongo_accessor.go @@ -56,3 +56,20 @@ func (wfa ProcessingMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, erro } return objs, 200, nil } + +func (wfa *ProcessingMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { + objs := []utils.ShallowDBObject{} + res_mongo, code, err := mongo.MONGOService.Search(word, []string{"name", "short_description", "description", "owner", "source_url"}, wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) + return nil, code, err + } + var results []ProcessingResource + if err = res_mongo.All(mongo.MngoCtx, &results); err != nil { + return nil, 404, err + } + for _, r := range results { + objs = append(objs, &r.AbstractResource) + } + return objs, 200, nil +} diff --git a/models/resources/storage/storage_mongo_accessor.go b/models/resources/storage/storage_mongo_accessor.go index 05adf28..f80c8f1 100644 --- a/models/resources/storage/storage_mongo_accessor.go +++ b/models/resources/storage/storage_mongo_accessor.go @@ -56,3 +56,20 @@ func (wfa StorageMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error) } return objs, 200, nil } + +func (wfa *StorageMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { + objs := []utils.ShallowDBObject{} + res_mongo, code, err := mongo.MONGOService.Search(word, []string{"name", "short_description", "description", "owner", "source_url"}, wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) + return nil, code, err + } + var results []StorageResource + if err = res_mongo.All(mongo.MngoCtx, &results); err != nil { + return nil, 404, err + } + for _, r := range results { + objs = append(objs, &r.AbstractResource) + } + return objs, 200, nil +} diff --git a/models/resources/workflow/workflow_mongo_accessor.go b/models/resources/workflow/workflow_mongo_accessor.go index 8eb43a5..a3a876c 100644 --- a/models/resources/workflow/workflow_mongo_accessor.go +++ b/models/resources/workflow/workflow_mongo_accessor.go @@ -59,3 +59,20 @@ func (wfa WorkflowResourceMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int } return objs, 200, nil } + +func (wfa *WorkflowResourceMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { + objs := []utils.ShallowDBObject{} + res_mongo, code, err := mongo.MONGOService.Search(word, []string{"name", "short_description", "description", "owner", "source_url"}, wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) + return nil, code, err + } + var results []WorkflowResource + if err = res_mongo.All(mongo.MngoCtx, &results); err != nil { + return nil, 404, err + } + for _, r := range results { + objs = append(objs, &r.AbstractResource) + } + return objs, 200, nil +} diff --git a/models/utils/interfaces.go b/models/utils/interfaces.go index 4824ba2..a2faabe 100644 --- a/models/utils/interfaces.go +++ b/models/utils/interfaces.go @@ -18,6 +18,7 @@ type DBObject interface { type Accessor interface { SetLogger(t DataType) GetType() string + Search(word string) ([]ShallowDBObject, int, error) LoadAll() ([]ShallowDBObject, int, error) LoadOne(id string) (DBObject, int, error) DeleteOne(id string) (DBObject, int, error) diff --git a/models/workflow/workflow_mongo_accessor.go b/models/workflow/workflow_mongo_accessor.go index f1da0f9..4f3209f 100644 --- a/models/workflow/workflow_mongo_accessor.go +++ b/models/workflow/workflow_mongo_accessor.go @@ -149,3 +149,20 @@ func (wfa WorkflowMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error) } return objs, 200, nil } + +func (wfa *WorkflowMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { + objs := []utils.ShallowDBObject{} + res_mongo, code, err := mongo.MONGOService.Search(word, []string{"name"}, wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) + return nil, code, err + } + var results []Workflow + if err = res_mongo.All(mongo.MngoCtx, &results); err != nil { + return nil, 404, err + } + for _, r := range results { + objs = append(objs, &r) + } + return objs, 200, nil +} diff --git a/models/workflow/workflow_schedule.go b/models/workflow/workflow_schedule.go index 83e88c4..97e126a 100644 --- a/models/workflow/workflow_schedule.go +++ b/models/workflow/workflow_schedule.go @@ -4,7 +4,7 @@ import "time" type WorkflowSchedule struct { Id string `json:"id"` - Start time.Time `json:"start" bson:"start validate:"required""` + Start time.Time `json:"start" bson:"start" validate:"required"` End time.Time `json:"end,omitempty" bson:"end,omitempty"` Cron string `json:"cron,omitempty" bson:"cron,omitempty"` } diff --git a/models/workflow_execution/workflow_execution_mongo_accessor.go b/models/workflow_execution/workflow_execution_mongo_accessor.go index b74e819..4596602 100644 --- a/models/workflow_execution/workflow_execution_mongo_accessor.go +++ b/models/workflow_execution/workflow_execution_mongo_accessor.go @@ -52,3 +52,20 @@ func (wfa WorkflowExecutionMongoAccessor) LoadAll() ([]utils.ShallowDBObject, in } return objs, 200, nil } + +func (wfa *WorkflowExecutionMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { + objs := []utils.ShallowDBObject{} + res_mongo, code, err := mongo.MONGOService.Search(word, []string{}, wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) + return nil, code, err + } + var results []WorkflowExecution + if err = res_mongo.All(mongo.MngoCtx, &results); err != nil { + return nil, 404, err + } + for _, r := range results { + objs = append(objs, &r) + } + return objs, 200, nil +} diff --git a/models/workspace/workspace_mongo_accessor.go b/models/workspace/workspace_mongo_accessor.go index 1391b63..abcc1dd 100644 --- a/models/workspace/workspace_mongo_accessor.go +++ b/models/workspace/workspace_mongo_accessor.go @@ -119,3 +119,20 @@ func (wfa WorkspaceMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error } return objs, 200, nil } + +func (wfa *WorkspaceMongoAccessor) Search(word string) ([]utils.ShallowDBObject, int, error) { + objs := []utils.ShallowDBObject{} + res_mongo, code, err := mongo.MONGOService.Search(word, []string{"name"}, wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not store to db. Error: " + err.Error()) + return nil, code, err + } + var results []Workspace + if err = res_mongo.All(mongo.MngoCtx, &results); err != nil { + return nil, 404, err + } + for _, r := range results { + objs = append(objs, &r) + } + return objs, 200, nil +}