diff --git a/packages/lib/server/repository/eventType.ts b/packages/lib/server/repository/eventType.ts index 120574d138..b30aa7af8d 100644 --- a/packages/lib/server/repository/eventType.ts +++ b/packages/lib/server/repository/eventType.ts @@ -12,6 +12,7 @@ import { TRPCError } from "@trpc/server"; import { safeStringify } from "../../safeStringify"; import { eventTypeSelect } from "../eventTypeSelect"; +import { MembershipRepository } from "./membership"; import { LookupTarget, ProfileRepository } from "./profile"; import type { UserWithLegacySelectedCalendars } from "./user"; import { withSelectedCalendars } from "./user"; @@ -676,6 +677,9 @@ export class EventTypeRepository { useEventLevelSelectedCalendars: true, }); + // This is more efficient than using a complex join with team.members in the query + const userTeamIds = await MembershipRepository.findUserTeamIds({ userId }); + return await prisma.eventType.findFirst({ where: { AND: [ @@ -689,13 +693,7 @@ export class EventTypeRepository { }, }, { - team: { - members: { - some: { - userId: userId, - }, - }, - }, + AND: [{ teamId: { not: null } }, { teamId: { in: userTeamIds } }], }, { userId: userId, diff --git a/packages/lib/server/repository/membership.ts b/packages/lib/server/repository/membership.ts index b6101d6de5..b0580545e7 100644 --- a/packages/lib/server/repository/membership.ts +++ b/packages/lib/server/repository/membership.ts @@ -294,4 +294,21 @@ export class MembershipRepository { orgMemberships, }; } + + /** + * Get all team IDs that a user is a member of + */ + static async findUserTeamIds({ userId }: { userId: number }) { + const memberships = await prisma.membership.findMany({ + where: { + userId, + accepted: true, + }, + select: { + teamId: true, + }, + }); + + return memberships.map((membership) => membership.teamId); + } }