diff --git a/models/booking/booking_mongo_accessor.go b/models/booking/booking_mongo_accessor.go index e1010c3..df158a8 100644 --- a/models/booking/booking_mongo_accessor.go +++ b/models/booking/booking_mongo_accessor.go @@ -38,7 +38,7 @@ func (a *BookingMongoAccessor) UpdateOne(set utils.DBObject, id string) (utils.D } func (a *BookingMongoAccessor) LoadOne(id string) (utils.DBObject, int, error) { - return utils.GenericLoadOne[*Booking](id, func(d utils.DBObject) (utils.DBObject, int, error) { + return utils.GenericLoadOne[*Booking](id, a.New(), func(d utils.DBObject) (utils.DBObject, int, error) { now := time.Now() now = now.Add(time.Second * -60) if d.(*Booking).State == enum.DRAFT && now.UTC().After(d.(*Booking).ExpectedStartDate) { diff --git a/models/resources/purchase_resource/purchase_resource_accessor.go b/models/resources/purchase_resource/purchase_resource_accessor.go index f8e74dc..a924131 100644 --- a/models/resources/purchase_resource/purchase_resource_accessor.go +++ b/models/resources/purchase_resource/purchase_resource_accessor.go @@ -28,7 +28,7 @@ func NewAccessor(request *tools.APIRequest) *PurchaseResourceMongoAccessor { * Nothing special here, just the basic CRUD operations */ func (a *PurchaseResourceMongoAccessor) LoadOne(id string) (utils.DBObject, int, error) { - return utils.GenericLoadOne[*PurchaseResource](id, func(d utils.DBObject) (utils.DBObject, int, error) { + return utils.GenericLoadOne[*PurchaseResource](id, a.New(), func(d utils.DBObject) (utils.DBObject, int, error) { if d.(*PurchaseResource).EndDate != nil && time.Now().UTC().After(*d.(*PurchaseResource).EndDate) { utils.GenericDeleteOne(id, a) return nil, 404, nil diff --git a/models/utils/abstracts.go b/models/utils/abstracts.go index b270a07..72b3b8e 100755 --- a/models/utils/abstracts.go +++ b/models/utils/abstracts.go @@ -250,7 +250,7 @@ func (a *AbstractAccessor[T]) CopyOne(data DBObject) (DBObject, int, error) { } func (a *AbstractAccessor[T]) LoadOne(id string) (DBObject, int, error) { - return GenericLoadOne[T](id, func(d DBObject) (DBObject, int, error) { + return GenericLoadOne[T](id, a.New(), func(d DBObject) (DBObject, int, error) { return d, 200, nil }, a) } diff --git a/models/utils/common.go b/models/utils/common.go index f4a3e39..55438d5 100755 --- a/models/utils/common.go +++ b/models/utils/common.go @@ -120,8 +120,7 @@ func GenericUpdateOne(set DBObject, id string, a Accessor, new DBObject) (DBObje return a.LoadOne(id) } -func GenericLoadOne[T DBObject](id string, f func(DBObject) (DBObject, int, error), a Accessor) (DBObject, int, error) { - var data T +func GenericLoadOne[T DBObject](id string, data T, f func(DBObject) (DBObject, int, error), a Accessor) (DBObject, int, error) { res_mongo, code, err := mongo.MONGOService.LoadOne(id, a.GetType().String()) if err != nil { return nil, code, err diff --git a/models/workflow/workflow_mongo_accessor.go b/models/workflow/workflow_mongo_accessor.go index 15bd756..c269bad 100644 --- a/models/workflow/workflow_mongo_accessor.go +++ b/models/workflow/workflow_mongo_accessor.go @@ -38,6 +38,7 @@ func new(t tools.DataType, request *tools.APIRequest) *workflowMongoAccessor { Logger: logs.CreateLogger(t.String()), // Create a logger with the data type Request: request, Type: t, + New: func() *Workflow { return &Workflow{} }, }, } } @@ -179,7 +180,7 @@ func (a *workflowMongoAccessor) execute(workflow *Workflow, delete bool, active } func (a *workflowMongoAccessor) LoadOne(id string) (utils.DBObject, int, error) { - return utils.GenericLoadOne[*Workflow](id, func(d utils.DBObject) (utils.DBObject, int, error) { + return utils.GenericLoadOne(id, a.New(), func(d utils.DBObject) (utils.DBObject, int, error) { w := d.(*Workflow) a.execute(w, false, true) // if no workspace is attached to the workflow, create it return d, 200, nil @@ -187,7 +188,8 @@ func (a *workflowMongoAccessor) LoadOne(id string) (utils.DBObject, int, error) } func (a *workflowMongoAccessor) Search(filters *dbs.Filters, search string, isDraft bool) ([]utils.ShallowDBObject, int, error) { - return utils.GenericSearch[*Workflow](filters, search, (&Workflow{}).GetObjectFilters(search), func(d utils.DBObject) utils.ShallowDBObject { return a.verifyResource(d) }, isDraft, a) + return utils.GenericSearch[*Workflow](filters, search, a.New().GetObjectFilters(search), + func(d utils.DBObject) utils.ShallowDBObject { return a.verifyResource(d) }, isDraft, a) } func (a *workflowMongoAccessor) verifyResource(obj utils.DBObject) utils.DBObject { @@ -201,17 +203,18 @@ func (a *workflowMongoAccessor) verifyResource(obj utils.DBObject) utils.DBObjec continue } var access utils.Accessor - if t == tools.COMPUTE_RESOURCE { + switch t { + case tools.COMPUTE_RESOURCE: access = resources.NewAccessor[*resources.ComputeResource](t, a.GetRequest(), func() utils.DBObject { return &resources.ComputeResource{} }) - } else if t == tools.PROCESSING_RESOURCE { + case tools.PROCESSING_RESOURCE: access = resources.NewAccessor[*resources.ProcessingResource](t, a.GetRequest(), func() utils.DBObject { return &resources.ProcessingResource{} }) - } else if t == tools.STORAGE_RESOURCE { + case tools.STORAGE_RESOURCE: access = resources.NewAccessor[*resources.StorageResource](t, a.GetRequest(), func() utils.DBObject { return &resources.StorageResource{} }) - } else if t == tools.WORKFLOW_RESOURCE { + case tools.WORKFLOW_RESOURCE: access = resources.NewAccessor[*resources.WorkflowResource](t, a.GetRequest(), func() utils.DBObject { return &resources.WorkflowResource{} }) - } else if t == tools.DATA_RESOURCE { + case tools.DATA_RESOURCE: access = resources.NewAccessor[*resources.DataResource](t, a.GetRequest(), func() utils.DBObject { return &resources.DataResource{} }) - } else { + default: wf.Graph.Clear(resource.GetID()) } if error := utils.VerifyAccess(access, resource.GetID()); error != nil { diff --git a/models/workflow_execution/workflow_execution_mongo_accessor.go b/models/workflow_execution/workflow_execution_mongo_accessor.go index db0b58c..c8951ad 100755 --- a/models/workflow_execution/workflow_execution_mongo_accessor.go +++ b/models/workflow_execution/workflow_execution_mongo_accessor.go @@ -51,7 +51,7 @@ func (wfa *WorkflowExecutionMongoAccessor) UpdateOne(set utils.DBObject, id stri } func (a *WorkflowExecutionMongoAccessor) LoadOne(id string) (utils.DBObject, int, error) { - return utils.GenericLoadOne[*WorkflowExecution](id, func(d utils.DBObject) (utils.DBObject, int, error) { + return utils.GenericLoadOne[*WorkflowExecution](id, a.New(), func(d utils.DBObject) (utils.DBObject, int, error) { now := time.Now() now = now.Add(time.Second * -60) if d.(*WorkflowExecution).State == enum.DRAFT && !a.shallow && now.UTC().After(d.(*WorkflowExecution).ExecDate) { diff --git a/models/workspace/workspace_mongo_accessor.go b/models/workspace/workspace_mongo_accessor.go index f303348..b2acb12 100644 --- a/models/workspace/workspace_mongo_accessor.go +++ b/models/workspace/workspace_mongo_accessor.go @@ -89,7 +89,7 @@ func (a *workspaceMongoAccessor) StoreOne(data utils.DBObject) (utils.DBObject, } func (a *workspaceMongoAccessor) LoadOne(id string) (utils.DBObject, int, error) { - return utils.GenericLoadOne[*Workspace](id, func(d utils.DBObject) (utils.DBObject, int, error) { + return utils.GenericLoadOne[*Workspace](id, a.New(), func(d utils.DBObject) (utils.DBObject, int, error) { d.(*Workspace).Fill(a.GetRequest()) return d, 200, nil }, a)