Skip to content

Commit 6cdbf82

Browse files
authored
Merge pull request #2039 from Real-Dev-Squad/develop
Dev to main sync
2 parents 4116605 + 23c956e commit 6cdbf82

File tree

16 files changed

+422
-175
lines changed

16 files changed

+422
-175
lines changed

controllers/extensionRequestsv2.ts

Lines changed: 61 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
1-
import { getRequestByKeyValues } from "../models/requests";
2-
import { LOG_ACTION, REQUEST_LOG_TYPE, REQUEST_STATE, REQUEST_TYPE } from "../constants/requests";
1+
import { getRequestByKeyValues, updateRequest } from "../models/requests";
2+
import {
3+
ERROR_WHILE_CREATING_REQUEST,
4+
ERROR_WHILE_UPDATING_REQUEST,
5+
LOG_ACTION,
6+
REQUEST_APPROVED_SUCCESSFULLY,
7+
REQUEST_LOG_TYPE,
8+
REQUEST_REJECTED_SUCCESSFULLY,
9+
REQUEST_STATE,
10+
REQUEST_TYPE,
11+
} from "../constants/requests";
312
import { addLog } from "../models/logs";
413
import { createRequest } from "../models/requests";
514
import { fetchTask } from "../models/tasks";
@@ -52,15 +61,16 @@ export const createTaskExtensionRequest = async (req: ExtensionRequestRequest, r
5261

5362
const latestExtensionRequest: ExtensionRequest | undefined = await getRequestByKeyValues({
5463
taskId,
55-
state: REQUEST_STATE.PENDING,
5664
type: REQUEST_TYPE.EXTENSION,
5765
});
5866

5967
if (latestExtensionRequest && latestExtensionRequest.state === REQUEST_STATE.PENDING) {
6068
return res.boom.badRequest("An extension request for this task already exists.");
6169
}
62-
63-
let requestNumber: number = latestExtensionRequest?.requestedBy === requestedBy && latestExtensionRequest.requestNumber ? latestExtensionRequest.requestNumber + 1 : 1;
70+
const requestNumber: number =
71+
latestExtensionRequest?.requestedBy === requestedBy && latestExtensionRequest.requestNumber
72+
? latestExtensionRequest.requestNumber + 1
73+
: 1;
6474
extensionBody = { ...extensionBody, requestNumber };
6575

6676
const extensionRequest = await createRequest(extensionBody);
@@ -87,7 +97,51 @@ export const createTaskExtensionRequest = async (req: ExtensionRequestRequest, r
8797
extensionRequest: { ...extensionBody, id: extensionRequest.id },
8898
});
8999
} catch (err) {
90-
logger.error(`Error while creating new extension request: ${err}`);
91-
return res.boom.badImplementation('Internal Server Error');
100+
logger.error(ERROR_WHILE_CREATING_REQUEST, err);
101+
return res.boom.badImplementation(ERROR_WHILE_CREATING_REQUEST);
102+
}
103+
};
104+
105+
export const updateTaskExtensionRequest = async (req: any, res: any) => {
106+
const requestBody = req.body;
107+
const userId = req?.userData?.id;
108+
const requestId = req.params.id;
109+
110+
if (!userId) {
111+
return res.boom.unauthorized();
112+
}
113+
114+
try {
115+
const requestResult = await updateRequest(requestId, requestBody, userId,REQUEST_TYPE.EXTENSION)
116+
if ("error" in requestResult) {
117+
return res.boom.badRequest(requestResult.error);
118+
}
119+
const [logType, returnMessage] =
120+
requestResult.state === REQUEST_STATE.APPROVED
121+
? [REQUEST_LOG_TYPE.REQUEST_APPROVED, REQUEST_APPROVED_SUCCESSFULLY]
122+
: [REQUEST_LOG_TYPE.REQUEST_REJECTED, REQUEST_REJECTED_SUCCESSFULLY];
123+
124+
const requestLog = {
125+
type: logType,
126+
meta: {
127+
requestId: requestId,
128+
action: LOG_ACTION.UPDATE,
129+
createdBy: userId,
130+
createdAt: Date.now(),
131+
},
132+
body: requestResult,
133+
};
134+
await addLog(requestLog.type, requestLog.meta, requestLog.body);
135+
136+
return res.status(201).json({
137+
message: returnMessage,
138+
data: {
139+
id: requestResult.id,
140+
...requestResult,
141+
},
142+
});
143+
} catch (err) {
144+
logger.error(ERROR_WHILE_UPDATING_REQUEST, err);
145+
return res.boom.badImplementation(ERROR_WHILE_UPDATING_REQUEST);
92146
}
93147
};

