perf: Replace isTeamMember util with an index DB call (#24066)

* Remove isTeamMember

* updates

* revert

* better
This commit is contained in:
Benny Joo
2025-09-25 12:55:14 +00:00
committed by GitHub
parent f5a1222fc5
commit 8ed0fb6a07
4 changed files with 29 additions and 17 deletions
-10
View File
@@ -396,16 +396,6 @@ 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,
+10 -1
View File
@@ -303,13 +303,22 @@ export class MembershipRepository {
});
}
static async findUniqueByUserIdAndTeamId({ userId, teamId }: { userId: number; teamId: number }) {
static async findUniqueByUserIdAndTeamId({
userId,
teamId,
accepted,
}: {
userId: number;
teamId: number;
accepted?: boolean;
}) {
return await prisma.membership.findUnique({
where: {
userId_teamId: {
userId,
teamId,
},
accepted,
},
});
}
@@ -1,4 +1,4 @@
import { isTeamMember } from "@calcom/features/ee/teams/lib/queries";
import { MembershipRepository } from "@calcom/lib/server/repository/membership";
import { prisma } from "@calcom/prisma";
import type { TrpcSessionUser } from "@calcom/trpc/server/types";
@@ -14,8 +14,14 @@ type UpdateMembershipOptions = {
};
export const getInternalNotesPresetsHandler = async ({ ctx, input }: UpdateMembershipOptions) => {
if (!(await isTeamMember(ctx.user?.id, input.teamId))) {
throw new TRPCError({ code: "UNAUTHORIZED" });
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" });
}
return await prisma.internalNotePreset.findMany({
@@ -1,6 +1,5 @@
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";
@@ -17,8 +16,16 @@ type GetMemberAvailabilityOptions = {
export const getMemberAvailabilityHandler = async ({ ctx, input }: GetMemberAvailabilityOptions) => {
const userAvailabilityService = getUserAvailabilityService();
const team = await isTeamMember(ctx.user?.id, input.teamId);
if (!team) throw new TRPCError({ code: "UNAUTHORIZED" });
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" });
}
// verify member is in team
const members = await MembershipRepository.findByTeamIdForAvailability({ teamId: input.teamId });