mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 22:57:21 +01:00
On-the-fly fix for tasks missing from tasksOrder (#13900)
* fix(tasks): revised fix logic, accounting for groups/challenges * fix(tasks): don't grab individual user tasks in shared list Co-authored-by: SabreCat <sabe@habitica.com>
This commit is contained in:
@@ -838,6 +838,32 @@ api.moveTask = {
|
|||||||
|
|
||||||
// In memory updates
|
// In memory updates
|
||||||
const order = owner.tasksOrder[`${task.type}s`];
|
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);
|
moveTask(order, task._id, to);
|
||||||
|
|
||||||
// Server updates
|
// Server updates
|
||||||
|
|||||||
@@ -160,6 +160,21 @@ api.groupMoveTask = {
|
|||||||
|
|
||||||
const order = group.tasksOrder[`${task.type}s`];
|
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);
|
moveTask(order, task._id, to);
|
||||||
|
|
||||||
await group.save();
|
await group.save();
|
||||||
|
|||||||
Reference in New Issue
Block a user