Skip to content
1 change: 1 addition & 0 deletions constants/roles.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ const ROLES = {
APPOWNER: "app_owner",
MEMBER: "member",
ARCHIVED: "archived",
INDISCORD: "in_discord",
};

module.exports = ROLES;
1 change: 1 addition & 0 deletions constants/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const USER_STATUS = {
const ALLOWED_FILTER_PARAMS = {
ITEM_TAG: ["levelId", "levelName", "levelValue", "tagId"],
USER_STATE: ["state"],
ROLE: ["role"],
};

module.exports = { profileStatus, USER_STATUS, ALLOWED_FILTER_PARAMS };
8 changes: 6 additions & 2 deletions controllers/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const logsQuery = require("../models/logs");
const imageService = require("../services/imageService");
const { profileDiffStatus } = require("../constants/profileDiff");
const { logType } = require("../constants/logs");
const { fetch } = require("../utils/fetch");

const logger = require("../utils/logger");
const obfuscate = require("../utils/obfuscate");
const { getPaginationLink, getUsernamesFromPRs } = require("../utils/users");
Expand All @@ -24,7 +24,11 @@ const verifyUser = async (req, res) => {
logger.error(`Error while verifying user: ${error}`);
return res.boom.serverUnavailable(SOMETHING_WENT_WRONG);
}
fetch(process.env.IDENTITY_SERVICE_URL, "POST", null, { userId }, { "Content-Type": "application/json" });
fetch(process.env.IDENTITY_SERVICE_URL, {
method: "POST",
body: { userId },
headers: { "Content-Type": "application/json" },
});
return res.json({
message: "Your request has been queued successfully",
});
Expand Down
2 changes: 2 additions & 0 deletions middlewares/validators/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,8 @@ async function validateUserQueryParams(req, res, next) {
joi.array().items(joi.string().valid("IDLE", "OOO", "ACTIVE"))
)
.optional(),
role: joi.string().valid("in_discord", "member").optional(),
verified: joi.string().optional(),
})
.messages({
"object.min": "Please provide at least one filter criteria",
Expand Down
30 changes: 30 additions & 0 deletions models/users.js
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,8 @@ const getRdsUserInfoByGitHubUsername = async (githubUsername) => {
* @param {Array} query.levelNumber - Array of levelNumbers to filter the users on
* @param {Array} query.tagId - Array of tagIds to filter the users on
* @param {Array} query.state - Array of states to filter the users on
* @param {String} query.role - filter the users on
* @param {String} query.verified - filter the users on
* @return {Promise<Array>} - Array of user documents that match the filter criteria
*/

Expand Down Expand Up @@ -412,6 +414,34 @@ const getUsersBasedOnFilter = async (query) => {
const filteredUserDocs = userDocs.filter((doc) => !doc.roles?.archived);
return filteredUserDocs;
}

const roleQuery = query.role;
const verifiedQuery = query.verified;

if (roleQuery) {
const filteredUsers = [];
const snapshot = await userModel.where(`roles.${roleQuery}`, "==", true).get();
snapshot.forEach((doc) => {
filteredUsers.push({
id: doc.id,
...doc.data(),
});
});

return filteredUsers.filter((user) => !user.roles?.archived);
}
if (verifiedQuery === "true") {
const filteredUsers = [];
const snapshot = await userModel.where("discordId", "!=", null).get();
snapshot.forEach((doc) => {
filteredUsers.push({
id: doc.id,
...doc.data(),
});
});

return filteredUsers.filter((user) => !user.roles?.archived);
}
return [];
};

Expand Down
4 changes: 4 additions & 0 deletions test/fixtures/user/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,10 @@ module.exports = () => {
isMember: true,
phone: "1234567890",
email: "[email protected]",
joined_discord: "2023-01-13T18:21:09.278000+00:00",
roles: {
member: true,
in_discord: true,
},
tokens: {
githubAccessToken: "githubAccessToken",
Expand Down Expand Up @@ -105,13 +107,15 @@ module.exports = () => {
github_display_name: "Ankush Dharkar",
phone: "1234567890",
email: "[email protected]",
joined_discord: "2023-01-13T18:21:09.278000+00:00",
status: "idle",
tokens: {
githubAccessToken: "githubAccessToken",
},
roles: {
super_user: true,
archived: false,
in_discord: true,
},
picture: {
publicId: "profile/mtS4DhUvNYsKqI7oCWVB/aenklfhtjldc5ytei3ar",
Expand Down
12 changes: 12 additions & 0 deletions test/unit/models/users.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,16 @@ describe("users", function () {
expect(userExists).to.equal(true);
});
});

describe("brew install redis", function () {
it("should return an empty array if no query is provided", async function () {
const result = await users.getUsersBasedOnFilter({});
expect(result).to.deep.equal([]);
});

it("should return an array of verified users", async function () {
const result = await users.getUsersBasedOnFilter({ verified: "true" });
expect(result).to.deep.equal(userDataArray.filter((user) => user.discordId));
});
});
});