Files
calendar/packages/features/calAIPhone/providers/adapters/PrismaPhoneNumberRepositoryAdapter.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

103 lines
3.6 KiB
TypeScript

import { PrismaPhoneNumberRepository } from "@calcom/features/calAIPhone/repositories/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);
}
}