Skip to content

Commit 8ed0fb6

Browse files
authored
perf: Replace isTeamMember util with an index DB call (#24066)
* Remove isTeamMember * updates * revert * better
1 parent f5a1222 commit 8ed0fb6

File tree

4 files changed

+29
-17
lines changed

4 files changed

+29
-17
lines changed

packages/features/ee/teams/lib/queries.ts

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -396,16 +396,6 @@ export async function isTeamOwner(userId: number, teamId: number) {
396396
}));
397397
}
398398

399-
export async function isTeamMember(userId: number, teamId: number) {
400-
return !!(await prisma.membership.findFirst({
401-
where: {
402-
userId,
403-
teamId,
404-
accepted: true,
405-
},
406-
}));
407-
}
408-
409399
export function generateNewChildEventTypeDataForDB({
410400
eventType,
411401
userId,

packages/lib/server/repository/membership.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,13 +303,22 @@ export class MembershipRepository {
303303
});
304304
}
305305

306-
static async findUniqueByUserIdAndTeamId({ userId, teamId }: { userId: number; teamId: number }) {
306+
static async findUniqueByUserIdAndTeamId({
307+
userId,
308+
teamId,
309+
accepted,
310+
}: {
311+
userId: number;
312+
teamId: number;
313+
accepted?: boolean;
314+
}) {
307315
return await prisma.membership.findUnique({
308316
where: {
309317
userId_teamId: {
310318
userId,
311319
teamId,
312320
},
321+
accepted,
313322
},
314323
});
315324
}

packages/trpc/server/routers/viewer/teams/getInternalNotesPresets.handler.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { isTeamMember } from "@calcom/features/ee/teams/lib/queries";
1+
import { MembershipRepository } from "@calcom/lib/server/repository/membership";
22
import { prisma } from "@calcom/prisma";
33
import type { TrpcSessionUser } from "@calcom/trpc/server/types";
44

@@ -14,8 +14,14 @@ type UpdateMembershipOptions = {
1414
};
1515

1616
export const getInternalNotesPresetsHandler = async ({ ctx, input }: UpdateMembershipOptions) => {
17-
if (!(await isTeamMember(ctx.user?.id, input.teamId))) {
18-
throw new TRPCError({ code: "UNAUTHORIZED" });
17+
const membership = await MembershipRepository.findUniqueByUserIdAndTeamId({
18+
userId: ctx.user.id,
19+
teamId: input.teamId,
20+
accepted: true,
21+
});
22+
23+
if (!membership) {
24+
throw new TRPCError({ code: "UNAUTHORIZED", message: "User is not a member of this team" });
1925
}
2026

2127
return await prisma.internalNotePreset.findMany({

packages/trpc/server/routers/viewer/teams/getMemberAvailability.handler.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { enrichUserWithDelegationCredentialsIncludeServiceAccountKey } from "@calcom/lib/delegationCredential/server";
22
import { getUserAvailabilityService } from "@calcom/lib/di/containers/GetUserAvailability";
3-
import { isTeamMember } from "@calcom/features/ee/teams/lib/queries";
43
import { MembershipRepository } from "@calcom/lib/server/repository/membership";
54
import type { TrpcSessionUser } from "@calcom/trpc/server/types";
65

@@ -17,8 +16,16 @@ type GetMemberAvailabilityOptions = {
1716

1817
export const getMemberAvailabilityHandler = async ({ ctx, input }: GetMemberAvailabilityOptions) => {
1918
const userAvailabilityService = getUserAvailabilityService();
20-
const team = await isTeamMember(ctx.user?.id, input.teamId);
21-
if (!team) throw new TRPCError({ code: "UNAUTHORIZED" });
19+
20+
const membership = await MembershipRepository.findUniqueByUserIdAndTeamId({
21+
userId: ctx.user.id,
22+
teamId: input.teamId,
23+
accepted: true,
24+
});
25+
26+
if (!membership) {
27+
throw new TRPCError({ code: "UNAUTHORIZED", message: "User is not a member of this team" });
28+
}
2229

2330
// verify member is in team
2431
const members = await MembershipRepository.findByTeamIdForAvailability({ teamId: input.teamId });

0 commit comments

Comments
 (0)