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:
co-authored by
Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
morgan@cal.com <morgan@cal.com>
parent
4a96be4175
commit
24a43877ce
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user