Skip to content

Commit 088b2e9

Browse files
committed
sync API
1 parent b3d0560 commit 088b2e9

File tree

4 files changed

+108
-18
lines changed

4 files changed

+108
-18
lines changed

controllers/users.js

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ const logsQuery = require("../models/logs");
55
const imageService = require("../services/imageService");
66
const { profileDiffStatus } = require("../constants/profileDiff");
77
const { logType } = require("../constants/logs");
8-
const { fetch } = require("../utils/fetch");
8+
99
const logger = require("../utils/logger");
1010
const obfuscate = require("../utils/obfuscate");
11-
const { getPaginationLink, getUsernamesFromPRs } = require("../utils/users");
11+
const { getPaginationLink, getUsernamesFromPRs, mapDiscordMembersDataAndSyncRole } = require("../utils/users");
1212
const { getQualifiers } = require("../utils/helper");
1313
const { SOMETHING_WENT_WRONG, INTERNAL_SERVER_ERROR } = require("../constants/errorMessages");
1414
const { getFilteredPRsOrIssues } = require("../utils/pullRequests");
1515
const { IN_DISCORD } = require("../constants/roles");
16+
const jwt = require("jsonwebtoken");
1617

1718
const verifyUser = async (req, res) => {
1819
const userId = req.userData.id;
@@ -25,7 +26,11 @@ const verifyUser = async (req, res) => {
2526
logger.error(`Error while verifying user: ${error}`);
2627
return res.boom.serverUnavailable(SOMETHING_WENT_WRONG);
2728
}
28-
fetch(process.env.IDENTITY_SERVICE_URL, "POST", null, { userId }, { "Content-Type": "application/json" });
29+
fetch(process.env.IDENTITY_SERVICE_URL, {
30+
method: "POST",
31+
body: { userId },
32+
headers: { "Content-Type": "application/json" },
33+
});
2934
return res.json({
3035
message: "Your request has been queued successfully",
3136
});
@@ -108,7 +113,6 @@ const getUsers = async (req, res) => {
108113
*/
109114

110115
const getUser = async (req, res) => {
111-
console.log(req.params.username);
112116
try {
113117
const result = await userQuery.fetchUser({ username: req.params.username });
114118
const { phone, email, ...user } = result.user;
@@ -463,23 +467,49 @@ const filterUsers = async (req, res) => {
463467
return res.boom.serverUnavailable("Something went wrong please contact admin");
464468
}
465469
};
470+
const DISCORD_BASE_URL = "https://89d4-49-36-233-201.ngrok.io";
471+
const syncInDiscordRole = async (req, res) => {
472+
try {
473+
const authToken = jwt.sign({}, config.get("botToken.botPrivateKey"), {
474+
algorithm: "RS256",
475+
});
476+
// console.log(authToken);
477+
const response = await fetch(`${DISCORD_BASE_URL}/discord-members`, {
478+
headers: {
479+
"Content-Type": "application/json",
480+
Authorization: `Bearer ${authToken}`,
481+
},
482+
});
483+
const discordMembers = await response.json();
466484

467-
// const syncInDiscordRole = async (req, res) => {
468-
// try {
469-
// } catch (error) {
470-
// logger.error(`Error while fetching all users: ${error}`);
471-
// return res.boom.serverUnavailable("Something went wrong please contact admin");
472-
// }
473-
// };
485+
const allUsers = await userQuery.getAllUsers();
486+
mapDiscordMembersDataAndSyncRole(allUsers, discordMembers);
487+
488+
return res.json({ message: "Synced with discord members " });
489+
} catch (error) {
490+
logger.error(`Error while fetching all users: ${error}`);
491+
return res.boom.serverUnavailable("Something went wrong please contact admin");
492+
}
493+
};
494+
495+
const fetchVerifiedUsers = async (req, res) => {
496+
try {
497+
const verifiedUsers = await userQuery.fetchUsersWhereFieldNotNull("discordId");
498+
return res.json(verifiedUsers);
499+
} catch (error) {
500+
logger.error(`Error while fetching all users: ${error}`);
501+
return res.boom.serverUnavailable("Something went wrong please contact admin");
502+
}
503+
};
474504

475505
const fetchInDiscordUsers = async (req, res) => {
476506
try {
477-
const allUsers = await userQuery.fetchUsersWithRole(IN_DISCORD);
507+
const usersInDiscord = await userQuery.fetchUsersWithRole(IN_DISCORD);
478508

479509
return res.json({
480510
message: "Users found successfully!",
481-
users: allUsers,
482-
count: allUsers.length,
511+
users: usersInDiscord,
512+
count: usersInDiscord.length,
483513
});
484514
} catch (error) {
485515
logger.error(`Error while fetching all users: ${error}`);
@@ -507,4 +537,6 @@ module.exports = {
507537
getUserSkills,
508538
filterUsers,
509539
fetchInDiscordUsers,
540+
syncInDiscordRole,
541+
fetchVerifiedUsers,
510542
};

models/users.js

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,15 @@ const getUsersBasedOnFilter = async (query) => {
408408
const userDocs = (await firestore.getAll(...userRefs)).map((doc) => ({ id: doc.id, ...doc.data() }));
409409
return userDocs;
410410
};
411-
411+
const getAllUsers = async () => {
412+
try {
413+
const usersRef = await userModel.get();
414+
return usersRef;
415+
} catch (err) {
416+
logger.error("Error retrieving users data with roles of inDiscord", err);
417+
throw err;
418+
}
419+
};
412420
const fetchUsersWithRole = async (role) => {
413421
try {
414422
// console.log(role);
@@ -426,12 +434,36 @@ const fetchUsersWithRole = async (role) => {
426434
});
427435
});
428436
}
437+
429438
return onlyMembers;
430439
} catch (err) {
431440
logger.error("Error retrieving users data with roles of inDiscord", err);
432441
throw err;
433442
}
434443
};
444+
const fetchUsersWhereFieldNotNull = async (field) => {
445+
try {
446+
const snapshot = await userModel.where(field, "!=", null).get();
447+
const users = [];
448+
449+
if (!snapshot.empty) {
450+
snapshot.forEach((doc) => {
451+
users.push({
452+
id: doc.id,
453+
...doc.data(),
454+
phone: undefined,
455+
email: undefined,
456+
tokens: undefined,
457+
});
458+
});
459+
}
460+
461+
return users;
462+
} catch (err) {
463+
logger.error("Error retrieving users data with roles of inDiscord", err);
464+
throw err;
465+
}
466+
};
435467

436468
module.exports = {
437469
addOrUpdate,
@@ -449,4 +481,6 @@ module.exports = {
449481
fetchUsers,
450482
getUsersBasedOnFilter,
451483
fetchUsersWithRole,
484+
fetchUsersWhereFieldNotNull,
485+
getAllUsers,
452486
};

routes/users.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ router.get("/self", authenticate, users.getSelfDetails);
1616
router.get("/isUsernameAvailable/:username", authenticate, users.getUsernameAvailabilty);
1717
router.get("/chaincode", authenticate, users.generateChaincode);
1818
router.get("/search", userValidator.validateUserQueryParams, users.filterUsers);
19-
router.get("/InDiscord", authenticate, users.fetchInDiscordUsers);
19+
router.get("/inDiscord", authenticate, users.fetchInDiscordUsers);
20+
router.post("/syncInDiscord", authenticate, users.syncInDiscordRole);
21+
router.get("/verified", authenticate, users.fetchVerifiedUsers);
2022
router.get("/:username", users.getUser);
2123
router.get("/:userId/intro", authenticate, authorizeRoles([SUPERUSER]), users.getUserIntro);
2224
router.put("/self/intro", authenticate, userValidator.validateJoinData, users.addUserIntro);
@@ -30,6 +32,4 @@ router.patch("/rejectDiff", authenticate, authorizeRoles([SUPERUSER]), users.rej
3032
router.patch("/:userId", authenticate, authorizeRoles([SUPERUSER]), users.updateUser);
3133
router.get("/suggestedUsers/:skillId", authenticate, authorizeRoles([SUPERUSER]), users.getSuggestedUsers);
3234

33-
router.post("/syncInDiscord", authenticate, users.getSelfDetails);
34-
3535
module.exports = router;

utils/users.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,29 @@ function getUsernamesFromPRs(allPRs) {
142142

143143
return usernames;
144144
}
145+
function mapDiscordMembersDataAndSyncRole(allUsers, discordMembers) {
146+
try {
147+
allUsers.forEach((doc) => {
148+
const user = doc.data();
149+
150+
if (user.roles.archived) {
151+
const roles = user.roles ? { ...user.roles, inDiscord: false } : { inDiscord: false };
152+
doc.ref.update({ roles });
153+
} else if (user.discordId) {
154+
const discordUserData = discordMembers.find((item) => item.user.id === user.discordId);
155+
if (discordUserData) {
156+
const roles = user.roles ? { ...user.roles, inDiscord: true } : { inDiscord: true };
157+
doc.ref.update({ roles, joined_RDS: discordUserData.joined_at });
158+
} else {
159+
const roles = user.roles ? { ...user.roles, inDiscord: false } : { inDiscord: false };
160+
doc.ref.update({ roles });
161+
}
162+
}
163+
});
164+
} catch (err) {
165+
logger.error(err);
166+
}
167+
}
145168

146169
module.exports = {
147170
addUserToDBForTest,
@@ -152,4 +175,5 @@ module.exports = {
152175
getLowestLevelSkill,
153176
getPaginationLink,
154177
getUsernamesFromPRs,
178+
mapDiscordMembersDataAndSyncRole,
155179
};

0 commit comments

Comments
 (0)