Files
calendar/packages/features/membership/repositories/PrismaOrgMembershipRepository.ts
2025-12-17 10:24:44 -03:00

62 lines
1.5 KiB
TypeScript

import { prisma } from "@calcom/prisma";
import { MembershipRole } from "@calcom/prisma/enums";
export class PrismaOrgMembershipRepository {
static async getOrgIdsWhereAdmin(loggedInUserId: number) {
const loggedInUserOrgMemberships = await prisma.membership.findMany({
where: {
userId: loggedInUserId,
role: {
in: [MembershipRole.OWNER, MembershipRole.ADMIN],
},
team: {
parentId: null,
},
},
select: {
teamId: true,
},
});
return loggedInUserOrgMemberships.map((m) => m.teamId);
}
static async isLoggedInUserOrgAdminOfBookingHost(loggedInUserId: number, bookingUserId: number) {
const orgIdsWhereLoggedInUserAdmin = await this.getOrgIdsWhereAdmin(loggedInUserId);
if (orgIdsWhereLoggedInUserAdmin.length === 0) {
return false;
}
const bookingUserOrgMembership = await prisma.membership.findFirst({
where: {
userId: bookingUserId,
teamId: {
in: orgIdsWhereLoggedInUserAdmin,
},
team: {
parentId: null,
},
},
select: {
userId: true,
},
});
if (bookingUserOrgMembership) return true;
const bookingUserOrgTeamMembership = await prisma.membership.findFirst({
where: {
userId: bookingUserId,
team: {
parentId: {
in: orgIdsWhereLoggedInUserAdmin,
},
},
},
});
return !!bookingUserOrgTeamMembership;
}
}