11import { availabilityUserSelect , prisma , type PrismaTransaction , type PrismaClient } from "@calcom/prisma" ;
22import { MembershipRole } from "@calcom/prisma/client" ;
3- import type { Prisma } from "@calcom/prisma/client" ;
3+ import type { Prisma , Membership } from "@calcom/prisma/client" ;
44import { credentialForCalendarServiceSelect } from "@calcom/prisma/selects/credential" ;
55
66import 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+
3040const 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