From b03ddf6f7de58b57ef0795a58895a5d43b029fc1 Mon Sep 17 00:00:00 2001 From: Keith Holliday Date: Tue, 28 Nov 2017 14:57:08 -0600 Subject: [PATCH] Added fix for task order using / for arrays (#9590) --- website/server/controllers/api-v3/tasks.js | 23 ++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/website/server/controllers/api-v3/tasks.js b/website/server/controllers/api-v3/tasks.js index 60d3b67774..b2de21ec55 100644 --- a/website/server/controllers/api-v3/tasks.js +++ b/website/server/controllers/api-v3/tasks.js @@ -579,19 +579,20 @@ api.scoreTask = { // If a todo was completed or uncompleted move it in or out of the user.tasksOrder.todos list // TODO move to common code? + let taskOrderPromise; if (task.type === 'todo') { if (!wasCompleted && task.completed) { // @TODO: mongoose's push and pull should be atomic and help with // our concurrency issues. If not, we need to use this update $pull and $push - // await user.update({ - // $pull: { 'tasksOrder.todos': task._id }, - // }).exec(); - user.tasksOrder.todos.pull(task._id); + taskOrderPromise = user.update({ + $pull: { 'tasksOrder.todos': task._id }, + }).exec(); + // user.tasksOrder.todos.pull(task._id); } else if (wasCompleted && !task.completed && user.tasksOrder.todos.indexOf(task._id) === -1) { - // await user.update({ - // $push: { 'tasksOrder.todos': task._id }, - // }).exec(); - user.tasksOrder.todos.push(task._id); + taskOrderPromise = user.update({ + $push: { 'tasksOrder.todos': task._id }, + }).exec(); + // user.tasksOrder.todos.push(task._id); } } @@ -609,10 +610,12 @@ api.scoreTask = { user.markModified('_ABtests'); } - let results = await Bluebird.all([ + let promises = [ user.save(), task.save(), - ]); + ]; + if (taskOrderPromise) promises.push(taskOrderPromise); + let results = await Bluebird.all(promises); let savedUser = results[0];