Skip to content
14 changes: 13 additions & 1 deletion apps/api/v2/src/lib/modules/booking-cancel.module.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,22 @@
import { PrismaBookingAttendeeRepository } from "@/lib/repositories/prisma-booking-attendee.repository";
import { PrismaBookingReferenceRepository } from "@/lib/repositories/prisma-booking-reference.repository";
import { PrismaBookingRepository } from "@/lib/repositories/prisma-booking.repository";
import { PrismaProfileRepository } from "@/lib/repositories/prisma-profile.repository";
import { PrismaUserRepository } from "@/lib/repositories/prisma-user.repository";
import { BookingCancelService } from "@/lib/services/booking-cancel.service";
import { PrismaModule } from "@/modules/prisma/prisma.module";
import { Module } from "@nestjs/common";

@Module({
imports: [PrismaModule],
providers: [BookingCancelService],
providers: [
PrismaBookingAttendeeRepository,
PrismaBookingReferenceRepository,
PrismaBookingRepository,
PrismaProfileRepository,
PrismaUserRepository,
BookingCancelService,
],
exports: [BookingCancelService],
})
export class BookingCancelModule {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { PrismaWriteService } from "@/modules/prisma/prisma-write.service";
import { Injectable } from "@nestjs/common";

import { PrismaBookingAttendeeRepository as BasePrismaBookingAttendeeRepository } from "@calcom/platform-libraries/repositories";

@Injectable()
export class PrismaBookingAttendeeRepository extends BasePrismaBookingAttendeeRepository {
constructor(private readonly dbWrite: PrismaWriteService) {
super(dbWrite.prisma);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { PrismaWriteService } from "@/modules/prisma/prisma-write.service";
import { Injectable } from "@nestjs/common";

import { PrismaBookingReferenceRepository as BasePrismaBookingReferenceRepository } from "@calcom/platform-libraries/repositories";

@Injectable()
export class PrismaBookingReferenceRepository extends BasePrismaBookingReferenceRepository {
constructor(private readonly dbWrite: PrismaWriteService) {
super({ prismaClient: dbWrite.prisma });
}
}
11 changes: 11 additions & 0 deletions apps/api/v2/src/lib/repositories/prisma-profile.repository.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { PrismaWriteService } from "@/modules/prisma/prisma-write.service";
import { Injectable } from "@nestjs/common";

import { PrismaProfileRepository as BasePrismaProfileRepository } from "@calcom/platform-libraries/repositories";

@Injectable()
export class PrismaProfileRepository extends BasePrismaProfileRepository {
constructor(private readonly dbWrite: PrismaWriteService) {
super({ prismaClient: dbWrite.prisma });
}
}
20 changes: 17 additions & 3 deletions apps/api/v2/src/lib/services/booking-cancel.service.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,27 @@
import { PrismaWriteService } from "@/modules/prisma/prisma-write.service";
import { PrismaBookingAttendeeRepository } from "@/lib/repositories/prisma-booking-attendee.repository";
import { PrismaBookingReferenceRepository } from "@/lib/repositories/prisma-booking-reference.repository";
import { PrismaBookingRepository } from "@/lib/repositories/prisma-booking.repository";
import { PrismaProfileRepository } from "@/lib/repositories/prisma-profile.repository";
import { PrismaUserRepository } from "@/lib/repositories/prisma-user.repository";
import { Injectable } from "@nestjs/common";

import { BookingCancelService as BaseBookingCancelService } from "@calcom/platform-libraries/bookings";

@Injectable()
export class BookingCancelService extends BaseBookingCancelService {
constructor(prismaWriteService: PrismaWriteService) {
constructor(
userRepository: PrismaUserRepository,
bookingRepository: PrismaBookingRepository,
profileRepository: PrismaProfileRepository,
bookingReferenceRepository: PrismaBookingReferenceRepository,
attendeeRepository: PrismaBookingAttendeeRepository
) {
super({
prismaClient: prismaWriteService.prisma,
userRepository,
bookingRepository,
profileRepository,
bookingReferenceRepository,
attendeeRepository,
});
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
import { prisma } from "@calcom/prisma";
import type { Prisma } from "@calcom/prisma/client";
import type { Prisma, PrismaClient } from "@calcom/prisma/client";
import type { PartialReference } from "@calcom/types/EventManager";

import type { IBookingReferenceRepository } from "@calcom/lib/server/repository/dto/IBookingReferenceRepository";

const bookingReferenceSelect = {
id: true,
type: true,
Expand All @@ -13,7 +15,12 @@ const bookingReferenceSelect = {
bookingId: true,
} satisfies Prisma.BookingReferenceSelect;

export class BookingReferenceRepository {
export class BookingReferenceRepository implements IBookingReferenceRepository {
private prismaClient: PrismaClient;
constructor(private deps: { prismaClient: PrismaClient }) {
this.prismaClient = deps.prismaClient;
}

static async findDailyVideoReferenceByRoomName({ roomName }: { roomName: string }) {
return prisma.bookingReference.findFirst({
where: {
Expand Down Expand Up @@ -57,4 +64,16 @@ export class BookingReferenceRepository {
}),
});
}

async updateManyByBookingId(
bookingId: number,
data: Prisma.BookingReferenceUpdateManyMutationInput
): Promise<void> {
await this.prismaClient.bookingReference.updateMany({
where: {
bookingId,
},
data,
});
}
}
20 changes: 20 additions & 0 deletions packages/features/bookings/di/BookingAttendeeRepository.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import { PrismaBookingAttendeeRepository } from "@calcom/features/bookings/repositories/PrismaBookingAttendeeRepository";
import { bindModuleToClassOnToken, createModule } from "@calcom/features/di/di";
import { DI_TOKENS } from "@calcom/features/di/tokens";
import { moduleLoader as prismaModuleLoader } from "@calcom/prisma/prisma.module";

export const bookingAttendeeRepositoryModule = createModule();
const token = DI_TOKENS.BOOKING_ATTENDEE_REPOSITORY;
const moduleToken = DI_TOKENS.BOOKING_ATTENDEE_REPOSITORY_MODULE;
const loadModule = bindModuleToClassOnToken({
module: bookingAttendeeRepositoryModule,
moduleToken,
token,
classs: PrismaBookingAttendeeRepository,
dep: prismaModuleLoader,
});

export const moduleLoader = {
token,
loadModule,
};
15 changes: 12 additions & 3 deletions packages/features/bookings/di/BookingCancelService.module.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import { BookingCancelService } from "@calcom/features/bookings/lib/handleCancelBooking";
import { bindModuleToClassOnToken, createModule } from "@calcom/features/di/di";
import { BookingCancelService } from "../lib/handleCancelBooking";
import { moduleLoader as bookingRepositoryModuleLoader } from "@calcom/features/di/modules/Booking";
import { moduleLoader as bookingAttendeeRepositoryModuleLoader } from "./BookingAttendeeRepository.module";
import { moduleLoader as bookingReferenceRepositoryModuleLoader } from "./BookingReferenceRepository.module";
import { moduleLoader as profileRepositoryModuleLoader } from "@calcom/features/users/di/Profile.module";
import { moduleLoader as userRepositoryModuleLoader } from "@calcom/features/di/modules/User";

import { DI_TOKENS } from "@calcom/features/di/tokens";
import { moduleLoader as prismaModuleLoader } from "@calcom/features/di/modules/Prisma";

const thisModule = createModule();
const token = DI_TOKENS.BOOKING_CANCEL_SERVICE;
Expand All @@ -12,7 +17,11 @@ const loadModule = bindModuleToClassOnToken({
token,
classs: BookingCancelService,
depsMap: {
prismaClient: prismaModuleLoader,
userRepository: userRepositoryModuleLoader,
bookingRepository: bookingRepositoryModuleLoader,
profileRepository: profileRepositoryModuleLoader,
bookingReferenceRepository: bookingReferenceRepositoryModuleLoader,
attendeeRepository: bookingAttendeeRepositoryModuleLoader,
},
});

Expand Down
22 changes: 22 additions & 0 deletions packages/features/bookings/di/BookingReferenceRepository.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { bindModuleToClassOnToken, createModule } from "@calcom/features/di/di";
import { DI_TOKENS } from "@calcom/features/di/tokens";
import { BookingReferenceRepository } from "@calcom/lib/server/repository/bookingReference";
import { moduleLoader as prismaModuleLoader } from "@calcom/prisma/prisma.module";

export const bookingReferenceRepositoryModule = createModule();
const token = DI_TOKENS.BOOKING_REFERENCE_REPOSITORY;
const moduleToken = DI_TOKENS.BOOKING_REFERENCE_REPOSITORY_MODULE;
const loadModule = bindModuleToClassOnToken({
module: bookingReferenceRepositoryModule,
moduleToken,
token,
classs: BookingReferenceRepository,
depsMap: {
prismaClient: prismaModuleLoader,
},
});

export const moduleLoader = {
token,
loadModule,
};
4 changes: 4 additions & 0 deletions packages/features/bookings/di/tokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ export const BOOKING_DI_TOKENS = {
INSTANT_BOOKING_CREATE_SERVICE_MODULE: Symbol("InstantBookingCreateServiceModule"),
BOOKING_CANCEL_SERVICE: Symbol("BookingCancelService"),
BOOKING_CANCEL_SERVICE_MODULE: Symbol("BookingCancelServiceModule"),
BOOKING_REFERENCE_REPOSITORY: Symbol("BookingReferenceRepository"),
BOOKING_REFERENCE_REPOSITORY_MODULE: Symbol("BookingReferenceRepositoryModule"),
BOOKING_ATTENDEE_REPOSITORY: Symbol("BookingAttendeeRepository"),
BOOKING_ATTENDEE_REPOSITORY_MODULE: Symbol("BookingAttendeeRepositoryModule"),
BOOKING_EMAIL_SMS_HANDLER: Symbol("BookingEmailSmsHandler"),
BOOKING_EMAIL_SMS_HANDLER_MODULE: Symbol("BookingEmailSmsHandlerModule"),
BOOKING_EVENT_HANDLER_SERVICE: Symbol("BookingEventHandlerService"),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export interface IBookingAttendeeRepository {
deleteManyByBookingId(bookingId: number): Promise<void>;
}
Loading
Loading