controllers/oooRequests.ts

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,18 @@ import {
66
REQUEST_ALREADY_PENDING,
77
REQUEST_STATE,
88
REQUEST_TYPE,
9+
ERROR_WHILE_UPDATING_REQUEST,
10+
REQUEST_APPROVED_SUCCESSFULLY,
11+
REQUEST_REJECTED_SUCCESSFULLY,
912
} from "../constants/requests";
13+
import { statusState } from "../constants/userStatus";
1014
import { addLog } from "../models/logs";
11-
import { createRequest, getRequestByKeyValues } from "../models/requests";
15+
import { createRequest, getRequestByKeyValues, getRequests, updateRequest } from "../models/requests";
16+
import { createUserFutureStatus } from "../models/userFutureStatus";
17+
import { addFutureStatus } from "../models/userStatus";
1218
import { CustomResponse } from "../typeDefinitions/global";
1319
import { OooRequestCreateRequest, OooStatusRequest } from "../types/oooRequest";
20+
import { UpdateRequest } from "../types/requests";
1421

1522
export const createOooRequestController = async (req: OooRequestCreateRequest, res: CustomResponse) => {
1623
const requestBody = req.body;
@@ -53,3 +60,63 @@ export const createOooRequestController = async (req: OooRequestCreateRequest, r
5360
return res.boom.badImplementation(ERROR_WHILE_CREATING_REQUEST);
5461
}
5562
};
63+
64+
export const updateOooRequestController = async (req: UpdateRequest, res: CustomResponse) => {
65+
const requestBody = req.body;
66+
const userId = req?.userData?.id;
67+
const requestId = req.params.id;
68+
if (!userId) {
69+
return res.boom.unauthorized();
70+
}
71+
72+
try {
73+
const requestResult = await updateRequest(requestId, requestBody, userId, REQUEST_TYPE.OOO);
74+
if ("error" in requestResult) {
75+
return res.boom.badRequest(requestResult.error);
76+
}
77+
const [logType, returnMessage] =
78+
requestResult.state === REQUEST_STATE.APPROVED
79+
? [REQUEST_LOG_TYPE.REQUEST_APPROVED, REQUEST_APPROVED_SUCCESSFULLY]
80+
: [REQUEST_LOG_TYPE.REQUEST_REJECTED, REQUEST_REJECTED_SUCCESSFULLY];
81+
82+
const requestLog = {
83+
type: logType,
84+
meta: {
85+
requestId: requestId,
86+
action: LOG_ACTION.UPDATE,
87+
createdBy: userId,
88+
createdAt: Date.now(),
89+
},
90+
body: requestResult,
91+
};
92+
await addLog(requestLog.type, requestLog.meta, requestLog.body);
93+
if (requestResult.state === REQUEST_STATE.APPROVED) {
94+
const requestData = await getRequests({ id: requestId });
95+
96+
if (requestData) {
97+
const { from, until, requestedBy, message } = requestData as any;
98+
const userFutureStatusData = {
99+
requestId,
100+
status: REQUEST_TYPE.OOO,
101+
state: statusState.UPCOMING,
102+
from,
103+
endsOn: until,
104+
userId: requestedBy,
105+
message,
106+
};
107+
await createUserFutureStatus(userFutureStatusData);
108+
await addFutureStatus(userFutureStatusData);
109+
}
110+
}
111+
return res.status(201).json({
112+
message: returnMessage,
113+
data: {
114+
id: requestResult.id,
115+
...requestResult,
116+
},
117+
});
118+
} catch (err) {
119+
logger.error(ERROR_WHILE_UPDATING_REQUEST, err);
120+
return res.boom.badImplementation(ERROR_WHILE_UPDATING_REQUEST);
121+
}
122+
};

controllers/requests.ts

Lines changed: 15 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,21 @@
11
import {
22
ERROR_WHILE_FETCHING_REQUEST,
3-
ERROR_WHILE_UPDATING_REQUEST,
4-
REQUEST_REJECTED_SUCCESSFULLY,
5-
REQUEST_APPROVED_SUCCESSFULLY,
63
REQUEST_FETCHED_SUCCESSFULLY,
7-
REQUEST_STATE,
8-
LOG_ACTION,
9-
REQUEST_LOG_TYPE,
104
REQUEST_TYPE,
115
} from "../constants/requests";
12-
import { statusState } from "../constants/userStatus";
13-
import { addFutureStatus } from "../models/userStatus";
14-
import { createUserFutureStatus } from "../models/userFutureStatus";
15-
import { getRequests, updateRequest } from "../models/requests";
16-
import { addLog } from "../models/logs";
6+
import { getRequests } from "../models/requests";
177
import { getPaginatedLink } from "../utils/helper";
18-
import { createOooRequestController } from "./oooRequests";
8+
import { createOooRequestController, updateOooRequestController } from "./oooRequests";
199
import { OooRequestCreateRequest, OooRequestResponse } from "../types/oooRequest";
2010
import { CustomResponse } from "../typeDefinitions/global";
2111
import { ExtensionRequestRequest, ExtensionRequestResponse } from "../types/extensionRequests";
22-
import { createTaskExtensionRequest } from "./extensionRequestsv2";
12+
import { createTaskExtensionRequest, updateTaskExtensionRequest } from "./extensionRequestsv2";
13+
import { UpdateRequest } from "../types/requests";
2314

