Skip to content

Commit d8027cf

Browse files
batch db insertion
1 parent 257924c commit d8027cf

File tree

1 file changed

+33
-13
lines changed

1 file changed

+33
-13
lines changed

controllers/users.js

Lines changed: 33 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
const chaincodeQuery = require("../models/chaincodes");
22
const userQuery = require("../models/users");
33
const profileDiffsQuery = require("../models/profileDiffs");
4+
const firestore = require("../utils/firestore");
5+
const memberRoleModel = firestore.collection("member-group-roles");
6+
const logsModel = firestore.collection("logs");
47
const admin = require("firebase-admin");
58
const logsQuery = require("../models/logs");
69
const imageService = require("../services/imageService");
@@ -31,7 +34,6 @@ const { addLog } = require("../models/logs");
3134
const { getUserStatus } = require("../models/userStatus");
3235
const config = require("config");
3336
const { generateUniqueUsername } = require("../services/users");
34-
const { addGroupRoleToMember } = require("../models/discordactions");
3537

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

@@ -598,6 +600,7 @@ const markUnverified = async (req, res) => {
598600
const unverifiedRoleId = config.get("discordUnverifiedRoleId");
599601
const usersToApplyUnverifiedRole = [];
600602
const addRolePromises = [];
603+
const batchPromises = [];
601604

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

616-
usersToApplyUnverifiedRole.forEach((id) => {
617-
addRolePromises.push(
618-
addRoleToUser(id, unverifiedRoleId),
619-
addGroupRoleToMember({
619+
const batchSize = 500;
620+
const batches = Array.from({ length: Math.ceil(usersToApplyUnverifiedRole.length / batchSize) }, (_, index) =>
621+
usersToApplyUnverifiedRole.slice(index * batchSize, index * batchSize + batchSize)
622+
);
623+
624+
batches.forEach((batch) => {
625+
const firestoreBatch = firestore.batch();
626+
627+
batch.forEach((id) => {
628+
const memberRoleRef = memberRoleModel.doc(id);
629+
const logRef = logsModel.doc();
630+
631+
firestoreBatch.set(memberRoleRef, {
620632
roleid: unverifiedRoleId,
621633
userid: id,
622634
date: admin.firestore.Timestamp.fromDate(new Date()),
623-
}),
624-
addLog(
625-
logType.ADD_UNVERIFIED_ROLE,
626-
{ roleid: unverifiedRoleId, userid: id },
627-
{ message: "Unverified role added successfully" }
628-
)
629-
);
635+
});
636+
637+
firestoreBatch.set(logRef, {
638+
type: logType.ADD_UNVERIFIED_ROLE,
639+
meta: { roleid: unverifiedRoleId, userid: id },
640+
body: { message: "Unverified role added successfully" },
641+
timestamp: admin.firestore.Timestamp.fromDate(new Date()),
642+
});
643+
});
644+
645+
batchPromises.push(firestoreBatch.commit());
646+
});
647+
648+
usersToApplyUnverifiedRole.forEach((id) => {
649+
addRolePromises.push(addRoleToUser(id, unverifiedRoleId));
630650
});
631651

632-
await Promise.all(addRolePromises);
652+
await Promise.all([...addRolePromises, ...batchPromises]);
633653
return res.json({ message: "ROLES APPLIED SUCCESSFULLY" });
634654
} catch (err) {
635655
logger.error(err);

0 commit comments

Comments
 (0)