Skip to content

Commit 3126e86

Browse files
Merge pull request #1744 from Real-Dev-Squad/develop
Dev to Main sync
2 parents 9db5177 + 579404c commit 3126e86

21 files changed

+945
-271
lines changed

config/custom-environment-variables.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@ module.exports = {
7373
botPublicKey: "BOT_PUBLIC_KEY",
7474
},
7575

76+
cronJobHandler: {
77+
publicKey: "CRON_JOB_PUBLIC_KEY",
78+
},
79+
7680
rdsServerlessBot: {
7781
rdsServerLessPrivateKey: "RDS_SERVERLESS_PRIVATE_KEY",
7882
ttl: "RDS_SERVERLESS_TTL",

config/default.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,7 @@ module.exports = {
4848
authRedirection: "/goto",
4949
},
5050
goalAPI: {
51-
baseUrl: "https://goal-api.realdevsquad.com",
52-
secretKey: "<goalSecretKey>",
51+
baseUrl: "https://goals-api.realdevsquad.com",
5352
cookieName: `goals-session-${NODE_ENV}`,
5453
},
5554
},

config/development.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ module.exports = {
2424
},
2525

2626
goalAPI: {
27-
baseUrl: "https://backend-goals-production.up.railway.app",
27+
baseUrl: "https://staging-goals-api.realdevsquad.com",
2828
secretKey: "123456789",
2929
},
3030
},

config/production.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,10 @@ module.exports = {
99
userToken: {
1010
cookieName: "rds-session",
1111
},
12+
13+
services: {
14+
goalAPI: {
15+
baseUrl: "https://goals-api.realdevsquad.com",
16+
},
17+
},
1218
};

config/staging.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ module.exports = {
1818
baseUrl: "https://staging-api.realdevsquad.com",
1919
},
2020
goalAPI: {
21-
baseUrl: "https://backend-goals-production.up.railway.app",
21+
baseUrl: "https://staging-goals-api.realdevsquad.com",
2222
secretKey: "123456789",
2323
},
2424
},

