Files
calendar/packages/features/calAIPhone/providers/adapters/PrismaPhoneNumberRepositoryAdapter.ts
T
aa48e72c12 feat: inbound calls in cal ai (#23890)
* feat: lang support

* fix: type errors

* feat: select voice agent

* refactor: address feedback

* refactor: address feedback

* refactor: missing import

* fix: types

* feat: add inbound calls

* chore: formatting

* chore

* feat: finish inbound call

* chore: formatting

* fix: update bug

* fix: types

* refactor: Agent Configuration Sheet (#23930)

* refactor: agent configuration sheet

* chore: use default phone numbre

* refactor: improvements

* refactor: improvements

* fix: types

* fix: feedback

* chore:

* fix: feedback

* fix: prompt

* fix: review

* fix: review

* refactor: class

* refactor: class

* refactor: rename

* Update apps/web/public/static/locales/en/common.json

* Update apps/web/public/static/locales/en/common.json

* chore: update set value

* fix: remove index

* fix: type error

* fix: update tetss

* fix: use logger

* refactor: don't use static

* fix: type

* fix: schema

* refactor:

---------

Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
2025-10-09 11:40:37 +01:00

103 lines
3.5 KiB
TypeScript

import { PrismaPhoneNumberRepository } from "@calcom/lib/server/repository/PrismaPhoneNumberRepository";
import prisma from "@calcom/prisma";
import type { PhoneNumberSubscriptionStatus } from "@calcom/prisma/enums";
import type {
PhoneNumberRepositoryInterface,
PhoneNumberData,
} from "../interfaces/PhoneNumberRepositoryInterface";
/**
* Adapter that bridges the provider interface to the Prisma implementation
* This adapter provides a clean abstraction layer between provider and application
*/
export class PrismaPhoneNumberRepositoryAdapter implements PhoneNumberRepositoryInterface {
async findByPhoneNumberAndUserId(params: {
phoneNumber: string;
userId: number;
}): Promise<PhoneNumberData | null> {
const phoneNumberRepo = new PrismaPhoneNumberRepository(prisma);
return await phoneNumberRepo.findByPhoneNumberAndUserId(params);
}
async findByPhoneNumberAndTeamId(params: {
phoneNumber: string;
teamId: number;
userId: number;
}): Promise<PhoneNumberData | null> {
const phoneNumberRepo = new PrismaPhoneNumberRepository(prisma);
return await phoneNumberRepo.findByPhoneNumberAndTeamId(params);
}
async findByIdAndUserId(params: { id: number; userId: number }): Promise<PhoneNumberData | null> {
const phoneNumberRepo = new PrismaPhoneNumberRepository(prisma);
return await phoneNumberRepo.findByIdAndUserId(params);
}
async findByIdWithTeamAccess(params: {
id: number;
teamId: number;
userId: number;
}): Promise<PhoneNumberData | null> {
const phoneNumberRepo = new PrismaPhoneNumberRepository(prisma);
return await phoneNumberRepo.findByIdWithTeamAccess(params);
}
async createPhoneNumber(params: {
phoneNumber: string;
provider: string;
userId: number;
teamId?: number;
outboundAgentId?: string | null;
}): Promise<PhoneNumberData> {
const phoneNumberRepo = new PrismaPhoneNumberRepository(prisma);
const createParams = {
phoneNumber: params.phoneNumber,
provider: params.provider,
userId: params.userId,
teamId: params.teamId,
};
return await phoneNumberRepo.createPhoneNumber(createParams);
}
async deletePhoneNumber(params: { phoneNumber: string }): Promise<void> {
const phoneNumberRepo = new PrismaPhoneNumberRepository(prisma);
await phoneNumberRepo.deletePhoneNumber(params);
}
async updateSubscriptionStatus(params: {
id: number;
subscriptionStatus: PhoneNumberSubscriptionStatus;
disconnectAgents?: boolean;
}): Promise<void> {
const phoneNumberRepo = new PrismaPhoneNumberRepository(prisma);
await phoneNumberRepo.updateSubscriptionStatus(params);
}
async updateAgents(params: {
id: number;
inboundProviderAgentId?: string | null;
outboundProviderAgentId?: string | null;
}): Promise<void> {
const phoneNumberRepo = new PrismaPhoneNumberRepository(prisma);
await phoneNumberRepo.updateAgents({
id: params.id,
inboundProviderAgentId: params.inboundProviderAgentId,
outboundProviderAgentId: params.outboundProviderAgentId,
});
}
async updateInboundAgentId(params: { id: number; agentId: string }): Promise<{ count: number }> {
const phoneNumberRepo = new PrismaPhoneNumberRepository(prisma);
return await phoneNumberRepo.updateInboundAgentId(params);
}
async findInboundAgentIdByPhoneNumberId(params: {
phoneNumberId: number;
}): Promise<{ inboundAgentId: string | null } | null> {
const phoneNumberRepo = new PrismaPhoneNumberRepository(prisma);
return await phoneNumberRepo.findInboundAgentIdByPhoneNumberId(params);
}
}