Files
cal.diy/packages/features/calAIPhone/providers/adapters/PrismaPhoneNumberRepositoryAdapter.ts
T
Udit TakkarandHariom Balhara 02c86d0268 feat: cal ai self serve architecture #1 (#22919)
* feat: cal ai self serve architecture

* chore: add package

* chore: update evnet controller

* refactor: improvements

* chore: rename

* chore: type error and naming

* chore: just set it to nul

* chore: just set it to nul

* chore: some more improvements

* chore: packate version

* fix: API v2

* chore: change name of files

* chore: add select

* chore: add missing teamId

* chore: save progress

* refactor: split into multiple services

* refactor: make schema provider agonistic

* chore: improvements

* chore:

* chore: remove duplicate files

* chore: semicolon

* chore: formatting

* refactor: logging and error handling

* chore: rename variable

* refactor: use trpc error

* chore: replace with HttpError

* chore: remove from option

* We need the enum and not just the type

---------

Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
2025-08-08 15:57:13 +00:00

83 lines
2.6 KiB
TypeScript

import { PrismaPhoneNumberRepository } from "@calcom/lib/server/repository/PrismaPhoneNumberRepository";
import prisma from "@calcom/prisma";
import { 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> {
return await PrismaPhoneNumberRepository.findByPhoneNumberAndUserId(params);
}
async findByPhoneNumberAndTeamId(params: {
phoneNumber: string;
teamId: number;
userId: number;
}): Promise<PhoneNumberData | null> {
return await PrismaPhoneNumberRepository.findByPhoneNumberAndTeamId(params);
}
async findByIdAndUserId(params: { id: number; userId: number }): Promise<PhoneNumberData | null> {
return await PrismaPhoneNumberRepository.findByIdAndUserId(params);
}
async findByIdWithTeamAccess(params: {
id: number;
teamId: number;
userId: number;
}): Promise<PhoneNumberData | null> {
return await PrismaPhoneNumberRepository.findByIdWithTeamAccess(params);
}
async createPhoneNumber(params: {
phoneNumber: string;
provider?: string;
userId: number;
teamId?: number;
outboundAgentId?: string | null;
}): Promise<PhoneNumberData> {
const createParams = {
phoneNumber: params.phoneNumber,
provider: params.provider,
userId: params.userId,
teamId: params.teamId,
};
return await PrismaPhoneNumberRepository.createPhoneNumber(createParams);
}
async deletePhoneNumber(params: { phoneNumber: string }): Promise<void> {
await PrismaPhoneNumberRepository.deletePhoneNumber(params);
}
async updateSubscriptionStatus(params: {
id: number;
subscriptionStatus: PhoneNumberSubscriptionStatus;
disconnectOutboundAgent?: boolean;
}): Promise<void> {
await PrismaPhoneNumberRepository.updateSubscriptionStatus(params);
}
async updateAgents(params: {
id: number;
inboundProviderAgentId?: string | null;
outboundProviderAgentId?: string | null;
}): Promise<void> {
await PrismaPhoneNumberRepository.updateAgents({
id: params.id,
inboundProviderAgentId: params.inboundProviderAgentId,
outboundProviderAgentId: params.outboundProviderAgentId,
});
}
}