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 });