2415
export const createRequestController = async (
2516
req: OooRequestCreateRequest | ExtensionRequestRequest,
26-
res: CustomResponse) => {
27-
17+
res: CustomResponse
18+
) => {
2819
const type = req.body.type;
2920
switch (type) {
3021
case REQUEST_TYPE.OOO:
@@ -36,63 +27,15 @@ export const createRequestController = async (
3627
}
3728
};
3829

39-
export const updateRequestController = async (req: any, res: any) => {
40-
const requestBody = req.body;
41-
const userId = req?.userData?.id;
42-
const requestId = req.params.id;
43-
if (!userId) {
44-
return res.boom.unauthorized();
45-
}
46-
47-
try {
48-
const requestResult = await updateRequest(requestId, requestBody, userId);
49-
if ("error" in requestResult) {
50-
return res.boom.badRequest(requestResult.error);
51-
}
52-
const [logType, returnMessage] =
53-
requestResult.state === REQUEST_STATE.APPROVED
54-
? [REQUEST_LOG_TYPE.REQUEST_APPROVED, REQUEST_APPROVED_SUCCESSFULLY]
55-
: [REQUEST_LOG_TYPE.REQUEST_REJECTED, REQUEST_REJECTED_SUCCESSFULLY];
56-
57-
const requestLog = {
58-
type: logType,
59-
meta: {
60-
requestId: requestId,
61-
action: LOG_ACTION.UPDATE,
62-
createdBy: userId,
63-
createdAt: Date.now(),
64-
},
65-
body: requestResult,
66-
};
67-
await addLog(requestLog.type, requestLog.meta, requestLog.body);
68-
if (requestResult.state === REQUEST_STATE.APPROVED) {
69-
const requestData = await getRequests({ id: requestId });
70-
71-
if (requestData) {
72-
const { from, until, requestedBy, message } = requestData as any;
73-
const userFutureStatusData = {
74-
requestId,
75-
status: REQUEST_TYPE.OOO,
76-
state: statusState.UPCOMING,
77-
from,
78-
endsOn: until,
79-
userId: requestedBy,
80-
message,
81-
};
82-
await createUserFutureStatus(userFutureStatusData);
83-
await addFutureStatus(userFutureStatusData);
84-
}
85-
}
86-
return res.status(201).json({
87-
message: returnMessage,
88-
data: {
89-
id: requestResult.id,
90-
...requestResult,
91-
},
92-
});
93-
} catch (err) {
94-
logger.error(ERROR_WHILE_UPDATING_REQUEST, err);
95-
return res.boom.badImplementation(ERROR_WHILE_UPDATING_REQUEST);
30+
export const updateRequestController = async (req: UpdateRequest, res: CustomResponse) => {
31+
const type = req.body.type;
32+
switch (type) {
33+
case REQUEST_TYPE.OOO:
34+
return await updateOooRequestController(req as UpdateRequest, res as ExtensionRequestResponse);
35+
case REQUEST_TYPE.EXTENSION:
36+
return await updateTaskExtensionRequest(req as UpdateRequest, res as ExtensionRequestResponse);
37+
default:
38+
return res.boom.badRequest("Invalid request type");
9639
}
9740
};
9841

controllers/tasks.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,11 @@ const fetchPaginatedTasks = async (query) => {
134134

135135
const fetchTasks = async (req, res) => {
136136
try {
137-
const { dev, status, page, size, prev, next, q: queryString, assignee, title } = req.query;
137+
const { dev, status, page, size, prev, next, q: queryString, assignee, title, userFeatureFlag } = req.query;
138138
const transformedQuery = transformQuery(dev, status, size, page, assignee, title);
139139

140140
if (dev) {
141-
const paginatedTasks = await fetchPaginatedTasks({ ...transformedQuery, prev, next });
141+
const paginatedTasks = await fetchPaginatedTasks({ ...transformedQuery, prev, next, userFeatureFlag });
142142
return res.json({
143143
message: "Tasks returned successfully!",
144144
...paginatedTasks,

middlewares/validators/oooRequests.ts

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import joi from "joi";
22
import { NextFunction } from "express";
33
import { REQUEST_STATE, REQUEST_TYPE } from "../../constants/requests";
4-
import { OooRequestCreateRequest, OooRequestResponse,OooRequestUpdateRequest } from "../../types/oooRequest";
4+
import { OooRequestCreateRequest, OooRequestResponse } from "../../types/oooRequest";
55

66
export const createOooStatusRequestValidator = async (
77
req: OooRequestCreateRequest,
@@ -38,26 +38,3 @@ export const createOooStatusRequestValidator = async (
3838

3939
await schema.validateAsync(req.body, { abortEarly: false });
4040
};
41-
42-
43-
export const updateOooStatusRequestValidator = async (
44-
req: OooRequestUpdateRequest,
45-
46-
) => {
47-
const schema = joi
48-
.object()
49-
.strict()
50-
.keys({
51-
reason: joi.string().optional(),
52-
state: joi
53-
.string()
54-
.valid(REQUEST_STATE.APPROVED, REQUEST_STATE.REJECTED)
55-
.required()
56-
.messages({
57-
"any.only": "state must be APPROVED or REJECTED",
58-
}),
59-
type: joi.string().valid(REQUEST_TYPE.OOO).required(),
60-
});
61-
62-
await schema.validateAsync(req.body, { abortEarly: false });
63-
};

0 commit comments

Comments
 (0)