From 98b6373d6a2a1c9d2fbcc58fc653c83c903c2dfd Mon Sep 17 00:00:00 2001 From: GLEF1X Date: Mon, 29 Jul 2024 21:40:48 -0400 Subject: [PATCH] perf(group-fns): optimize sequential delete to be concurrent --- backend/src/ee/services/group/group-fns.ts | 47 ++++++++++++---------- 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/backend/src/ee/services/group/group-fns.ts b/backend/src/ee/services/group/group-fns.ts index 4f96ddbf0..97c162c11 100644 --- a/backend/src/ee/services/group/group-fns.ts +++ b/backend/src/ee/services/group/group-fns.ts @@ -336,31 +336,36 @@ export const removeUsersFromGroupByUserIds = async ({ ) ); - // TODO: this part can be optimized - for await (const userId of userIds) { - const t = await userGroupMembershipDAL.filterProjectsByUserMembership(userId, group.id, projectIds, tx); - const projectsToDeleteKeyFor = projectIds.filter((p) => !t.has(p)); + const promises: Array> = []; + for (const userId of userIds) { + promises.push( + (async () => { + const t = await userGroupMembershipDAL.filterProjectsByUserMembership(userId, group.id, projectIds, tx); + const projectsToDeleteKeyFor = projectIds.filter((p) => !t.has(p)); - if (projectsToDeleteKeyFor.length) { - await projectKeyDAL.delete( - { - receiverId: userId, - $in: { - projectId: projectsToDeleteKeyFor - } - }, - tx - ); - } + if (projectsToDeleteKeyFor.length) { + await projectKeyDAL.delete( + { + receiverId: userId, + $in: { + projectId: projectsToDeleteKeyFor + } + }, + tx + ); + } - await userGroupMembershipDAL.delete( - { - groupId: group.id, - userId - }, - tx + await userGroupMembershipDAL.delete( + { + groupId: group.id, + userId + }, + tx + ); + })() ); } + await Promise.all(promises); } if (membersToRemoveFromGroupPending.length) {