MCPcopy Create free account
hub / github.com/RealDevSquad/website-backend / createTaskExtensionRequest

Function createTaskExtensionRequest

controllers/extensionRequests.js:18–98  ·  view source on GitHub ↗
(req, res)

Source from the content-addressed store, hash-verified

16 * @param res {Object} - Express response object
17 */
18const createTaskExtensionRequest = async (req, res) => {
19 try {
20 let extensionBody = req.body;
21
22 let assigneeUsername = await getUsernameElseUndefined(extensionBody.assignee);
23 let assigneeId = extensionBody.assignee;
24 if (!assigneeUsername) {
25 assigneeId = await getUserIdElseUndefined(extensionBody.assignee);
26 assigneeUsername = extensionBody.assignee;
27 extensionBody.assignee = assigneeId;
28 }
29
30 if (!assigneeId) {
31 return res.boom.badRequest("User Not Found");
32 }
33
34 if (req.userData.id !== extensionBody.assignee && !req.userData.roles?.super_user) {
35 return res.boom.forbidden("Only assigned user and super user can create an extension request for this task.");
36 }
37
38 const { taskData: task } = await tasks.fetchTask(extensionBody.taskId);
39 if (!task) {
40 return res.boom.badRequest("Task Not Found");
41 }
42 if (task.assignee !== assigneeUsername) {
43 return res.boom.badRequest("This task is assigned to some different user.");
44 }
45 if (task.endsOn >= extensionBody.newEndsOn) {
46 return res.boom.badRequest("New ETA must be greater than Old ETA");
47 }
48 if (extensionBody.oldEndsOn !== task.endsOn) {
49 extensionBody.oldEndsOn = task.endsOn;
50 }
51
52 const latestExtensionRequest = await extensionRequestsQuery.fetchLatestExtensionRequest({
53 taskId: extensionBody.taskId,
54 });
55
56 if (latestExtensionRequest && latestExtensionRequest.status === EXTENSION_REQUEST_STATUS.PENDING) {
57 return res.boom.badRequest("An extension request for this task already exists.");
58 }
59
60 let requestNumber;
61 if (latestExtensionRequest && latestExtensionRequest.assigneeId === assigneeId) {
62 if (latestExtensionRequest.requestNumber && latestExtensionRequest.requestNumber > 0) {
63 requestNumber = latestExtensionRequest.requestNumber + 1;
64 extensionBody = { ...extensionBody, requestNumber };
65 } else {
66 extensionBody = { ...extensionBody, requestNumber: 2 };
67 }
68 } else {
69 extensionBody = { ...extensionBody, requestNumber: 1 };
70 }
71
72 const extensionRequest = await extensionRequestsQuery.createExtensionRequest(extensionBody);
73 const extensionLog = {
74 type: "extensionRequests",
75 meta: {

Callers

nothing calls this directly

Calls 3

getUsernameElseUndefinedFunction · 0.85
getUserIdElseUndefinedFunction · 0.85
addLogFunction · 0.50

Tested by

no test coverage detected