Skip to content

Commit c57b517

Browse files
authored
optimize organization member removal (calcom#27660)
1 parent 7226f1e commit c57b517

1 file changed

Lines changed: 49 additions & 34 deletions

File tree

packages/features/ee/teams/services/teamService.ts

Lines changed: 49 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -508,58 +508,73 @@ export class TeamService {
508508
await TeamService.cleanupTempOrgRedirect(user, team);
509509
const newUsername = generateNewUsername(user);
510510

511-
await prisma.$transaction([
512-
// Remove user from all sub-teams event type hosts
513-
prisma.host.deleteMany({
514-
where: {
515-
userId: membership.userId,
516-
eventType: {
517-
team: {
518-
parentId: team.id,
511+
const subTeamIds = await prisma.team.findMany({
512+
where: {
513+
parentId: team.id,
514+
},
515+
select: {
516+
id: true,
517+
},
518+
});
519+
const subTeamIdArray = subTeamIds.map((t) => t.id);
520+
521+
await prisma.$transaction(async (tx) => {
522+
if (subTeamIdArray.length > 0) {
523+
// Remove user from all sub-teams event type hosts
524+
await tx.host.deleteMany({
525+
where: {
526+
userId: membership.userId,
527+
eventType: {
528+
teamId: {
529+
in: subTeamIdArray,
530+
},
519531
},
520532
},
521-
},
522-
}),
523-
// Delete managed child events in sub-teams
524-
prisma.eventType.deleteMany({
525-
where: {
526-
userId: membership.userId,
527-
parent: {
528-
team: {
529-
parentId: team.id,
533+
});
534+
// Delete managed child events in sub-teams
535+
await tx.eventType.deleteMany({
536+
where: {
537+
userId: membership.userId,
538+
parent: {
539+
teamId: {
540+
in: subTeamIdArray,
541+
},
530542
},
531543
},
532-
},
533-
}),
544+
});
545+
// Delete all sub-team memberships where this team is the organization
546+
await tx.membership.deleteMany({
547+
where: {
548+
teamId: {
549+
in: subTeamIdArray,
550+
},
551+
userId: membership.userId,
552+
},
553+
});
554+
}
555+
534556
// Remove organizationId from the user
535-
prisma.user.update({
557+
await tx.user.update({
536558
where: { id: membership.userId },
537559
data: {
538560
organizationId: null,
539561
username: newUsername,
540562
},
541-
}),
563+
});
542564
// Delete the profile of the user from the organization
543-
ProfileRepository.delete({
544-
userId: membership.userId,
545-
organizationId: team.id,
546-
}),
547-
// Delete all sub-team memberships where this team is the organization
548-
prisma.membership.deleteMany({
565+
await tx.profile.deleteMany({
549566
where: {
550-
team: {
551-
parentId: team.id,
552-
},
553567
userId: membership.userId,
568+
organizationId: team.id,
554569
},
555-
}),
570+
});
556571
// Delete the membership of the user from the organization
557-
prisma.membership.delete({
572+
await tx.membership.delete({
558573
where: {
559574
userId_teamId: { userId: membership.userId, teamId: team.id },
560575
},
561-
}),
562-
]);
576+
});
577+
});
563578

564579
// Generate new username for user leaving organization
565580
function generateNewUsername(user: UserWithTeams): string | null {

0 commit comments

Comments
 (0)