Skip to content

Commit

Permalink
batch db insertion
Browse files Browse the repository at this point in the history
  • Loading branch information
shobhan-sundar-goutam committed Nov 24, 2024
1 parent 257924c commit d8027cf
Showing 1 changed file with 33 additions and 13 deletions.
46 changes: 33 additions & 13 deletions controllers/users.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
const chaincodeQuery = require("../models/chaincodes");
const userQuery = require("../models/users");
const profileDiffsQuery = require("../models/profileDiffs");
const firestore = require("../utils/firestore");
const memberRoleModel = firestore.collection("member-group-roles");
const logsModel = firestore.collection("logs");
const admin = require("firebase-admin");
const logsQuery = require("../models/logs");
const imageService = require("../services/imageService");
Expand Down Expand Up @@ -31,7 +34,6 @@ const { addLog } = require("../models/logs");
const { getUserStatus } = require("../models/userStatus");
const config = require("config");
const { generateUniqueUsername } = require("../services/users");
const { addGroupRoleToMember } = require("../models/discordactions");

const discordDeveloperRoleId = config.get("discordDeveloperRoleId");

Expand Down Expand Up @@ -598,6 +600,7 @@ const markUnverified = async (req, res) => {
const unverifiedRoleId = config.get("discordUnverifiedRoleId");
const usersToApplyUnverifiedRole = [];
const addRolePromises = [];
const batchPromises = [];

allRdsLoggedInUsers.forEach((user) => {
rdsUserMap[user.discordId] = true;
Expand All @@ -613,23 +616,40 @@ const markUnverified = async (req, res) => {
}
});

usersToApplyUnverifiedRole.forEach((id) => {
addRolePromises.push(
addRoleToUser(id, unverifiedRoleId),
addGroupRoleToMember({
const batchSize = 500;
const batches = Array.from({ length: Math.ceil(usersToApplyUnverifiedRole.length / batchSize) }, (_, index) =>
usersToApplyUnverifiedRole.slice(index * batchSize, index * batchSize + batchSize)
);

batches.forEach((batch) => {
const firestoreBatch = firestore.batch();

batch.forEach((id) => {
const memberRoleRef = memberRoleModel.doc(id);
const logRef = logsModel.doc();

firestoreBatch.set(memberRoleRef, {
roleid: unverifiedRoleId,
userid: id,
date: admin.firestore.Timestamp.fromDate(new Date()),
}),
addLog(
logType.ADD_UNVERIFIED_ROLE,
{ roleid: unverifiedRoleId, userid: id },
{ message: "Unverified role added successfully" }
)
);
});

firestoreBatch.set(logRef, {
type: logType.ADD_UNVERIFIED_ROLE,
meta: { roleid: unverifiedRoleId, userid: id },
body: { message: "Unverified role added successfully" },
timestamp: admin.firestore.Timestamp.fromDate(new Date()),
});
});

batchPromises.push(firestoreBatch.commit());
});

usersToApplyUnverifiedRole.forEach((id) => {
addRolePromises.push(addRoleToUser(id, unverifiedRoleId));
});

await Promise.all(addRolePromises);
await Promise.all([...addRolePromises, ...batchPromises]);
return res.json({ message: "ROLES APPLIED SUCCESSFULLY" });
} catch (err) {
logger.error(err);
Expand Down

0 comments on commit d8027cf

Please sign in to comment.