diff --git a/website/server/controllers/api-v3/challenges.js b/website/server/controllers/api-v3/challenges.js index 51b5bb1229..f2d0b09747 100644 --- a/website/server/controllers/api-v3/challenges.js +++ b/website/server/controllers/api-v3/challenges.js @@ -860,10 +860,20 @@ api.cloneChallenge = { const { savedChal } = await createChallenge(user, req, res); - const challengeTasks = await Tasks.Task.find({ - 'challenge.id': challengeToClone._id, - userId: { $exists: false }, - }).exec(); + const challengeTaskIds = [ + ...challengeToClone.tasksOrder.habits, + ...challengeToClone.tasksOrder.dailys, + ...challengeToClone.tasksOrder.todos, + ...challengeToClone.tasksOrder.rewards, + ]; + + const challengeTasks = await Promise.all(challengeTaskIds.map(async taskId => { + const task = Tasks.Task.findById(taskId).exec(); + return task; + })); + + // last task should be added first and vice-versa, since new tasks are prepended + challengeTasks.reverse(); const tasksToClone = challengeTasks.map(task => { const clonedTask = cloneDeep(task.toObject());