Skip to content

Commit

Permalink
refactor: overdue and extension requests APIs
Browse files Browse the repository at this point in the history
  • Loading branch information
ivinayakg committed Aug 12, 2023
1 parent 20bb7c2 commit 224b2c9
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 1 deletion.
69 changes: 69 additions & 0 deletions controllers/extensionRequests.js
Original file line number Diff line number Diff line change
Expand Up @@ -236,11 +236,80 @@ const updateExtensionRequestStatus = async (req, res) => {
}
};

/**
* Create ETA extension Request by Admin
*
* @param req {Object} - Express request object
* @param res {Object} - Express response object
*/
const createTaskExtensionRequestAdmin = async (req, res) => {
try {
const extensionBody = req.body;

if (!req.userData.roles?.super_user) {
return res.boom.forbidden("Only Super User can create an extension request for this task.");
}

const assigneeUsername = extensionBody.assignee;
const assigneeId = await getUserId(extensionBody.assignee);
extensionBody.assignee = assigneeId;
const { taskData: task } = await tasks.fetchTask(extensionBody.taskId);
if (!task) {
return res.boom.badRequest("Task with this id or taskid doesn't exist.");
}
if (task.endsOn >= extensionBody.newEndsOn) {
return res.boom.badRequest("The value for newEndsOn should be greater than the previous ETA");
}
if (extensionBody.oldEndsOn !== task.endsOn) {
extensionBody.oldEndsOn = task.endsOn;
}
if (task.assignee !== assigneeUsername) {
return res.boom.badRequest("This task is assigned to some different user");
}

const prevExtensionRequest = await extensionRequestsQuery.fetchExtensionRequests({
taskId: extensionBody.taskId,
assignee: extensionBody.assignee,
});
if (prevExtensionRequest.length) {
return res.boom.forbidden("An extension request for this task already exists.");
}

const extensionRequest = await extensionRequestsQuery.createExtensionRequest(extensionBody);

const extensionLog = {
type: "extensionRequests",
meta: {
taskId: extensionBody.taskId,
createdBy: req.userData.id,
},
body: {
extensionRequestId: extensionRequest.id,
oldEndsOn: task.endsOn,
newEndsOn: extensionBody.newEndsOn,
assignee: extensionBody.assignee,
status: EXTENSION_REQUEST_STATUS.PENDING,
},
};

await addLog(extensionLog.type, extensionLog.meta, extensionLog.body);

return res.json({
message: "Extension Request created successfully!",
extensionRequest: { ...extensionBody, id: extensionRequest.id },
});
} catch (err) {
logger.error(`Error while creating new extension request: ${err}`);
return res.boom.badImplementation(INTERNAL_SERVER_ERROR);
}
};

module.exports = {
createTaskExtensionRequest,
fetchExtensionRequests,
getExtensionRequest,
getSelfExtensionRequests,
updateExtensionRequest,
updateExtensionRequestStatus,
createTaskExtensionRequestAdmin,
};
4 changes: 3 additions & 1 deletion controllers/tasks.js
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,9 @@ const currentOverdueTasks = async (req, res) => {
try {
const overdueTasks = await tasks.getAllOverDueTasks();
const overdueTasksStatus = [MERGED, COMPLETED, RELEASED, VERIFIED, AVAILABLE];
const overdueTasksFiltered = overdueTasks.filter((task) => !overdueTasksStatus.includes(task.status));
const overdueTasksFiltered = overdueTasks.filter(
(task) => !overdueTasksStatus.includes(task.status) && task.assignee
);
return res.json({
message: "Overdue Tasks returned successfully!",
overdueTasks: overdueTasksFiltered,
Expand Down
7 changes: 7 additions & 0 deletions routes/extensionRequests.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,13 @@ const {
} = require("../middlewares/validators/extensionRequests");

router.post("/", authenticate, createExtensionRequest, extensionRequests.createTaskExtensionRequest);
router.post(
"/admin",
authenticate,
authorizeRoles([SUPERUSER]),
createExtensionRequest,
extensionRequests.createTaskExtensionRequestAdmin
);
router.get("/", authenticate, authorizeRoles([SUPERUSER, APPOWNER]), extensionRequests.fetchExtensionRequests);
router.get("/self", authenticate, extensionRequests.getSelfExtensionRequests);
router.get("/:id", authenticate, authorizeRoles([SUPERUSER, APPOWNER]), extensionRequests.getExtensionRequest);
Expand Down

0 comments on commit 224b2c9

Please sign in to comment.