From 7793cb20d14b7af1d0bfc73b503b0e27c68ca2e5 Mon Sep 17 00:00:00 2001 From: Benny Joo Date: Thu, 25 Sep 2025 10:35:12 -0400 Subject: [PATCH] Revert "perf: Replace `isTeamMember` util with an index DB call (#24066)" (#24078) This reverts commit 8ed0fb6a0703219edc2fa6b22513b2b30788d266. --- packages/features/ee/teams/lib/queries.ts | 10 ++++++++++ packages/lib/server/repository/membership.ts | 11 +---------- .../viewer/teams/getInternalNotesPresets.handler.ts | 12 +++--------- .../viewer/teams/getMemberAvailability.handler.ts | 13 +++---------- 4 files changed, 17 insertions(+), 29 deletions(-) diff --git a/packages/features/ee/teams/lib/queries.ts b/packages/features/ee/teams/lib/queries.ts index dbfcf562d7..a90f4a1d50 100644 --- a/packages/features/ee/teams/lib/queries.ts +++ b/packages/features/ee/teams/lib/queries.ts @@ -396,6 +396,16 @@ export async function isTeamOwner(userId: number, teamId: number) { })); } +export async function isTeamMember(userId: number, teamId: number) { + return !!(await prisma.membership.findFirst({ + where: { + userId, + teamId, + accepted: true, + }, + })); +} + export function generateNewChildEventTypeDataForDB({ eventType, userId, diff --git a/packages/lib/server/repository/membership.ts b/packages/lib/server/repository/membership.ts index 6b22a78282..aad4979c60 100644 --- a/packages/lib/server/repository/membership.ts +++ b/packages/lib/server/repository/membership.ts @@ -303,22 +303,13 @@ export class MembershipRepository { }); } - static async findUniqueByUserIdAndTeamId({ - userId, - teamId, - accepted, - }: { - userId: number; - teamId: number; - accepted?: boolean; - }) { + static async findUniqueByUserIdAndTeamId({ userId, teamId }: { userId: number; teamId: number }) { return await prisma.membership.findUnique({ where: { userId_teamId: { userId, teamId, }, - accepted, }, }); } diff --git a/packages/trpc/server/routers/viewer/teams/getInternalNotesPresets.handler.ts b/packages/trpc/server/routers/viewer/teams/getInternalNotesPresets.handler.ts index f0ab930a98..389697de15 100644 --- a/packages/trpc/server/routers/viewer/teams/getInternalNotesPresets.handler.ts +++ b/packages/trpc/server/routers/viewer/teams/getInternalNotesPresets.handler.ts @@ -1,4 +1,4 @@ -import { MembershipRepository } from "@calcom/lib/server/repository/membership"; +import { isTeamMember } from "@calcom/features/ee/teams/lib/queries"; import { prisma } from "@calcom/prisma"; import type { TrpcSessionUser } from "@calcom/trpc/server/types"; @@ -14,14 +14,8 @@ type UpdateMembershipOptions = { }; export const getInternalNotesPresetsHandler = async ({ ctx, input }: UpdateMembershipOptions) => { - const membership = await MembershipRepository.findUniqueByUserIdAndTeamId({ - userId: ctx.user.id, - teamId: input.teamId, - accepted: true, - }); - - if (!membership) { - throw new TRPCError({ code: "UNAUTHORIZED", message: "User is not a member of this team" }); + if (!(await isTeamMember(ctx.user?.id, input.teamId))) { + throw new TRPCError({ code: "UNAUTHORIZED" }); } return await prisma.internalNotePreset.findMany({ diff --git a/packages/trpc/server/routers/viewer/teams/getMemberAvailability.handler.ts b/packages/trpc/server/routers/viewer/teams/getMemberAvailability.handler.ts index c4ad472929..4c42c41b89 100644 --- a/packages/trpc/server/routers/viewer/teams/getMemberAvailability.handler.ts +++ b/packages/trpc/server/routers/viewer/teams/getMemberAvailability.handler.ts @@ -1,5 +1,6 @@ import { enrichUserWithDelegationCredentialsIncludeServiceAccountKey } from "@calcom/lib/delegationCredential/server"; import { getUserAvailabilityService } from "@calcom/lib/di/containers/GetUserAvailability"; +import { isTeamMember } from "@calcom/features/ee/teams/lib/queries"; import { MembershipRepository } from "@calcom/lib/server/repository/membership"; import type { TrpcSessionUser } from "@calcom/trpc/server/types"; @@ -16,16 +17,8 @@ type GetMemberAvailabilityOptions = { export const getMemberAvailabilityHandler = async ({ ctx, input }: GetMemberAvailabilityOptions) => { const userAvailabilityService = getUserAvailabilityService(); - - const membership = await MembershipRepository.findUniqueByUserIdAndTeamId({ - userId: ctx.user.id, - teamId: input.teamId, - accepted: true, - }); - - if (!membership) { - throw new TRPCError({ code: "UNAUTHORIZED", message: "User is not a member of this team" }); - } + const team = await isTeamMember(ctx.user?.id, input.teamId); + if (!team) throw new TRPCError({ code: "UNAUTHORIZED" }); // verify member is in team const members = await MembershipRepository.findByTeamIdForAvailability({ teamId: input.teamId });