From c37fd3f17e51609f79c6e7b419650f4ecc4f26d6 Mon Sep 17 00:00:00 2001 From: Ajeyakrishna Date: Fri, 15 Dec 2023 08:27:50 +0530 Subject: [PATCH 1/6] fix: minor changes to missed updates --- controllers/tasks.js | 2 +- models/discordactions.js | 10 ++++++---- utils/tasks.js | 5 ++--- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/controllers/tasks.js b/controllers/tasks.js index 44de1405f..8e58505a0 100644 --- a/controllers/tasks.js +++ b/controllers/tasks.js @@ -492,7 +492,7 @@ const getUsersHandler = async (req, res) => { size: size && Number.parseInt(size), excludedDates: date?.map((date) => Number.parseInt(date.value)), excludedDays: weekday?.map((day) => daysOfWeek[day.value]), - dateGap: !!daysGap && daysGap.length === 1 && Number.parseInt(daysGap[0].value), + dateGap: !!daysGap && daysGap.length === 1 ? Number.parseInt(daysGap[0].value) : null, }); return res.status(200).json(response); } else { diff --git a/models/discordactions.js b/models/discordactions.js index 2a7abf149..882f4ad78 100644 --- a/models/discordactions.js +++ b/models/discordactions.js @@ -874,7 +874,7 @@ const getMissedProgressUpdatesUsers = async (options = {}) => { } } - let taskQuery = buildTasksQueryForMissedUpdates(gapWindowStart, size); + let taskQuery = buildTasksQueryForMissedUpdates(size); if (cursor) { const data = await tasksModel.doc(cursor).get(); @@ -894,7 +894,9 @@ const getMissedProgressUpdatesUsers = async (options = {}) => { stats.tasks = tasksQuerySnapshot.size; tasksQuerySnapshot.forEach((doc) => { - const taskAssignee = doc.data().assignee; + const { assignee: taskAssignee, startedOn: taskStartedOn } = doc.data(); + if (!taskAssignee || taskStartedOn >= convertDaysToMilliseconds(gapWindowStart)) return; + const taskId = doc.id; if (usersMap.has(taskAssignee)) { @@ -952,8 +954,7 @@ const getMissedProgressUpdatesUsers = async (options = {}) => { }); }); - const discordUserList = await Promise.all(discordUsersPromise); - + const discordUserList = await discordUsersPromise; const discordUserMap = new Map(); discordUserList.forEach((discordUser) => { const discordUserData = { isBot: !!discordUser.user.bot }; @@ -973,6 +974,7 @@ const getMissedProgressUpdatesUsers = async (options = {}) => { } } }); + discordUserMap.set(discordUser.user.id, discordUserData); }); diff --git a/utils/tasks.js b/utils/tasks.js index c04107ce0..864a88253 100644 --- a/utils/tasks.js +++ b/utils/tasks.js @@ -2,7 +2,6 @@ const { getUsername, getUserId, getParticipantUsernames, getParticipantUserIds } const { TASK_TYPE, MAPPED_TASK_STATUS, COMPLETED_TASK_STATUS } = require("../constants/tasks"); const fireStore = require("../utils/firestore"); const tasksModel = fireStore.collection("tasks"); -const { convertMillisToSeconds } = require("./time"); const fromFirestoreData = async (task) => { if (!task) { @@ -113,11 +112,11 @@ const parseSearchQuery = (queryString) => { return searchParams; }; -const buildTasksQueryForMissedUpdates = (startedOnTimestamp, size) => { +const buildTasksQueryForMissedUpdates = (size) => { const completedTasksStatusList = Object.values(COMPLETED_TASK_STATUS); return tasksModel .where("status", "not-in", completedTasksStatusList) - .where("startedOn", "<", convertMillisToSeconds(startedOnTimestamp)) + .orderBy("status") .orderBy("assignee") .limit(size); }; From 12b0726faa12d10973c5a0d8615677823a3e9dd3 Mon Sep 17 00:00:00 2001 From: Ajeyakrishna Date: Fri, 15 Dec 2023 08:38:02 +0530 Subject: [PATCH 2/6] fix: adds an extra status to query --- utils/tasks.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/utils/tasks.js b/utils/tasks.js index 864a88253..f1b4616c6 100644 --- a/utils/tasks.js +++ b/utils/tasks.js @@ -1,5 +1,5 @@ const { getUsername, getUserId, getParticipantUsernames, getParticipantUserIds } = require("./users"); -const { TASK_TYPE, MAPPED_TASK_STATUS, COMPLETED_TASK_STATUS } = require("../constants/tasks"); +const { TASK_TYPE, MAPPED_TASK_STATUS, COMPLETED_TASK_STATUS, TASK_STATUS } = require("../constants/tasks"); const fireStore = require("../utils/firestore"); const tasksModel = fireStore.collection("tasks"); @@ -115,7 +115,7 @@ const parseSearchQuery = (queryString) => { const buildTasksQueryForMissedUpdates = (size) => { const completedTasksStatusList = Object.values(COMPLETED_TASK_STATUS); return tasksModel - .where("status", "not-in", completedTasksStatusList) + .where("status", "not-in", [...completedTasksStatusList, TASK_STATUS.AVAILABLE]) .orderBy("status") .orderBy("assignee") .limit(size); From 3ba46b36fddbbba2dc65523de931b8b591007b9d Mon Sep 17 00:00:00 2001 From: Ajeyakrishna Date: Fri, 15 Dec 2023 16:35:53 +0530 Subject: [PATCH 3/6] fix: use the correct function for time conversion --- models/discordactions.js | 4 ++-- test/unit/models/discordactions.test.js | 4 ++-- utils/time.js | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/models/discordactions.js b/models/discordactions.js index 882f4ad78..df275d262 100644 --- a/models/discordactions.js +++ b/models/discordactions.js @@ -21,7 +21,7 @@ const discordMissedUpdatesRoleId = config.get("discordMissedUpdatesRoleId"); const userStatusModel = firestore.collection("usersStatus"); const usersUtils = require("../utils/users"); const { getUsersBasedOnFilter, fetchUser } = require("./users"); -const { convertDaysToMilliseconds } = require("../utils/time"); +const { convertDaysToMilliseconds, convertMillisToSeconds } = require("../utils/time"); const { chunks } = require("../utils/array"); const tasksModel = firestore.collection("tasks"); const { FIRESTORE_IN_CLAUSE_SIZE } = require("../constants/users"); @@ -895,7 +895,7 @@ const getMissedProgressUpdatesUsers = async (options = {}) => { stats.tasks = tasksQuerySnapshot.size; tasksQuerySnapshot.forEach((doc) => { const { assignee: taskAssignee, startedOn: taskStartedOn } = doc.data(); - if (!taskAssignee || taskStartedOn >= convertDaysToMilliseconds(gapWindowStart)) return; + if (!taskAssignee || taskStartedOn >= convertMillisToSeconds(gapWindowStart)) return; const taskId = doc.id; diff --git a/test/unit/models/discordactions.test.js b/test/unit/models/discordactions.test.js index ac453e3d3..2042f224c 100644 --- a/test/unit/models/discordactions.test.js +++ b/test/unit/models/discordactions.test.js @@ -682,7 +682,7 @@ describe("discordactions", function () { }); expect(result).to.be.an("object"); expect(result).to.be.deep.equal({ - tasks: 0, + tasks: 4, missedUpdatesTasks: 0, usersToAddRole: [], }); @@ -716,7 +716,7 @@ describe("discordactions", function () { }); expect(result).to.be.an("object"); expect(result).to.be.deep.equal({ - tasks: 1, + tasks: 5, missedUpdatesTasks: 0, usersToAddRole: [], }); diff --git a/utils/time.js b/utils/time.js index dcb7db7ee..5910a7bdc 100644 --- a/utils/time.js +++ b/utils/time.js @@ -31,7 +31,7 @@ const convertDaysToMilliseconds = (days) => { */ const convertMillisToSeconds = (milliseconds) => { if (typeof milliseconds !== "number") throw Error("Not a number"); - return milliseconds / 1000; + return Math.round(milliseconds / 1000); }; /** * Returns time in seconds of timestamp after given duration From d5c920154b588d45d0472c155f539dee6e78e685 Mon Sep 17 00:00:00 2001 From: Ajeyakrishna Date: Fri, 15 Dec 2023 17:08:11 +0530 Subject: [PATCH 4/6] chore: update test case data --- models/discordactions.js | 1 - test/integration/tasks.test.js | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/models/discordactions.js b/models/discordactions.js index df275d262..9af8f29a9 100644 --- a/models/discordactions.js +++ b/models/discordactions.js @@ -974,7 +974,6 @@ const getMissedProgressUpdatesUsers = async (options = {}) => { } } }); - discordUserMap.set(discordUser.user.id, discordUserData); }); diff --git a/test/integration/tasks.test.js b/test/integration/tasks.test.js index a288b3a77..c468a2a85 100644 --- a/test/integration/tasks.test.js +++ b/test/integration/tasks.test.js @@ -1408,13 +1408,13 @@ describe("Tasks", function () { .request(app) .get("/tasks/users/discord") .query({ - size: 3, + size: 5, q: `status:${tasksUsersStatus.MISSED_UPDATES} -weekday:sun -weekday:mon -weekday:tue -weekday:wed -weekday:thu -weekday:fri -date:231423432 -days-count:4`, }) .set("Authorization", `Bearer ${jwtToken}`); expect(response.body).to.be.deep.equal({ usersToAddRole: [], - tasks: 0, + tasks: 4, missedUpdatesTasks: 0, }); expect(response.status).to.be.equal(200); From 568497322768b60e99b9b4beef4a5794c3277dd9 Mon Sep 17 00:00:00 2001 From: Ajeyakrishna Date: Fri, 15 Dec 2023 17:47:34 +0530 Subject: [PATCH 5/6] feat: update response for missed updates details --- controllers/tasks.js | 8 +++++++- models/discordactions.js | 1 - 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/controllers/tasks.js b/controllers/tasks.js index 8e58505a0..45238d807 100644 --- a/controllers/tasks.js +++ b/controllers/tasks.js @@ -494,7 +494,13 @@ const getUsersHandler = async (req, res) => { excludedDays: weekday?.map((day) => daysOfWeek[day.value]), dateGap: !!daysGap && daysGap.length === 1 ? Number.parseInt(daysGap[0].value) : null, }); - return res.status(200).json(response); + + if (response.error) { + return res.boom.badRequest(response.message); + } + return res + .status(200) + .json({ message: "Discord details of users with status missed updates fetched successfully", data: response }); } else { return res.boom.badRequest("Unknown type and query"); } diff --git a/models/discordactions.js b/models/discordactions.js index 9af8f29a9..8adb45990 100644 --- a/models/discordactions.js +++ b/models/discordactions.js @@ -880,7 +880,6 @@ const getMissedProgressUpdatesUsers = async (options = {}) => { const data = await tasksModel.doc(cursor).get(); if (!data.data()) { return { - statusCode: 400, error: "Bad Request", message: `Invalid cursor: ${cursor}`, }; From 4c72952b0f8ae9d82ea7c55a684409f4b6acf175 Mon Sep 17 00:00:00 2001 From: Ajeyakrishna Date: Fri, 15 Dec 2023 17:59:59 +0530 Subject: [PATCH 6/6] chore: updates response messages for tests --- test/integration/tasks.test.js | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/test/integration/tasks.test.js b/test/integration/tasks.test.js index c468a2a85..57e009a6c 100644 --- a/test/integration/tasks.test.js +++ b/test/integration/tasks.test.js @@ -1397,9 +1397,12 @@ describe("Tasks", function () { .query({ q: `status:${tasksUsersStatus.MISSED_UPDATES}` }) .set("Authorization", `Bearer ${jwtToken}`); expect(response.body).to.be.deep.equal({ - usersToAddRole: [activeUserWithProgressUpdates.discordId], - tasks: 4, - missedUpdatesTasks: 3, + message: "Discord details of users with status missed updates fetched successfully", + data: { + usersToAddRole: [activeUserWithProgressUpdates.discordId], + tasks: 4, + missedUpdatesTasks: 3, + }, }); expect(response.status).to.be.equal(200); }); @@ -1413,9 +1416,12 @@ describe("Tasks", function () { }) .set("Authorization", `Bearer ${jwtToken}`); expect(response.body).to.be.deep.equal({ - usersToAddRole: [], - tasks: 4, - missedUpdatesTasks: 0, + message: "Discord details of users with status missed updates fetched successfully", + data: { + usersToAddRole: [], + tasks: 4, + missedUpdatesTasks: 0, + }, }); expect(response.status).to.be.equal(200); });