diff --git a/website/server/controllers/api-v3/tasks.js b/website/server/controllers/api-v3/tasks.js index 5c20a9f4d7..c168cd4ca5 100644 --- a/website/server/controllers/api-v3/tasks.js +++ b/website/server/controllers/api-v3/tasks.js @@ -838,6 +838,32 @@ api.moveTask = { // In memory updates const order = owner.tasksOrder[`${task.type}s`]; + + if (order.indexOf(task._id) === -1) { // task is missing from list, list needs repair + const taskListQuery = { type: task.type }; + if (group) { + taskListQuery['group.id'] = owner._id; + taskListQuery.userId = { $exists: false }; + } else if (challenge) { + taskListQuery['challenge.id'] = owner._id; + taskListQuery.userId = { $exists: false }; + } else { + taskListQuery.userId = owner._id; + } + const taskList = await Tasks.Task.find( + taskListQuery, + { _id: 1 }, + ).exec(); + for (const foundTask of taskList) { + if (order.indexOf(foundTask._id) === -1) { + order.push(foundTask._id); + } + } + const fixQuery = { $set: {} }; + fixQuery.$set[`tasksOrder.${task.type}s`] = order; + await owner.update(fixQuery).exec(); + } + moveTask(order, task._id, to); // Server updates diff --git a/website/server/controllers/api-v3/tasks/groups.js b/website/server/controllers/api-v3/tasks/groups.js index 98da938496..ab18f7faad 100644 --- a/website/server/controllers/api-v3/tasks/groups.js +++ b/website/server/controllers/api-v3/tasks/groups.js @@ -160,6 +160,21 @@ api.groupMoveTask = { const order = group.tasksOrder[`${task.type}s`]; + if (order.indexOf(task._id) === -1) { // task is missing from list, list needs repair + const taskList = await Tasks.Task.find( + { 'group.id': group._id, userId: { $exists: false }, type: task.type }, + { _id: 1 }, + ).exec(); + for (const foundTask of taskList) { + if (order.indexOf(foundTask._id) === -1) { + order.push(foundTask._id); + } + } + const fixQuery = { $set: {} }; + fixQuery.$set[`tasksOrder.${task.type}s`] = order; + await group.update(fixQuery).exec(); + } + moveTask(order, task._id, to); await group.save();