diff --git a/packages/lib/server/repository/membership.ts b/packages/lib/server/repository/membership.ts index 895475f51e..0a79bd3206 100644 --- a/packages/lib/server/repository/membership.ts +++ b/packages/lib/server/repository/membership.ts @@ -1,6 +1,6 @@ import { availabilityUserSelect, prisma, type PrismaTransaction, type PrismaClient } from "@calcom/prisma"; import { MembershipRole } from "@calcom/prisma/client"; -import type { Prisma } from "@calcom/prisma/client"; +import type { Prisma, Membership } from "@calcom/prisma/client"; import { credentialForCalendarServiceSelect } from "@calcom/prisma/selects/credential"; import logger from "../../logger"; @@ -27,6 +27,16 @@ const membershipSelect = { disableImpersonation: true, } satisfies Prisma.MembershipSelect; +type MembershipSelectableKeys = keyof typeof membershipSelect; + +type MembershipPartialSelect = Partial>; + +type MembershipDTO = Pick; + +type MembershipDTOFromSelect = { + [K in keyof TSelect & keyof MembershipDTO as TSelect[K] extends true ? K : never]: MembershipDTO[K]; +}; + const teamParentSelect = { id: true, name: true, @@ -420,23 +430,20 @@ export class MembershipRepository { }); } - static async findAllByTeamIds({ + static async findAllByTeamIds({ teamIds, - select = { userId: true }, + select, }: { teamIds: number[]; - select?: Prisma.MembershipSelect; - }) { - return prisma.membership.findMany({ + select?: TSelect; + }): Promise[]> { + return (await prisma.membership.findMany({ where: { - team: { - id: { - in: teamIds, - }, - }, + teamId: { in: teamIds }, accepted: true, }, - select, - }); + // this is explicit, and typed in TSelect default typings + select: select ?? { userId: true }, + })) as unknown as Promise[]>; } }