Skip to content

Commit a4952ed

Browse files
authored
Merge pull request #1060 from Real-Dev-Squad/feature/inDiscord
Feature: inDiscord
2 parents 1cf19fc + 9aa1166 commit a4952ed

File tree

7 files changed

+56
-2
lines changed

7 files changed

+56
-2
lines changed

constants/roles.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const ROLES = {
44
APPOWNER: "app_owner",
55
MEMBER: "member",
66
ARCHIVED: "archived",
7+
INDISCORD: "in_discord",
78
};
89

910
module.exports = ROLES;

constants/users.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const USER_STATUS = {
1313
const ALLOWED_FILTER_PARAMS = {
1414
ITEM_TAG: ["levelId", "levelName", "levelValue", "tagId"],
1515
USER_STATE: ["state"],
16+
ROLE: ["role"],
1617
};
1718

1819
module.exports = { profileStatus, USER_STATUS, ALLOWED_FILTER_PARAMS };

controllers/users.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ 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");
1111
const { getPaginationLink, getUsernamesFromPRs } = require("../utils/users");
@@ -24,7 +24,11 @@ const verifyUser = async (req, res) => {
2424
logger.error(`Error while verifying user: ${error}`);
2525
return res.boom.serverUnavailable(SOMETHING_WENT_WRONG);
2626
}
27-
fetch(process.env.IDENTITY_SERVICE_URL, "POST", null, { userId }, { "Content-Type": "application/json" });
27+
fetch(process.env.IDENTITY_SERVICE_URL, {
28+
method: "POST",
29+
body: { userId },
30+
headers: { "Content-Type": "application/json" },
31+
});
2832
return res.json({
2933
message: "Your request has been queued successfully",
3034
});

middlewares/validators/user.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
const joi = require("joi");
22
const { USER_STATUS } = require("../../constants/users");
3+
const ROLES = require("../../constants/roles");
34

45
const updateUser = async (req, res, next) => {
56
const schema = joi
@@ -172,6 +173,8 @@ async function validateUserQueryParams(req, res, next) {
172173
joi.array().items(joi.string().valid("IDLE", "OOO", "ACTIVE"))
173174
)
174175
.optional(),
176+
role: joi.string().valid(ROLES.MEMBER, ROLES.INDISCORD).optional(),
177+
verified: joi.string().optional(),
175178
})
176179
.messages({
177180
"object.min": "Please provide at least one filter criteria",

models/users.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,8 @@ const getRdsUserInfoByGitHubUsername = async (githubUsername) => {
366366
* @param {Array} query.levelNumber - Array of levelNumbers to filter the users on
367367
* @param {Array} query.tagId - Array of tagIds to filter the users on
368368
* @param {Array} query.state - Array of states to filter the users on
369+
* @param {String} query.role - filter the users on role
370+
* @param {String} query.verified - filter the users on verified i.e, discordId data
369371
* @return {Promise<Array>} - Array of user documents that match the filter criteria
370372
*/
371373

@@ -418,6 +420,33 @@ const getUsersBasedOnFilter = async (query) => {
418420
const filteredUserDocs = userDocs.filter((doc) => !doc.roles?.archived);
419421
return filteredUserDocs;
420422
}
423+
424+
const { role: roleQuery, verified: verifiedQuery } = query;
425+
426+
if (roleQuery) {
427+
const filteredUsers = [];
428+
const snapshot = await userModel.where(`roles.${roleQuery}`, "==", true).get();
429+
snapshot.forEach((doc) => {
430+
filteredUsers.push({
431+
id: doc.id,
432+
...doc.data(),
433+
});
434+
});
435+
436+
return filteredUsers.filter((user) => !user.roles?.archived);
437+
}
438+
if (verifiedQuery === "true") {
439+
const filteredUsers = [];
440+
const snapshot = await userModel.where("discordId", "!=", null).get();
441+
snapshot.forEach((doc) => {
442+
filteredUsers.push({
443+
id: doc.id,
444+
...doc.data(),
445+
});
446+
});
447+
448+
return filteredUsers.filter((user) => !user.roles?.archived);
449+
}
421450
return [];
422451
};
423452

test/fixtures/user/user.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ module.exports = () => {
2121
isMember: true,
2222
phone: "1234567890",
2323
24+
joined_discord: "2023-01-13T18:21:09.278000+00:00",
2425
roles: {
2526
member: true,
27+
in_discord: true,
2628
},
2729
tokens: {
2830
githubAccessToken: "githubAccessToken",
@@ -105,13 +107,15 @@ module.exports = () => {
105107
github_display_name: "Ankush Dharkar",
106108
phone: "1234567890",
107109
110+
joined_discord: "2023-01-13T18:21:09.278000+00:00",
108111
status: "idle",
109112
tokens: {
110113
githubAccessToken: "githubAccessToken",
111114
},
112115
roles: {
113116
super_user: true,
114117
archived: false,
118+
in_discord: true,
115119
},
116120
picture: {
117121
publicId: "profile/mtS4DhUvNYsKqI7oCWVB/aenklfhtjldc5ytei3ar",

test/unit/models/users.test.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,16 @@ describe("users", function () {
8888
expect(userExists).to.equal(true);
8989
});
9090
});
91+
92+
describe(" search users API: getUsersBasedOnFilter", function () {
93+
it("should return an empty array if no query is provided", async function () {
94+
const result = await users.getUsersBasedOnFilter({});
95+
expect(result).to.deep.equal([]);
96+
});
97+
98+
it("should return an array of verified users", async function () {
99+
const result = await users.getUsersBasedOnFilter({ verified: "true" });
100+
expect(result).to.deep.equal(userDataArray.filter((user) => user.discordId));
101+
});
102+
});
91103
});

0 commit comments

Comments
 (0)