Skip to content

Commit 7562980

Browse files
committed
Merge branch 'develop' of https://github.com/Real-Dev-Squad/website-backend into feat/cpllapsed-task
2 parents 3d868d9 + 7939b2c commit 7562980

File tree

5 files changed

+48
-35
lines changed

5 files changed

+48
-35
lines changed

constants/firebase.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
const BATCH_SIZE_IN_CLAUSE = 30; // since only 30 comparision values are allowed in 'in' clause
2+
3+
module.exports = {
4+
BATCH_SIZE_IN_CLAUSE,
5+
};

controllers/users.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const { logType } = require("../constants/logs");
88
const { fetch } = require("../utils/fetch");
99
const logger = require("../utils/logger");
1010
const obfuscate = require("../utils/obfuscate");
11-
const { getPaginationLink, getFilteredUsers } = require("../utils/users");
11+
const { getPaginationLink, getUsernamesFromPRs } = 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");
@@ -73,13 +73,13 @@ const getUsers = async (req, res) => {
7373
if (qualifiers?.filterBy) {
7474
const allPRs = await getFilteredPRsOrIssues(qualifiers);
7575

76-
const { allUsers } = await userQuery.fetchAllUsers();
76+
const filteredUsernames = getUsernamesFromPRs(allPRs);
7777

78-
const filteredUsers = getFilteredUsers(allPRs, allUsers);
78+
const { filterdUsersWithDetails } = await userQuery.fetchUsers(filteredUsernames);
7979

8080
return res.json({
8181
message: "Users returned successfully!",
82-
users: filteredUsers,
82+
users: filterdUsersWithDetails,
8383
});
8484
}
8585

models/users.js

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ const firestore = require("../utils/firestore");
88
const { fetchWallet, createWallet } = require("../models/wallets");
99
const { arraysHaveCommonItem } = require("../utils/array");
1010
const { ALLOWED_FILTER_PARAMS } = require("../constants/users");
11+
const { BATCH_SIZE_IN_CLAUSE } = require("../constants/firebase");
1112
const userModel = firestore.collection("users");
1213
const joinModel = firestore.collection("applicants");
1314
const itemModel = firestore.collection("itemTags");
@@ -178,26 +179,38 @@ const fetchPaginatedUsers = async (query) => {
178179
}
179180
};
180181

181-
const fetchAllUsers = async () => {
182+
const fetchUsers = async (usernames = []) => {
182183
try {
183184
const dbQuery = userModel;
185+
const filterdUsersWithDetails = [];
184186

185-
const snapshot = await dbQuery.get();
187+
const groups = [];
188+
for (let i = 0; i < usernames.length; i += BATCH_SIZE_IN_CLAUSE) {
189+
groups.push(usernames.slice(i, i + BATCH_SIZE_IN_CLAUSE));
190+
}
186191

187-
const allUsers = [];
192+
// For each group, write a separate query
193+
const promises = groups.map((group) => {
194+
return dbQuery.where("github_id", "in", group).get();
195+
});
188196

189-
snapshot.forEach((doc) => {
190-
allUsers.push({
191-
id: doc.id,
192-
...doc.data(),
193-
phone: undefined,
194-
email: undefined,
195-
tokens: undefined,
196-
chaincode: undefined,
197+
const snapshots = await Promise.all(promises);
198+
199+
snapshots.forEach((snapshot) => {
200+
snapshot.forEach((doc) => {
201+
filterdUsersWithDetails.push({
202+
id: doc.id,
203+
...doc.data(),
204+
phone: undefined,
205+
email: undefined,
206+
tokens: undefined,
207+
chaincode: undefined,
208+
});
197209
});
198210
});
211+
199212
return {
200-
allUsers,
213+
filterdUsersWithDetails,
201214
};
202215
} catch (err) {
203216
logger.error("Error retrieving user data", err);
@@ -392,6 +405,6 @@ module.exports = {
392405
getJoinData,
393406
getSuggestedUsers,
394407
fetchUserSkills,
395-
fetchAllUsers,
408+
fetchUsers,
396409
getUsersBasedOnFilter,
397410
};

utils/users.js

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -121,24 +121,19 @@ function getPaginationLink(query, cursor, documentId) {
121121
* @param allUsers {Array} - list of total users from firebase
122122
*
123123
*/
124-
function getFilteredUsers(allPRs, allUsers) {
125-
const uniqueUsersInOrder = new Set();
124+
function getUsernamesFromPRs(allPRs) {
125+
const uniqueUsernamesSet = new Set();
126+
const usernames = [];
126127

127-
allPRs?.forEach((element) => {
128-
uniqueUsersInOrder.add(element.username);
129-
});
130-
131-
const usersWithDetails = [];
132-
133-
uniqueUsersInOrder.forEach((username) => {
134-
const userDetails = allUsers.find((user) => user.github_id === username);
135-
136-
if (userDetails) {
137-
usersWithDetails.push(userDetails);
128+
allPRs?.forEach((pr) => {
129+
const username = pr?.username;
130+
if (!uniqueUsernamesSet.has(username)) {
131+
uniqueUsernamesSet.add(username);
132+
usernames.push(username);
138133
}
139134
});
140135

141-
return usersWithDetails;
136+
return usernames;
142137
}
143138

144139
module.exports = {
@@ -148,5 +143,5 @@ module.exports = {
148143
getParticipantUsernames,
149144
getLowestLevelSkill,
150145
getPaginationLink,
151-
getFilteredUsers,
146+
getUsernamesFromPRs,
152147
};

yarn.lock

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7251,9 +7251,9 @@ [email protected]:
72517251
extsprintf "^1.2.0"
72527252

72537253
vm2@^3.9.3:
7254-
version "3.9.11"
7255-
resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.11.tgz#a880f510a606481719ec3f9803b940c5805a06fe"
7256-
integrity sha512-PFG8iJRSjvvBdisowQ7iVF580DXb1uCIiGaXgm7tynMR1uTBlv7UJlB1zdv5KJ+Tmq1f0Upnj3fayoEOPpCBKg==
7254+
version "3.9.15"
7255+
resolved "https://registry.yarnpkg.com/vm2/-/vm2-3.9.15.tgz#c544e6a9bc31e4e40d2e5f532342cf799ea56a6e"
7256+
integrity sha512-XqNqknHGw2avJo13gbIwLNZUumvrSHc9mLqoadFZTpo3KaNEJoe1I0lqTFhRXmXD7WkLyG01aaraXdXT0pa4ag==
72577257
dependencies:
72587258
acorn "^8.7.0"
72597259
acorn-walk "^8.2.0"

0 commit comments

Comments
 (0)