diff --git a/dbs/mongo/mongo.go b/dbs/mongo/mongo.go index cd18b9a..ae6f7be 100644 --- a/dbs/mongo/mongo.go +++ b/dbs/mongo/mongo.go @@ -197,3 +197,17 @@ func (m *MongoDB) LoadOne(id string, collection_name string) (*mongo.SingleResul } return res, 200, nil } + +func (m *MongoDB) LoadAll(collection_name string) (*mongo.Cursor, int, error) { + targetDBCollection := CollectionMap[collection_name] + + MngoCtx, cancel = context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + res, err := targetDBCollection.Find(MngoCtx, bson.D{}) + if err != nil { + m.Logger.Error().Msg("Couldn't find any resources. Error : " + err.Error()) + return nil, 404, err + } + return res, 200, nil +} diff --git a/entrypoint.go b/entrypoint.go index 3276dec..658bbc0 100644 --- a/entrypoint.go +++ b/entrypoint.go @@ -24,6 +24,12 @@ func (d LibDataEnum) EnumIndex() int { return int(d) } +type LibDataShallow struct { + Data []utils.ShallowDBObject `bson:"data" json:"data"` + Code int `bson:"code" json:"code"` + Err string `bson:"error" json:"error"` +} + type LibData struct { Data utils.DBObject `bson:"data" json:"data"` Code int `bson:"code" json:"code"` @@ -40,6 +46,14 @@ func GetLogger() zerolog.Logger { return logs.GetLogger() } +func LoadAll(collection LibDataEnum) LibDataShallow { + d, code, err := models.Model(collection.EnumIndex()).GetAccessor().LoadAll() + if err != nil { + return LibDataShallow{Data: d, Code: code, Err: err.Error()} + } + return LibDataShallow{Data: d, Code: code} +} + func LoadOne(collection LibDataEnum, id string) LibData { d, code, err := models.Model(collection.EnumIndex()).GetAccessor().LoadOne(id) if err != nil { diff --git a/models/resources/data/data_mongo_accessor.go b/models/resources/data/data_mongo_accessor.go index 7a03269..58e1c3d 100644 --- a/models/resources/data/data_mongo_accessor.go +++ b/models/resources/data/data_mongo_accessor.go @@ -2,6 +2,7 @@ package data import ( 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/utils" ) @@ -36,3 +37,18 @@ func (dma *DataMongoAccessor) LoadOne(id string) (utils.DBObject, int, error) { return &data, 200, nil } + +func (wfa DataMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error) { + objs := []utils.ShallowDBObject{} + res_mongo, code, err := mongo.MONGOService.LoadAll(wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not retrieve any from db. Error: " + err.Error()) + return nil, code, err + } + for res_mongo.Next(mongo.MngoCtx) { + var obj resources.AbstractResource + res_mongo.Decode(&obj) + objs = append(objs, &obj) + } + return objs, 200, nil +} diff --git a/models/resources/processing/processing_mongo_accessor.go b/models/resources/processing/processing_mongo_accessor.go index 50265ae..5377542 100644 --- a/models/resources/processing/processing_mongo_accessor.go +++ b/models/resources/processing/processing_mongo_accessor.go @@ -2,6 +2,7 @@ package processing import ( "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/utils" ) @@ -39,3 +40,18 @@ func (pma *ProcessingMongoAccessor) LoadOne(id string) (utils.DBObject, int, err return &processing, 200, nil } + +func (wfa ProcessingMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error) { + objs := []utils.ShallowDBObject{} + res_mongo, code, err := mongo.MONGOService.LoadAll(wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not retrieve any from db. Error: " + err.Error()) + return nil, code, err + } + for res_mongo.Next(mongo.MngoCtx) { + var obj resources.AbstractResource + res_mongo.Decode(&obj) + objs = append(objs, &obj) + } + return objs, 200, nil +} diff --git a/models/resources/resource.go b/models/resources/resource.go index eac5cdd..ecdafb8 100644 --- a/models/resources/resource.go +++ b/models/resources/resource.go @@ -8,12 +8,7 @@ import ( // Resource is the interface to be implemented by all classes inheriting from Resource to have the same behavior -//http://www.inanzzz.com/index.php/post/wqbs/a-basic-usage-of-int-and-string-enum-types-in-golang - -type Resource interface { - GetType() utils.DataType -} - +// http://www.inanzzz.com/index.php/post/wqbs/a-basic-usage-of-int-and-string-enum-types-in-golang type AbstractResource struct { utils.AbstractObject ShortDescription string `json:"short_description,omitempty" bson:"short_description,omitempty" validate:"required"` @@ -23,11 +18,3 @@ type AbstractResource struct { OwnerLogo string `json:"owner_logo,omitempty" bson:"owner_logo,omitempty"` SourceUrl string `json:"source_url,omitempty" bson:"source_url,omitempty" validate:"required"` } - -func (r *AbstractResource) GetID() string { - return r.UUID -} - -func (r *AbstractResource) GetName() string { - return r.Name -} diff --git a/models/resources/storage/storage_mongo_accessor.go b/models/resources/storage/storage_mongo_accessor.go index 8d5335d..a0777ba 100644 --- a/models/resources/storage/storage_mongo_accessor.go +++ b/models/resources/storage/storage_mongo_accessor.go @@ -2,6 +2,7 @@ package storage import ( "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/utils" ) @@ -39,3 +40,18 @@ func (sma *StorageMongoAccessor) LoadOne(id string) (utils.DBObject, int, error) return &storage, 200, nil } + +func (wfa StorageMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error) { + objs := []utils.ShallowDBObject{} + res_mongo, code, err := mongo.MONGOService.LoadAll(wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not retrieve any from db. Error: " + err.Error()) + return nil, code, err + } + for res_mongo.Next(mongo.MngoCtx) { + var obj resources.AbstractResource + res_mongo.Decode(&obj) + objs = append(objs, &obj) + } + return objs, 200, nil +} diff --git a/models/resources/workflow/workflow_mongo_accessor.go b/models/resources/workflow/workflow_mongo_accessor.go index dbb7dc6..6181a1c 100644 --- a/models/resources/workflow/workflow_mongo_accessor.go +++ b/models/resources/workflow/workflow_mongo_accessor.go @@ -2,6 +2,7 @@ package oclib import ( "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/utils" ) @@ -42,3 +43,18 @@ func (wfa *WorkflowResourceMongoAccessor) LoadOne(id string) (utils.DBObject, in res_mongo.Decode(&workflow) return &workflow, 200, nil } + +func (wfa WorkflowResourceMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error) { + objs := []utils.ShallowDBObject{} + res_mongo, code, err := mongo.MONGOService.LoadAll(wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not retrieve any from db. Error: " + err.Error()) + return nil, code, err + } + for res_mongo.Next(mongo.MngoCtx) { + var obj resources.AbstractResource + res_mongo.Decode(&obj) + objs = append(objs, &obj) + } + return objs, 200, nil +} diff --git a/models/utils/abstracts.go b/models/utils/abstracts.go index 23d0cc9..31d416e 100644 --- a/models/utils/abstracts.go +++ b/models/utils/abstracts.go @@ -19,6 +19,10 @@ func (ao *AbstractObject) GetID() string { return ao.UUID } +func (ao *AbstractObject) GetName() string { + return ao.Name +} + func (r *AbstractObject) GenerateID() { r.UUID = uuid.New().String() } diff --git a/models/utils/interfaces.go b/models/utils/interfaces.go index 4993a9e..4824ba2 100644 --- a/models/utils/interfaces.go +++ b/models/utils/interfaces.go @@ -1,5 +1,11 @@ package utils +type ShallowDBObject interface { + GenerateID() + GetID() string + GetName() string +} + type DBObject interface { GenerateID() GetID() string @@ -12,6 +18,7 @@ type DBObject interface { type Accessor interface { SetLogger(t DataType) GetType() string + LoadAll() ([]ShallowDBObject, int, error) LoadOne(id string) (DBObject, int, error) DeleteOne(id string) (DBObject, int, error) CopyOne(data DBObject) (DBObject, int, error) diff --git a/models/workflow/workflow_mongo_accessor.go b/models/workflow/workflow_mongo_accessor.go index e909aa0..ea5bd78 100644 --- a/models/workflow/workflow_mongo_accessor.go +++ b/models/workflow/workflow_mongo_accessor.go @@ -35,3 +35,18 @@ func (wfa *WorkflowMongoAccessor) LoadOne(id string) (utils.DBObject, int, error res_mongo.Decode(&workflow) return &workflow, 200, nil } + +func (wfa WorkflowMongoAccessor) LoadAll() ([]utils.ShallowDBObject, int, error) { + objs := []utils.ShallowDBObject{} + res_mongo, code, err := mongo.MONGOService.LoadAll(wfa.GetType()) + if err != nil { + wfa.Logger.Error().Msg("Could not retrieve any from db. Error: " + err.Error()) + return nil, code, err + } + for res_mongo.Next(mongo.MngoCtx) { + var obj utils.AbstractObject + res_mongo.Decode(&obj) + objs = append(objs, &obj) + } + return objs, 200, nil +}