diff --git a/models/workflow/workflow_mongo_accessor.go b/models/workflow/workflow_mongo_accessor.go index 9f67d33..f3d2386 100644 --- a/models/workflow/workflow_mongo_accessor.go +++ b/models/workflow/workflow_mongo_accessor.go @@ -242,26 +242,27 @@ func (wfa *workflowMongoAccessor) UpdateOne(set utils.DBObject, id string) (util if code != 200 { return nil, 409, err } - d := set.(*Workflow) - if d.ScheduleActive && d.Schedule != nil { // if the workflow is scheduled, update the executions - now := time.Now().UTC() - if (d.Schedule.End != nil && now.After(*d.Schedule.End)) || (d.Schedule.End == nil && d.Schedule.Start != nil && now.After(*d.Schedule.Start)) { // if the start date is passed, then you can book - d.ScheduleActive = false - } // if the start date is passed, update the executions - } + // avoid the update if the schedule is the same avoid := set.(*Workflow).Schedule == nil || (res.(*Workflow).Schedule != nil && res.(*Workflow).ScheduleActive == set.(*Workflow).ScheduleActive && res.(*Workflow).Schedule.Start == set.(*Workflow).Schedule.Start && res.(*Workflow).Schedule.End == set.(*Workflow).Schedule.End && res.(*Workflow).Schedule.Cron == set.(*Workflow).Schedule.Cron) - res, code, err = wfa.GenericUpdateOne(d, id, wfa, &Workflow{}) + res, code, err = wfa.GenericUpdateOne(set, id, wfa, &Workflow{}) if code != 200 { return nil, code, err } workflow := res.(*Workflow) - if !avoid { // if the schedule is not avoided, update the executions if code, err := wfa.execution(id, workflow, false); code != 200 { return nil, code, errors.New("could not update the executions : " + err.Error()) } } + fmt.Println("UPDATE", workflow.ScheduleActive, workflow.Schedule) + if workflow.ScheduleActive && workflow.Schedule != nil { // if the workflow is scheduled, update the executions + now := time.Now().UTC() + if (workflow.Schedule.End != nil && now.After(*workflow.Schedule.End)) || (workflow.Schedule.End == nil && workflow.Schedule.Start != nil && now.After(*d.Schedule.Start)) { // if the start date is passed, then you can book + workflow.ScheduleActive = false + wfa.GenericRawUpdateOne(workflow, id, wfa) + } // if the start date is passed, update the executions + } wfa.execute(workflow, false, false) // update the workspace for the workflow wfa.share(workflow, false, wfa.Caller) // share the update to the peers return res, code, nil @@ -348,18 +349,15 @@ func (wfa *workflowMongoAccessor) LoadOne(id string) (utils.DBObject, int, error return nil, code, err } res_mongo.Decode(&workflow) - found := false if workflow.ScheduleActive && workflow.Schedule != nil { // if the workflow is scheduled, update the executions now := time.Now().UTC() if (workflow.Schedule.End != nil && now.After(*workflow.Schedule.End)) || (workflow.Schedule.End == nil && workflow.Schedule.Start != nil && now.After(*workflow.Schedule.Start)) { // if the start date is passed, then you can book workflow.ScheduleActive = false - found = true + wfa.GenericRawUpdateOne(&workflow, id, wfa) + } // if the start date is passed, update the executions } wfa.execute(&workflow, false, true) // if no workspace is attached to the workflow, create it - if found { - wfa.GenericRawUpdateOne(&workflow, id, wfa) - } return &workflow, 200, nil }