Skip to content
Merged
Show file tree
Hide file tree
Changes from 28 commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
e356eb0
feat : adds function to reject task requests
Ajeyakrishna-k Nov 15, 2023
b7045ef
Merge remote-tracking branch 'origin/develop' into feat/reject-task-r…
Ajeyakrishna-k Nov 17, 2023
ab691c1
feat : adds tests and minor changes in validation
Ajeyakrishna-k Nov 17, 2023
e60da8e
chore : rename and add jsdoc for models function
Ajeyakrishna-k Nov 24, 2023
ad344d9
Merge remote-tracking branch 'origin/develop' into feat/reject-task-r…
Ajeyakrishna-k Nov 24, 2023
0fa0dfc
chore : update comment
Ajeyakrishna-k Nov 24, 2023
8685912
refactor: rename variables
Ajeyakrishna-k Nov 25, 2023
f0cd014
Merge branch 'develop' into feat/reject-task-requests
Ajeyakrishna-k Nov 25, 2023
55b1f52
feat: models function to fetch user discord id when they miss progres…
Ajeyakrishna-k Dec 5, 2023
b5b37c7
Merge remote-tracking branch 'origin/develop' into feat/missed-progre…
Ajeyakrishna-k Dec 5, 2023
c89a9fb
chore: lint fix
Ajeyakrishna-k Dec 5, 2023
410c03d
fix: failing tests
Ajeyakrishna-k Dec 5, 2023
7437a40
Merge branch 'develop' into feat/missed-progress-updates
Ajeyakrishna-k Dec 7, 2023
a244d76
chore: refactors and fix test
Ajeyakrishna-k Dec 7, 2023
4923499
Merge branch 'feat/missed-progress-updates' of https://github.com/Rea…
Ajeyakrishna-k Dec 7, 2023
6cbe27c
fix: failing tests
Ajeyakrishna-k Dec 7, 2023
8b28864
Merge branch 'develop' into feat/missed-progress-updates
Ajeyakrishna-k Dec 8, 2023
19b5ce5
feat: adds excluded days of week logic
Ajeyakrishna-k Dec 8, 2023
02bcdae
Merge branch 'feat/missed-progress-updates' of https://github.com/Rea…
Ajeyakrishna-k Dec 8, 2023
f7e4a9a
Merge branch 'develop' into feat/missed-progress-updates
Ajeyakrishna-k Dec 10, 2023
e4f3d30
fix: adds validation and improves comments
Ajeyakrishna-k Dec 10, 2023
80f5784
Fix api failure when a single user discord details were not present (…
Ajeyakrishna-k Dec 12, 2023
3bc300d
Merge branch 'develop' into feat/missed-progress-updates
Ajeyakrishna-k Dec 12, 2023
25f3439
Merge pull request #1753 from Real-Dev-Squad/feat/missed-progress-upd…
iamitprakash Dec 12, 2023
3aa1f18
Updates ts import (#1778)
Ajeyakrishna-k Dec 12, 2023
61433fc
Adds route and controller for missed update user list api (#1766)
Ajeyakrishna-k Dec 13, 2023
61cadee
Adds role id to config (#1782)
Ajeyakrishna-k Dec 13, 2023
78b04f4
Enhancement : Restrict Task Status Change to Available for Task assig…
heyrandhir Dec 14, 2023
639ca1d
Fix missed updates script (#1787)
Ajeyakrishna-k Dec 15, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions config/default.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ module.exports = {
discordUnverifiedRoleId: "<discordUnverifiedRoleId>",
discordDeveloperRoleId: "<discordDeveloperRoleId>",
discordMavenRoleId: "<discordMavenRoleId>",
discordMissedUpdatesRoleId: "<discordMissedUpdatesRoleId>",
githubApi: {
baseUrl: "https://api.github.com",
org: "Real-Dev-Squad",
Expand Down
1 change: 1 addition & 0 deletions config/production.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ module.exports = {
discordUnverifiedRoleId: "1103047289330745386",
discordDeveloperRoleId: "915490782939582485",
discordMavenRoleId: "875564640438997043",
discordMissedUpdatesRoleId: "1183553844811153458",
userToken: {
cookieName: "rds-session",
},
Expand Down
1 change: 1 addition & 0 deletions config/staging.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ module.exports = {
discordUnverifiedRoleId: "1120875993771544687",
discordDeveloperRoleId: "1121445071213056071",
discordMavenRoleId: "1152361736456896586",
discordMissedUpdatesRoleId: "1184201657404362772",
enableFileLogs: false,
enableConsoleLogs: true,

Expand Down
12 changes: 11 additions & 1 deletion constants/constants.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,15 @@
const DOCUMENT_WRITE_SIZE = 500;
const daysOfWeek = {
sun: 0,
mon: 1,
tue: 2,
wed: 3,
thu: 4,
fri: 5,
sat: 6,
};

module.exports = {
DOCUMENT_WRITE_SIZE,
DOCUMENT_WRITE_SIZE,
daysOfWeek,
};
20 changes: 19 additions & 1 deletion constants/tasks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,24 @@ const MAPPED_TASK_STATUS = {
UNASSIGNED: "AVAILABLE",
};

const COMPLETED_TASK_STATUS = {
VERIFIED: "VERIFIED",
DONE: "DONE",
COMPLETED: "COMPLETED",
};
const TASK_SIZE = 5;

module.exports = { TASK_TYPE, TASK_STATUS, TASK_STATUS_OLD, MAPPED_TASK_STATUS, TASK_SIZE, DEFAULT_TASK_PRIORITY };
const tasksUsersStatus = {
MISSED_UPDATES: "missed-updates",
};

module.exports = {
TASK_TYPE,
TASK_STATUS,
TASK_STATUS_OLD,
MAPPED_TASK_STATUS,
TASK_SIZE,
DEFAULT_TASK_PRIORITY,
COMPLETED_TASK_STATUS,
tasksUsersStatus,
};
32 changes: 31 additions & 1 deletion controllers/tasks.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
const tasks = require("../models/tasks");
const { TASK_STATUS, TASK_STATUS_OLD } = require("../constants/tasks");
const { TASK_STATUS, TASK_STATUS_OLD, tasksUsersStatus } = require("../constants/tasks");
const { addLog } = require("../models/logs");
const { USER_STATUS } = require("../constants/users");
const { addOrUpdate, getRdsUserInfoByGitHubUsername } = require("../models/users");
Expand All @@ -13,6 +13,9 @@ const { updateUserStatusOnTaskUpdate, updateStatusOnTaskCompletion } = require("
const dataAccess = require("../services/dataAccessLayer");
const { parseSearchQuery } = require("../utils/tasks");
const { addTaskCreatedAtAndUpdatedAtFields } = require("../services/tasks");
const { RQLQueryParser } = require("../utils/RQLParser");
const { getMissedProgressUpdatesUsers } = require("../models/discordactions");
const { daysOfWeek } = require("../constants/constants");
/**
* Creates new task
*
Expand Down Expand Up @@ -475,6 +478,32 @@ const updateStatus = async (req, res) => {
}
};

const getUsersHandler = async (req, res) => {
try {
const { size, cursor, q: queryString } = req.query;
const rqlParser = new RQLQueryParser(queryString);
const { "days-count": daysGap, weekday, date, status } = rqlParser.getFilterQueries();
if (!!status && status.length === 1 && status[0].value === tasksUsersStatus.MISSED_UPDATES) {
if (daysGap && daysGap > 1) {
return res.boom.badRequest("number of days gap provided cannot be greater than 1");
}
const response = await getMissedProgressUpdatesUsers({
cursor: cursor,
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),
});
return res.status(200).json(response);
} else {
return res.boom.badRequest("Unknown type and query");
}
} catch (error) {
logger.error("Error in fetching users details of tasks", error);
return res.boom.badImplementation(INTERNAL_SERVER_ERROR);
}
};

module.exports = {
addNewTask,
fetchTasks,
Expand All @@ -486,4 +515,5 @@ module.exports = {
overdueTasks,
assignTask,
updateStatus,
getUsersHandler,
};
79 changes: 74 additions & 5 deletions middlewares/validators/tasks.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
const joi = require("joi");
const { BadRequest } = require("http-errors");
const { DINERO, NEELAM } = require("../../constants/wallets");
const { TASK_STATUS, TASK_STATUS_OLD, MAPPED_TASK_STATUS } = require("../../constants/tasks");

const { TASK_STATUS, TASK_STATUS_OLD, MAPPED_TASK_STATUS, tasksUsersStatus } = require("../../constants/tasks");
const { RQLQueryParser } = require("../../utils/RQLParser");
const { Operators } = require("../../typeDefinitions/rqlParser");
const { daysOfWeek } = require("../../constants/constants");
const TASK_STATUS_ENUM = Object.values(TASK_STATUS);
const MAPPED_TASK_STATUS_ENUM = Object.keys(MAPPED_TASK_STATUS);

Expand Down Expand Up @@ -116,22 +119,30 @@ const updateTask = async (req, res, next) => {
};

const updateSelfTask = async (req, res, next) => {
const validStatus = [...TASK_STATUS_ENUM, ...Object.values(TASK_STATUS_OLD)].filter(
(item) => item !== TASK_STATUS.AVAILABLE
);
const schema = joi
.object()
.strict()
.keys({
status: joi
.string()
.valid(...TASK_STATUS_ENUM, ...Object.values(TASK_STATUS_OLD))
.optional(),
.valid(...validStatus)
.optional()
.error(new BadRequest(`The value for the 'status' field is invalid.`)),
percentCompleted: joi.number().integer().min(0).max(100).optional(),
});
try {
await schema.validateAsync(req.body);
next();
} catch (error) {
logger.error(`Error validating updateSelfTask payload : ${error}`);
res.boom.badRequest(error.details[0].message);
if (error instanceof BadRequest) {
res.boom.badRequest(error.message);
} else {
res.boom.badRequest(error.details[0].message);
}
}
};

Expand Down Expand Up @@ -190,10 +201,68 @@ const getTasksValidator = async (req, res, next) => {
res.boom.badRequest(error.details[0].message);
}
};
const getUsersValidator = async (req, res, next) => {
const queryParamsSchema = joi.object().keys({
cursor: joi.string().optional(),
q: joi.string().optional(),
size: joi.number().integer().min(1).max(2013),
});
const filtersSchema = joi.object().keys({
status: joi
.array()
.items(
joi.object().keys({
value: joi.string().valid(...Object.values(tasksUsersStatus)),
operator: joi.string().valid(Operators.INCLUDE),
})
)
.required(),
"days-count": joi
.array()
.items(
joi.object().keys({
value: joi.number().integer().min(1).max(10),
operator: joi.string().valid(Operators.EXCLUDE),
})
)
.optional(),
weekday: joi
.array()
.items(
joi.object().keys({
value: joi.string().valid(...Object.keys(daysOfWeek)),
operator: joi.string().valid(Operators.EXCLUDE),
})
)
.optional(),
date: joi
.array()
.items(
joi.object().keys({
value: joi.date().timestamp(),
operator: joi.string().valid(Operators.EXCLUDE),
})
)
.optional(),
});

try {
const { q: queryString } = req.query;
const rqlQueryParser = new RQLQueryParser(queryString);
await Promise.all([
queryParamsSchema.validateAsync(req.query),
filtersSchema.validateAsync(rqlQueryParser.getFilterQueries()),
]);
next();
} catch (error) {
logger.error(`Error validating get tasks for users query : ${error}`);
res.boom.badRequest(error.details[0].message);
}
};
module.exports = {
createTask,
updateTask,
updateSelfTask,
getTasksValidator,
getUsersValidator,
};
Loading