constants/taskRequests.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ const TASK_REQUEST_STATUS = {
44
PENDING: "PENDING",
55
DENIED: "DENIED",
66
};
7+
8+
const TASK_REQUEST_ACTIONS = {
9+
APPROVE: "approve",
10+
REJECT: "reject",
11+
};
712
const TASK_REQUEST_ERROR_MESSAGE = {
813
INVALID_PREV: "Invalid 'prev' value",
914
INVALID_NEXT: "Invalid 'next' value",
@@ -34,6 +39,7 @@ const TASK_REQUEST_SORT_VALUES = {
3439
const MIGRATION_TYPE = {
3540
ADD_NEW_FIELDS: "add-new-fields",
3641
REMOVE_OLD_FIELDS: "remove-redundant-fields",
42+
ADD_COUNT_CREATED: "add-count-created-time"
3743
};
3844

3945
module.exports = {
@@ -44,5 +50,6 @@ module.exports = {
4450
TASK_REQUEST_SORT_KEYS,
4551
TASK_REQUEST_ERROR_MESSAGE,
4652
TASK_REQUEST_SORT_VALUES,
47-
MIGRATION_TYPE
48-
};
53+
MIGRATION_TYPE,
54+
TASK_REQUEST_ACTIONS,
55+
};

controllers/cloudflareCache.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,21 +81,21 @@ const fetchPurgedCacheMetadata = async (req, res) => {
8181
const { timestamp } = latestCacheMetadata;
8282
return res.json({
8383
message: "Purged cache metadata returned successfully!",
84-
count: logs.length,
84+
remainingCount: MAX_CACHE_PURGE_COUNT - logs.length,
8585
timeLastCleared: timestamp._seconds,
8686
});
8787
} else if ((await logsQuery.fetchLastAddedCacheLog(id)).length !== 0) {
8888
const lastLog = await logsQuery.fetchLastAddedCacheLog(id);
8989
const { timestamp } = lastLog[0];
9090
return res.json({
9191
message: "Purged cache metadata returned successfully!",
92-
count: 0,
92+
remainingCount: MAX_CACHE_PURGE_COUNT,
9393
timeLastCleared: timestamp._seconds,
9494
});
9595
} else {
9696
return res.json({
9797
message: "No cache is cleared yet",
98-
count: 0,
98+
remainingCount: MAX_CACHE_PURGE_COUNT,
9999
});
100100
}
101101
} catch (error) {

controllers/discordactions.js

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ const config = require("config");
44
const jwt = require("jsonwebtoken");
55
const discordRolesModel = require("../models/discordactions");
66
const discordServices = require("../services/discordService");
7-
const { fetchAllUsers } = require("../models/users");
7+
const { fetchAllUsers, fetchUser } = require("../models/users");
88
const discordDeveloperRoleId = config.get("discordDeveloperRoleId");
99
const discordMavenRoleId = config.get("discordMavenRoleId");
1010

@@ -23,9 +23,9 @@ const createGroupRole = async (req, res) => {
2323
try {
2424
const rolename = `group-${req.body.rolename}`;
2525

26-
const { wasSuccess } = await discordRolesModel.isGroupRoleExists(rolename);
26+
const { roleExists } = await discordRolesModel.isGroupRoleExists({ rolename });
2727

28-
if (!wasSuccess) {
28+
if (roleExists) {
2929
return res.status(400).json({
3030
message: "Role already exists!",
3131
});
@@ -109,6 +109,15 @@ const addGroupRoleToMember = async (req, res) => {
109109
...req.body,
110110
date: admin.firestore.Timestamp.fromDate(new Date()),
111111
};
112+
const roleExistsPromise = discordRolesModel.isGroupRoleExists({
113+
roleid: memberGroupRole.roleid,
114+
});
115+
const userDataPromise = fetchUser({ discordId: memberGroupRole.userid });
116+
const [{ roleExists }, userData] = await Promise.all([roleExistsPromise, userDataPromise]);
117+
118+
if (!roleExists || req.userData.id !== userData.user.id) {
119+
res.boom.forbidden("Permission denied. Cannot add the role.");
120+
}
112121

113122
const { roleData, wasSuccess } = await discordRolesModel.addGroupRoleToMember(memberGroupRole);
114123

@@ -146,6 +155,17 @@ const addGroupRoleToMember = async (req, res) => {
146155
const deleteRole = async (req, res) => {
147156
try {
148157
const { roleid, userid } = req.body;
158+
159+
const roleExistsPromise = discordRolesModel.isGroupRoleExists({
160+
roleid,
161+
});
162+
const userDataPromise = fetchUser({ discordId: userid });
163+
const [{ roleExists }, userData] = await Promise.all([roleExistsPromise, userDataPromise]);
164+
165+
if (!roleExists || req.userData.id !== userData.user.id) {
166+
res.boom.forbidden("Permission denied. Cannot delete the role.");
167+
}
168+
149169
const { wasSuccess } = await discordRolesModel.removeMemberGroup(roleid, userid);
150170
if (wasSuccess) {
151171
return res.status(200).json({ message: "Role deleted successfully" });

controllers/tasksRequests.js

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
const { INTERNAL_SERVER_ERROR, SOMETHING_WENT_WRONG } = require("../constants/errorMessages");
2-
const { TASK_REQUEST_TYPE, MIGRATION_TYPE } = require("../constants/taskRequests");
2+
const { TASK_REQUEST_TYPE, MIGRATION_TYPE, TASK_REQUEST_ACTIONS } = require("../constants/taskRequests");
33
const { addLog } = require("../models/logs");
44
const taskRequestsModel = require("../models/taskRequests");
55
const tasksModel = require("../models/tasks.js");
@@ -97,7 +97,7 @@ const addTaskRequests = async (req, res) => {
9797
break;
9898
}
9999
}
100-
const newTaskRequest = await taskRequestsModel.createRequest(taskRequestData, req.userData.username);
100+
const newTaskRequest = await taskRequestsModel.createRequest(taskRequestData, req.userData.id);
101101

102102
if (newTaskRequest.isCreationRequestApproved) {
103103
return res.boom.conflict("Task exists for the given issue.");
@@ -111,9 +111,9 @@ const addTaskRequests = async (req, res) => {
111111
meta: {
112112
taskRequestId: newTaskRequest.id,
113113
action: "create",
114-
createdBy: req.userData.username,
114+
createdBy: req.userData.id,
115115
createdAt: Date.now(),
116-
lastModifiedBy: req.userData.username,
116+
lastModifiedBy: req.userData.id,
117117
lastModifiedAt: Date.now(),
118118
},
119119
body: newTaskRequest.taskRequest,
@@ -169,45 +169,62 @@ const addOrUpdate = async (req, res) => {
169169
}
170170
};
171171

172-
const approveTaskRequest = async (req, res) => {
172+
const updateTaskRequests = async (req, res) => {
173173
try {
174174
const { taskRequestId, user } = req.body;
175175
if (!taskRequestId) {
176176
return res.boom.badRequest("taskRequestId not provided");
177177
}
178178

179-
const response = await taskRequestsModel.approveTaskRequest(taskRequestId, user);
179+
const { action = TASK_REQUEST_ACTIONS.APPROVE } = req.query;
180180

181-
if (response.taskRequestNotFound) {
181+
let updateTaskRequestResponse = {};
182+
switch (action) {
183+
case TASK_REQUEST_ACTIONS.APPROVE: {
184+
updateTaskRequestResponse = await taskRequestsModel.approveTaskRequest(taskRequestId, user, req.userData.id);
185+
break;
186+
}
187+
case TASK_REQUEST_ACTIONS.REJECT: {
188+
updateTaskRequestResponse = await taskRequestsModel.rejectTaskRequest(taskRequestId, req.userData.id);
189+
break;
190+
}
191+
default: {
192+
return res.boom.badRequest("Unknown action");
193+
}
194+
}
195+
196+
if (updateTaskRequestResponse.taskRequestNotFound) {
182197
return res.boom.badRequest("Task request not found.");
183198
}
184-
if (response.isUserInvalid) {
199+
if (updateTaskRequestResponse.isUserInvalid) {
185200
return res.boom.badRequest("User request not available.");
186201
}
187-
if (response.isTaskRequestInvalid) {
202+
if (updateTaskRequestResponse.isTaskRequestInvalid) {
188203
return res.boom.badRequest("Task request was previously approved or rejected.");
189204
}
190205

191-
await updateUserStatusOnTaskUpdate(user.username);
206+
if (action && action === TASK_REQUEST_ACTIONS.APPROVE) {
207+
await updateUserStatusOnTaskUpdate(user.username);
208+
}
192209

193210
const taskRequestLog = {
194211
type: "taskRequests",
195212
meta: {
196213
taskRequestId: taskRequestId,
197214
action: "update",
198-
subAction: "approve",
199-
createdBy: req.userData.username,
215+
subAction: action,
216+
createdBy: req.userData.id,
200217
createdAt: Date.now(),
201-
lastModifiedBy: req.userData.username,
218+
lastModifiedBy: req.userData.id,
202219
lastModifiedAt: Date.now(),
203220
},
204-
body: response.taskRequest,
221+
body: updateTaskRequestResponse.taskRequest,
205222
};
206223
await addLog(taskRequestLog.type, taskRequestLog.meta, taskRequestLog.body);
207224

208225
return res.status(200).json({
209-
message: `Task successfully assigned to user ${response.approvedTo}`,
210-
taskRequest: response.taskRequest,
226+
message: `Task updated successfully.`,
227+
taskRequest: updateTaskRequestResponse?.taskRequest,
211228
});
212229
} catch (err) {
213230
logger.error("Error while approving task request", err);
@@ -228,6 +245,10 @@ const migrateTaskRequests = async (req, res) => {
228245
responseData = await taskRequestsModel.removeOldField();
229246
break;
230247
}
248+
case MIGRATION_TYPE.ADD_COUNT_CREATED: {
249+
responseData = await taskRequestsModel.addUsersCountAndCreatedAt();
250+
break;
251+
}
231252
default: {
232253
return res.boom.badRequest("Unknown action");
233254
}
@@ -239,7 +260,7 @@ const migrateTaskRequests = async (req, res) => {
239260
}
240261
};
241262
module.exports = {
242-
approveTaskRequest,
263+
updateTaskRequests,
243264
addOrUpdate,
244265
fetchTaskRequests,
245266
fetchTaskRequestById,

middlewares/taskRequests.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
const { SOMETHING_WENT_WRONG } = require("../constants/errorMessages");
22
const dataAccess = require("../services/dataAccessLayer");
3+
const { TASK_REQUEST_ACTIONS } = require("../constants/taskRequests");
34
/**
45
* Validates user id for task request
56
*
67
* @param userId { string }: user id of the user
78
*/
89
async function validateUser(req, res, next) {
910
try {
11+
const { action } = req.query;
12+
if (action === TASK_REQUEST_ACTIONS.REJECT) {
13+
return next();
14+
}
1015
const { userId } = req.body;
1116

1217
if (!userId) {

0 commit comments

Comments
 (0)