Skip to content

Commit b935683

Browse files
authored
perf: Add an explicit DTO + other type improvements to membership repo (calcom#22163)
* perf: Add an explicit DTO + some other type improvements to membership repo * Bring back default to userId=true
1 parent 66b52bb commit b935683

1 file changed

Lines changed: 20 additions & 13 deletions

File tree

packages/lib/server/repository/membership.ts

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { availabilityUserSelect, prisma, type PrismaTransaction, type PrismaClient } from "@calcom/prisma";
22
import { MembershipRole } from "@calcom/prisma/client";
3-
import type { Prisma } from "@calcom/prisma/client";
3+
import type { Prisma, Membership } from "@calcom/prisma/client";
44
import { credentialForCalendarServiceSelect } from "@calcom/prisma/selects/credential";
55

66
import logger from "../../logger";
@@ -27,6 +27,16 @@ const membershipSelect = {
2727
disableImpersonation: true,
2828
} satisfies Prisma.MembershipSelect;
2929

30+
type MembershipSelectableKeys = keyof typeof membershipSelect;
31+
32+
type MembershipPartialSelect = Partial<Record<MembershipSelectableKeys, boolean>>;
33+
34+
type MembershipDTO = Pick<Membership, MembershipSelectableKeys>;
35+
36+
type MembershipDTOFromSelect<TSelect extends MembershipPartialSelect> = {
37+
[K in keyof TSelect & keyof MembershipDTO as TSelect[K] extends true ? K : never]: MembershipDTO[K];
38+
};
39+
3040
const teamParentSelect = {
3141
id: true,
3242
name: true,
@@ -420,23 +430,20 @@ export class MembershipRepository {
420430
});
421431
}
422432

423-
static async findAllByTeamIds({
433+
static async findAllByTeamIds<TSelect extends MembershipPartialSelect = { userId: true }>({
424434
teamIds,
425-
select = { userId: true },
435+
select,
426436
}: {
427437
teamIds: number[];
428-
select?: Prisma.MembershipSelect;
429-
}) {
430-
return prisma.membership.findMany({
438+
select?: TSelect;
439+
}): Promise<MembershipDTOFromSelect<TSelect>[]> {
440+
return (await prisma.membership.findMany({
431441
where: {
432-
team: {
433-
id: {
434-
in: teamIds,
435-
},
436-
},
442+
teamId: { in: teamIds },
437443
accepted: true,
438444
},
439-
select,
440-
});
445+
// this is explicit, and typed in TSelect default typings
446+
select: select ?? { userId: true },
447+
})) as unknown as Promise<MembershipDTOFromSelect<TSelect>[]>;
441448
}
442449
}

0 commit comments

Comments
 (0)