From 27c25e1f956020b0c356f2452d35cadefa5ef8ee Mon Sep 17 00:00:00 2001 From: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com> Date: Tue, 27 Feb 2024 18:47:46 +0530 Subject: [PATCH] chore: use transaction (#13874) * fix: use transaction * chore --- .../routers/viewer/teams/delete.handler.ts | 23 +++++++----- .../viewer/teams/removeMember.handler.ts | 37 ++++++++++--------- 2 files changed, 32 insertions(+), 28 deletions(-) diff --git a/packages/trpc/server/routers/viewer/teams/delete.handler.ts b/packages/trpc/server/routers/viewer/teams/delete.handler.ts index 0076e36a9d..a238dc5b0b 100644 --- a/packages/trpc/server/routers/viewer/teams/delete.handler.ts +++ b/packages/trpc/server/routers/viewer/teams/delete.handler.ts @@ -23,17 +23,20 @@ export const deleteHandler = async ({ ctx, input }: DeleteOptions) => { if (IS_TEAM_BILLING_ENABLED) await cancelTeamSubscriptionFromStripe(input.teamId); - // delete all memberships - await prisma.membership.deleteMany({ - where: { - teamId: input.teamId, - }, - }); + const deletedTeam = await prisma.$transaction(async (tx) => { + // delete all memberships + await tx.membership.deleteMany({ + where: { + teamId: input.teamId, + }, + }); - const deletedTeam = await prisma.team.delete({ - where: { - id: input.teamId, - }, + const deletedTeam = await tx.team.delete({ + where: { + id: input.teamId, + }, + }); + return deletedTeam; }); const deletedTeamMetadata = teamMetadataSchema.parse(deletedTeam.metadata); diff --git a/packages/trpc/server/routers/viewer/teams/removeMember.handler.ts b/packages/trpc/server/routers/viewer/teams/removeMember.handler.ts index e71ded20d7..0e6fc8949a 100644 --- a/packages/trpc/server/routers/viewer/teams/removeMember.handler.ts +++ b/packages/trpc/server/routers/viewer/teams/removeMember.handler.ts @@ -43,25 +43,26 @@ export const removeMemberHandler = async ({ ctx, input }: RemoveMemberOptions) = message: "You can not remove yourself from a team you own.", }); - const membership = await ctx.prisma.membership.delete({ - where: { - userId_teamId: { userId: input.memberId, teamId: input.teamId }, - }, - include: { - user: true, - team: true, - }, - }); - - // remove user as host from team events associated with this membership - await ctx.prisma.host.deleteMany({ - where: { - userId: input.memberId, - eventType: { - teamId: input.teamId, + const [membership] = await ctx.prisma.$transaction([ + ctx.prisma.membership.delete({ + where: { + userId_teamId: { userId: input.memberId, teamId: input.teamId }, }, - }, - }); + include: { + user: true, + team: true, + }, + }), + // remove user as host from team events associated with this membership + ctx.prisma.host.deleteMany({ + where: { + userId: input.memberId, + eventType: { + teamId: input.teamId, + }, + }, + }), + ]); if (input.isOrg) { log.debug("Removing a member from the organization");