perf: optimize event type query by using team IDs instead of complex join (#21162)

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: morgan@cal.com <morgan@cal.com>
This commit is contained in:
devin-ai-integration[bot]
2025-05-07 13:00:49 -07:00
committed by GitHub
co-authored by Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> morgan@cal.com <morgan@cal.com>
parent 4a96be4175
commit 24a43877ce
2 changed files with 22 additions and 7 deletions
+5 -7
View File
@@ -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,
@@ -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);
}
}