Files
calendar/packages/features/calAIPhone/repositories/CalAiPhoneNumberRepository.ts
T
deca7ce40a refactor: move calAIPhone-specific repositories to features from lib (#25840)
* add prisma agent repository to features

* add

* wip

* wip

* wip

* Update apps/web/app/api/webhooks/retell-ai/route.ts

Co-authored-by: Volnei Munhoz <volnei@cal.com>

* ts fix

* ts fix

---------

Co-authored-by: Volnei Munhoz <volnei@cal.com>
2025-12-15 13:43:24 +05:30

55 lines
1.5 KiB
TypeScript

import { prisma } from "@calcom/prisma";
export class CalAiPhoneNumberRepository {
static async getUserPhoneNumbers(userId: number) {
return prisma.calAiPhoneNumber.findMany({
where: { userId },
select: { phoneNumber: true },
});
}
static async getOrganizationTeamPhoneNumbers(organizationId: number) {
return prisma.calAiPhoneNumber.findMany({
where: {
team: { parentId: organizationId },
},
select: { phoneNumber: true },
});
}
static async getTeamPhoneNumbers(teamIds: number[]) {
return prisma.calAiPhoneNumber.findMany({
where: { teamId: { in: teamIds } },
select: { phoneNumber: true },
});
}
static async getAccessiblePhoneNumbers({
userId,
organizationId,
isOrgOwner,
adminTeamIds,
}: {
userId: number;
organizationId?: number;
isOrgOwner: boolean;
adminTeamIds: number[];
}): Promise<string[]> {
const userPhoneNumbers = await this.getUserPhoneNumbers(userId);
let teamPhoneNumbers: Array<{ phoneNumber: string }> = [];
if (isOrgOwner && organizationId) {
teamPhoneNumbers = await this.getOrganizationTeamPhoneNumbers(organizationId);
} else if (adminTeamIds.length > 0) {
teamPhoneNumbers = await this.getTeamPhoneNumbers(adminTeamIds);
}
const allPhoneNumbers = [
...userPhoneNumbers.map((p) => p.phoneNumber),
...teamPhoneNumbers.map((p) => p.phoneNumber),
];
return Array.from(new Set(allPhoneNumbers));
}
}