optimize organization member removal (#27660)

This commit is contained in:
Anik Dhabal Babu
2026-02-05 17:11:57 +00:00
committed by GitHub
parent 7226f1e4c0
commit c57b517555
@@ -508,58 +508,73 @@ export class TeamService {
await TeamService.cleanupTempOrgRedirect(user, team);
const newUsername = generateNewUsername(user);
await prisma.$transaction([
// Remove user from all sub-teams event type hosts
prisma.host.deleteMany({
where: {
userId: membership.userId,
eventType: {
team: {
parentId: team.id,
const subTeamIds = await prisma.team.findMany({
where: {
parentId: team.id,
},
select: {
id: true,
},
});
const subTeamIdArray = subTeamIds.map((t) => t.id);
await prisma.$transaction(async (tx) => {
if (subTeamIdArray.length > 0) {
// Remove user from all sub-teams event type hosts
await tx.host.deleteMany({
where: {
userId: membership.userId,
eventType: {
teamId: {
in: subTeamIdArray,
},
},
},
},
}),
// Delete managed child events in sub-teams
prisma.eventType.deleteMany({
where: {
userId: membership.userId,
parent: {
team: {
parentId: team.id,
});
// Delete managed child events in sub-teams
await tx.eventType.deleteMany({
where: {
userId: membership.userId,
parent: {
teamId: {
in: subTeamIdArray,
},
},
},
},
}),
});
// Delete all sub-team memberships where this team is the organization
await tx.membership.deleteMany({
where: {
teamId: {
in: subTeamIdArray,
},
userId: membership.userId,
},
});
}
// Remove organizationId from the user
prisma.user.update({
await tx.user.update({
where: { id: membership.userId },
data: {
organizationId: null,
username: newUsername,
},
}),
});
// Delete the profile of the user from the organization
ProfileRepository.delete({
userId: membership.userId,
organizationId: team.id,
}),
// Delete all sub-team memberships where this team is the organization
prisma.membership.deleteMany({
await tx.profile.deleteMany({
where: {
team: {
parentId: team.id,
},
userId: membership.userId,
organizationId: team.id,
},
}),
});
// Delete the membership of the user from the organization
prisma.membership.delete({
await tx.membership.delete({
where: {
userId_teamId: { userId: membership.userId, teamId: team.id },
},
}),
]);
});
});
// Generate new username for user leaving organization
function generateNewUsername(user: UserWithTeams): string | null {