Skip to content

Commit 739518c

Browse files
Merge pull request #1349 from Real-Dev-Squad/develop
Sync Dev to Main
2 parents ab4c795 + 7554970 commit 739518c

File tree

5 files changed

+75
-1
lines changed

5 files changed

+75
-1
lines changed

controllers/external-accounts.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const externalAccountsModel = require("../models/external-accounts");
22
const { SOMETHING_WENT_WRONG, INTERNAL_SERVER_ERROR } = require("../constants/errorMessages");
33
const { getDiscordMembers } = require("../services/discordService");
4-
const { addOrUpdate } = require("../models/users");
4+
const { addOrUpdate, getUsersByRole } = require("../models/users");
55
const { retrieveDiscordUsers } = require("../services/dataAccessLayer");
66
const logger = require("../utils/logger");
77

@@ -56,6 +56,7 @@ const syncExternalAccountData = async (req, res) => {
5656
const rdsUserDataMap = {};
5757
const updateUserDataPromises = [];
5858
const userUpdatedWithInDiscordFalse = [];
59+
const updateArchivedPromises = [];
5960

6061
rdsUserData.forEach((rdsUser) => {
6162
rdsUserDataMap[rdsUser.discordId] = {
@@ -90,10 +91,26 @@ const syncExternalAccountData = async (req, res) => {
9091

9192
await Promise.all(updateUserDataPromises);
9293

94+
const inDiscordUsers = await getUsersByRole("in_discord");
95+
inDiscordUsers.forEach((user) => {
96+
if (user.roles.archived === true) {
97+
const userData = {
98+
roles: {
99+
...user.roles,
100+
archived: false,
101+
},
102+
};
103+
updateArchivedPromises.push(addOrUpdate(userData, user.id));
104+
}
105+
});
106+
107+
await Promise.all(updateArchivedPromises);
108+
93109
return res.json({
94110
rdsUsers: rdsUserData.length,
95111
discordUsers: discordUserData.length,
96112
userUpdatedWithInDiscordFalse: userUpdatedWithInDiscordFalse.length,
113+
usersMarkedUnArchived: updateArchivedPromises.length,
97114
message: "Data Sync Complete",
98115
});
99116
} catch (err) {

models/users.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,6 +622,25 @@ const removeGitHubToken = async (users) => {
622622
throw err;
623623
}
624624
};
625+
626+
const getUsersByRole = async (role) => {
627+
try {
628+
const usersRef = await userModel.where(`roles.${role}`, "==", true).get();
629+
const users = [];
630+
usersRef.docs.forEach((user) => {
631+
const userData = user.data();
632+
users.push({
633+
id: user.id,
634+
...userData,
635+
});
636+
});
637+
return users;
638+
} catch (err) {
639+
logger.error(`Fetching users with role: ${role} exitted with an error: ${err}`);
640+
throw err;
641+
}
642+
};
643+
625644
module.exports = {
626645
addOrUpdate,
627646
fetchPaginatedUsers,
@@ -644,4 +663,5 @@ module.exports = {
644663
fetchAllUsers,
645664
fetchUsersWithToken,
646665
removeGitHubToken,
666+
getUsersByRole,
647667
};

test/fixtures/discordResponse/discord-response.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,19 @@ const usersFromRds = [
7474
archived: false,
7575
},
7676
},
77+
{
78+
username: "",
79+
first_name: "",
80+
last_name: "",
81+
github_id: "",
82+
github_display_name: "",
83+
incompleteUserDetails: false,
84+
discordId: "12345678909867666",
85+
roles: {
86+
in_discord: true,
87+
archived: true,
88+
},
89+
},
7790
];
7891

7992
module.exports = {

test/integration/external-accounts.test.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ describe("External Accounts", function () {
237237
superUserJwt = authService.generateAuthToken({ userId });
238238
await userModel.add(usersFromRds[0]);
239239
await userModel.add(usersFromRds[1]);
240+
await userModel.add(usersFromRds[2]);
240241
fetchStub = Sinon.stub(global, "fetch");
241242
});
242243

@@ -265,6 +266,7 @@ describe("External Accounts", function () {
265266
rdsUsers: 3,
266267
discordUsers: 2,
267268
userUpdatedWithInDiscordFalse: 1,
269+
usersMarkedUnArchived: 1,
268270
message: "Data Sync Complete",
269271
});
270272
return done();

test/unit/models/users.test.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,4 +257,26 @@ describe("users", function () {
257257
}
258258
});
259259
});
260+
261+
describe("get users by roles", function () {
262+
beforeEach(async function () {
263+
const addUsersPromises = [];
264+
userDataArray.forEach((user) => {
265+
addUsersPromises.push(userModel.add(user));
266+
});
267+
await Promise.all(addUsersPromises);
268+
});
269+
it("returns users with member role", async function () {
270+
const members = await users.getUsersByRole("member");
271+
expect(members.length).to.be.equal(6);
272+
members.forEach((member) => {
273+
expect(member.roles.member).to.be.equal(true);
274+
});
275+
});
276+
it("throws an error", async function () {
277+
await users.getUsersByRole(32389434).catch((err) => {
278+
expect(err).to.be.instanceOf(Error);
279+
});
280+
});
281+
});
260282
});

0 commit comments

Comments
 (0)