Skip to content

Commit 75e297a

Browse files
Prakhar-FF13pankajjs
authored andcommitted
Moving refactored mini functions from utils to controllers folder
Signed-off-by: Prakhar Kumar <[email protected]>
1 parent 263274d commit 75e297a

File tree

2 files changed

+154
-162
lines changed

2 files changed

+154
-162
lines changed

controllers/users.js

Lines changed: 154 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
import { isLastPRMergedWithinDays } from "../services/githubService";
2+
import { getUserStatus } from "../models/userStatus";
3+
import userService from "../services/users";
4+
import { getOverdueTasks } from "../models/tasks";
5+
16
const chaincodeQuery = require("../models/chaincodes");
27
const userQuery = require("../models/users");
38
const profileDiffsQuery = require("../models/profileDiffs");
@@ -23,7 +28,6 @@ const { getQualifiers } = require("../utils/helper");
2328
const { parseSearchQuery } = require("../utils/users");
2429
const { getFilteredPRsOrIssues } = require("../utils/pullRequests");
2530
const { getFilteredPaginationLink } = require("../utils/userStatus");
26-
const userUtils = require("../utils/users");
2731
const {
2832
USERS_PATCH_HANDLER_ACTIONS,
2933
USERS_PATCH_HANDLER_ERROR_MESSAGES,
@@ -106,23 +110,23 @@ const getUsers = async (req, res) => {
106110

107111
try {
108112
if (id) {
109-
const user = await userUtils.findUserById(id);
113+
const user = await findUserById(id);
110114
return res.json({
111115
message: "User returned successfully!",
112116
user: user,
113117
});
114118
}
115119

116120
if (profile) {
117-
return res.send(await userUtils.getUserByProfileData(userData));
121+
return res.send(await getUserByProfileData(userData));
118122
}
119123

120124
if (!transformedQuery?.days && transformedQuery?.filterBy === "unmerged_prs") {
121125
return res.boom.badRequest(`Days is required for filterBy ${transformedQuery?.filterBy}`);
122126
}
123127

124128
if (filterBy === "unmerged_prs" && days) {
125-
const users = await userUtils.getUsersByUnmergedPrs(days);
129+
const users = await getUsersByUnmergedPrs(days);
126130
return res.json({
127131
message: "Inactive users returned successfully!",
128132
count: users.length,
@@ -132,7 +136,7 @@ const getUsers = async (req, res) => {
132136

133137
if (discordId) {
134138
if (dev) {
135-
const user = await userUtils.getUserByDiscordId(discordId);
139+
const user = await getUserByDiscordId(discordId);
136140
return res.json({
137141
message: user ? "User returned successfully!" : "User not found",
138142
user: user,
@@ -146,7 +150,7 @@ const getUsers = async (req, res) => {
146150
if (!dev) {
147151
return res.boom.notFound("Route not found");
148152
}
149-
const { result, departedUsers } = await userUtils.getDepartedUsers(reqQueryObject);
153+
const { result, departedUsers } = await getDepartedUsers(reqQueryObject);
150154
if (departedUsers.length === 0) return res.status(204).send();
151155
return res.json({
152156
message: "Users with abandoned tasks fetched successfully",
@@ -159,7 +163,7 @@ const getUsers = async (req, res) => {
159163
}
160164

161165
if (filterBy === OVERDUE_TASKS) {
162-
const users = await userUtils.getUsersByOverDueTasks(days, dev);
166+
const users = await getUsersByOverDueTasks(days, dev);
163167
if (!users || users.length === 0) {
164168
return res.json({
165169
message: "No users found",
@@ -1038,6 +1042,149 @@ const updateProfile = async (req, res) => {
10381042
}
10391043
};
10401044

1045+
/**
1046+
* @param userId { string }: Id of the User
1047+
* @returns Promise<object>
1048+
*/
1049+
const findUserById = async (userId) => {
1050+
let result;
1051+
try {
1052+
result = await dataAccess.retrieveUsers({ id: userId });
1053+
if (!result.userExists) {
1054+
throw NotFound("User doesn't exist");
1055+
}
1056+
return result.user;
1057+
} catch (error) {
1058+
logger.error(`Error while fetching user: ${error}`);
1059+
throw error;
1060+
}
1061+
};
1062+
1063+
/**
1064+
* @param userData { Object }: req.userData
1065+
* @returns Promise<object>
1066+
*/
1067+
const getUserByProfileData = async (userData) => {
1068+
if (!userData.id) {
1069+
throw BadRequest("User ID not provided.");
1070+
}
1071+
1072+
try {
1073+
const result = await dataAccess.retrieveUsers({ id: userData.id });
1074+
return result.user;
1075+
} catch (error) {
1076+
logger.error(`Error while fetching user: ${error}`);
1077+
throw error;
1078+
}
1079+
};
1080+
1081+
/**
1082+
* @param days {number}: days since last unmerged pr.
1083+
* @returns Promise<object[]>
1084+
*/
1085+
const getUsersByUnmergedPrs = async (days) => {
1086+
try {
1087+
const inDiscordUser = await dataAccess.retrieveUsersWithRole(ROLES.INDISCORD);
1088+
const users = [];
1089+
1090+
for (const user of inDiscordUser) {
1091+
const username = user.github_id;
1092+
const isMerged = await isLastPRMergedWithinDays(username, days);
1093+
if (!isMerged) {
1094+
users.push(user.id);
1095+
}
1096+
}
1097+
1098+
return users;
1099+
} catch (error) {
1100+
logger.error(`Error while fetching all users: ${error}`);
1101+
throw error;
1102+
}
1103+
};
1104+
1105+
/**
1106+
* @param discordId { string }: discordId of the user
1107+
* @returns Promise<object>
1108+
*/
1109+
const getUserByDiscordId = async (discordId) => {
1110+
let result, user;
1111+
try {
1112+
result = await dataAccess.retrieveUsers({ discordId });
1113+
user = result.user;
1114+
if (!result.userExists) {
1115+
return null;
1116+
}
1117+
1118+
const userStatusResult = await getUserStatus(user.id);
1119+
if (userStatusResult.userStatusExists) {
1120+
user.state = userStatusResult.data.currentStatus.state;
1121+
}
1122+
} catch (error) {
1123+
logger.error(`Error while fetching user: ${error}`);
1124+
throw error;
1125+
}
1126+
return user;
1127+
};
1128+
1129+
/**
1130+
* @param queryObject { Object }: request query object
1131+
* @returns Promise<object>
1132+
*/
1133+
const getDepartedUsers = async (queryObject) => {
1134+
try {
1135+
const result = await dataAccess.retrieveUsers({ query: queryObject });
1136+
const departedUsers = await userService.getUsersWithIncompleteTasks(result.users);
1137+
if (!departedUsers || departedUsers.length === 0) return { departedUsers: [] };
1138+
return { result, departedUsers };
1139+
} catch (error) {
1140+
logger.error("Error when fetching users who abandoned tasks:", error);
1141+
throw error;
1142+
}
1143+
};
1144+
1145+
/**
1146+
* @param days { number }: overdue days
1147+
* @param dev {boolean}: dev feature flag
1148+
* @returns Promise<object[]>
1149+
*/
1150+
const getUsersByOverDueTasks = async (days, dev) => {
1151+
try {
1152+
const tasksData = await getOverdueTasks(days);
1153+
if (!tasksData.length) {
1154+
return [];
1155+
}
1156+
const userIds = new Set();
1157+
const usersData = [];
1158+
1159+
tasksData.forEach((task) => {
1160+
if (task.assignee) {
1161+
userIds.add(task.assignee);
1162+
}
1163+
});
1164+
1165+
const userInfo = await dataAccess.retrieveUsers({ userIds: Array.from(userIds) });
1166+
userInfo.forEach((user) => {
1167+
if (!user.roles.archived) {
1168+
const userTasks = tasksData.filter((task) => task.assignee === user.id);
1169+
const userData = {
1170+
id: user.id,
1171+
discordId: user.discordId,
1172+
username: user.username,
1173+
};
1174+
if (dev) {
1175+
userData.tasks = userTasks;
1176+
}
1177+
usersData.push(userData);
1178+
}
1179+
});
1180+
1181+
return usersData;
1182+
} catch (error) {
1183+
logger.error(`Error while fetching users and tasks: ${error}`);
1184+
throw error;
1185+
}
1186+
};
1187+
10411188
module.exports = {
10421189
verifyUser,
10431190
generateChaincode,

utils/users.js

Lines changed: 0 additions & 155 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,10 @@ const { months, discordNicknameLength } = require("../constants/users");
44
const dataAccessLayer = require("../services/dataAccessLayer");
55
const discordService = require("../services/discordService");
66
const ROLES = require("../constants/roles");
7-
const dataAccess = require("../services/dataAccessLayer");
87
const logger = require("./logger");
98
const addUserToDBForTest = async (userData) => {
109
await userModel.add(userData);
1110
};
12-
const { NotFound, BadRequest } = require("http-errors");
13-
const { isLastPRMergedWithinDays } = require("../services/githubService");
14-
const { getUserStatus } = require("../models/userStatus");
15-
const userService = require("../services/users");
16-
const { getOverdueTasks } = require("../models/tasks");
1711
/**
1812
* Used for receiving userId when providing username
1913
*
@@ -297,149 +291,6 @@ const updateNickname = async (userId, status = {}) => {
297291
}
298292
};
299293

300-
/**
301-
* @param userId { string }: Id of the User
302-
* @returns Promise<object>
303-
*/
304-
const findUserById = async (userId) => {
305-
let result;
306-
try {
307-
result = await dataAccess.retrieveUsers({ id: userId });
308-
if (!result.userExists) {
309-
throw NotFound("User doesn't exist");
310-
}
311-
return result.user;
312-
} catch (error) {
313-
logger.error(`Error while fetching user: ${error}`);
314-
throw error;
315-
}
316-
};
317-
318-
/**
319-
* @param userData { Object }: req.userData
320-
* @returns Promise<object>
321-
*/
322-
const getUserByProfileData = async (userData) => {
323-
if (!userData.id) {
324-
throw BadRequest("User ID not provided.");
325-
}
326-
327-
try {
328-
const result = await dataAccess.retrieveUsers({ id: userData.id });
329-
return result.user;
330-
} catch (error) {
331-
logger.error(`Error while fetching user: ${error}`);
332-
throw error;
333-
}
334-
};
335-
336-
/**
337-
* @param days {number}: days since last unmerged pr.
338-
* @returns Promise<object[]>
339-
*/
340-
const getUsersByUnmergedPrs = async (days) => {
341-
try {
342-
const inDiscordUser = await dataAccess.retrieveUsersWithRole(ROLES.INDISCORD);
343-
const users = [];
344-
345-
for (const user of inDiscordUser) {
346-
const username = user.github_id;
347-
const isMerged = await isLastPRMergedWithinDays(username, days);
348-
if (!isMerged) {
349-
users.push(user.id);
350-
}
351-
}
352-
353-
return users;
354-
} catch (error) {
355-
logger.error(`Error while fetching all users: ${error}`);
356-
throw error;
357-
}
358-
};
359-
360-
/**
361-
* @param discordId { string }: discordId of the user
362-
* @returns Promise<object>
363-
*/
364-
const getUserByDiscordId = async (discordId) => {
365-
let result, user;
366-
try {
367-
result = await dataAccess.retrieveUsers({ discordId });
368-
user = result.user;
369-
if (!result.userExists) {
370-
return null;
371-
}
372-
373-
const userStatusResult = await getUserStatus(user.id);
374-
if (userStatusResult.userStatusExists) {
375-
user.state = userStatusResult.data.currentStatus.state;
376-
}
377-
} catch (error) {
378-
logger.error(`Error while fetching user: ${error}`);
379-
throw error;
380-
}
381-
return user;
382-
};
383-
384-
/**
385-
* @param queryObject { Object }: request query object
386-
* @returns Promise<object>
387-
*/
388-
const getDepartedUsers = async (queryObject) => {
389-
try {
390-
const result = await dataAccess.retrieveUsers({ query: queryObject });
391-
const departedUsers = await userService.getUsersWithIncompleteTasks(result.users);
392-
if (departedUsers.length === 0) return [];
393-
return { result, departedUsers };
394-
} catch (error) {
395-
logger.error("Error when fetching users who abandoned tasks:", error);
396-
throw error;
397-
}
398-
};
399-
400-
/**
401-
* @param days { number }: overdue days
402-
* @param dev {boolean}: dev feature flag
403-
* @returns Promise<object[]>
404-
*/
405-
const getUsersByOverDueTasks = async (days, dev) => {
406-
try {
407-
const tasksData = await getOverdueTasks(days);
408-
if (!tasksData.length) {
409-
return [];
410-
}
411-
const userIds = new Set();
412-
const usersData = [];
413-
414-
tasksData.forEach((task) => {
415-
if (task.assignee) {
416-
userIds.add(task.assignee);
417-
}
418-
});
419-
420-
const userInfo = await dataAccess.retrieveUsers({ userIds: Array.from(userIds) });
421-
userInfo.forEach((user) => {
422-
if (!user.roles.archived) {
423-
const userTasks = tasksData.filter((task) => task.assignee === user.id);
424-
const userData = {
425-
id: user.id,
426-
discordId: user.discordId,
427-
username: user.username,
428-
};
429-
if (dev) {
430-
userData.tasks = userTasks;
431-
}
432-
usersData.push(userData);
433-
}
434-
});
435-
436-
return usersData;
437-
} catch (error) {
438-
logger.error(`Error while fetching users and tasks: ${error}`);
439-
throw error;
440-
}
441-
};
442-
443294
module.exports = {
444295
addUserToDBForTest,
445296
getUserId,
@@ -456,10 +307,4 @@ module.exports = {
456307
parseSearchQuery,
457308
generateOOONickname,
458309
updateNickname,
459-
findUserById,
460-
getUserByProfileData,
461-
getUsersByUnmergedPrs,
462-
getUserByDiscordId,
463-
getDepartedUsers,
464-
getUsersByOverDueTasks,
465310
};

0 commit comments

Comments
 (0)