* 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>
103 lines
3.5 KiB
TypeScript
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);
|
|
}
|
|
}
|