From 5646229cd4577ebc9be6010e03f82495d32b4031 Mon Sep 17 00:00:00 2001 From: Morgan <33722304+ThyMinimalDev@users.noreply.github.com> Date: Tue, 5 Nov 2024 13:30:38 +0200 Subject: [PATCH] fix: cancelling invalid booking seat apiv2 (#17484) --- .../ee/bookings/2024-08-13/bookings.module.ts | 2 ++ .../2024-08-13/services/bookings.service.ts | 16 ++++++++++++++++ .../booking-seat/booking-seat.repository.ts | 3 +++ 3 files changed, 21 insertions(+) diff --git a/apps/api/v2/src/ee/bookings/2024-08-13/bookings.module.ts b/apps/api/v2/src/ee/bookings/2024-08-13/bookings.module.ts index 65c2c2abd3..5f34f9c575 100644 --- a/apps/api/v2/src/ee/bookings/2024-08-13/bookings.module.ts +++ b/apps/api/v2/src/ee/bookings/2024-08-13/bookings.module.ts @@ -7,6 +7,7 @@ import { EventTypesRepository_2024_06_14 } from "@/ee/event-types/event-types_20 import { ApiKeyRepository } from "@/modules/api-key/api-key-repository"; import { BillingModule } from "@/modules/billing/billing.module"; import { BookingSeatModule } from "@/modules/booking-seat/booking-seat.module"; +import { BookingSeatRepository } from "@/modules/booking-seat/booking-seat.repository"; import { OAuthClientRepository } from "@/modules/oauth-clients/oauth-client.repository"; import { OAuthFlowService } from "@/modules/oauth-clients/services/oauth-flow.service"; import { PrismaModule } from "@/modules/prisma/prisma.module"; @@ -27,6 +28,7 @@ import { Module } from "@nestjs/common"; OutputBookingsService_2024_08_13, BookingsRepository_2024_08_13, EventTypesRepository_2024_06_14, + BookingSeatRepository, ApiKeyRepository, ], controllers: [BookingsController_2024_08_13], diff --git a/apps/api/v2/src/ee/bookings/2024-08-13/services/bookings.service.ts b/apps/api/v2/src/ee/bookings/2024-08-13/services/bookings.service.ts index 166ca6f698..4d0f88d01f 100644 --- a/apps/api/v2/src/ee/bookings/2024-08-13/services/bookings.service.ts +++ b/apps/api/v2/src/ee/bookings/2024-08-13/services/bookings.service.ts @@ -3,6 +3,7 @@ import { InputBookingsService_2024_08_13 } from "@/ee/bookings/2024-08-13/servic import { OutputBookingsService_2024_08_13 } from "@/ee/bookings/2024-08-13/services/output.service"; import { EventTypesRepository_2024_06_14 } from "@/ee/event-types/event-types_2024_06_14/event-types.repository"; import { BillingService } from "@/modules/billing/services/billing.service"; +import { BookingSeatRepository } from "@/modules/booking-seat/booking-seat.repository"; import { PrismaReadService } from "@/modules/prisma/prisma-read.service"; import { Injectable, Logger, NotFoundException } from "@nestjs/common"; import { BadRequestException } from "@nestjs/common"; @@ -46,6 +47,7 @@ export class BookingsService_2024_08_13 { private readonly inputService: InputBookingsService_2024_08_13, private readonly outputService: OutputBookingsService_2024_08_13, private readonly bookingsRepository: BookingsRepository_2024_08_13, + private readonly bookingSeatRepository: BookingSeatRepository, private readonly eventTypesRepository: EventTypesRepository_2024_06_14, private readonly prismaReadService: PrismaReadService, private readonly billingService: BillingService @@ -282,6 +284,20 @@ export class BookingsService_2024_08_13 { } async cancelBooking(request: Request, bookingUid: string, body: CancelBookingInput) { + if (this.inputService.isCancelSeatedBody(body)) { + const seat = await this.bookingSeatRepository.getByReferenceUid(body.seatUid); + + if (!seat) { + throw new BadRequestException( + "Invalid seatUid: this seat does not exist or has already been cancelled." + ); + } + + if (seat && bookingUid !== seat.booking.uid) { + throw new BadRequestException("Invalid seatUid: this seat does not belong to this booking."); + } + } + const bookingRequest = await this.inputService.createCancelBookingRequest(request, bookingUid, body); await handleCancelBooking(bookingRequest); return this.getBooking(bookingUid); diff --git a/apps/api/v2/src/modules/booking-seat/booking-seat.repository.ts b/apps/api/v2/src/modules/booking-seat/booking-seat.repository.ts index d07855c205..5064609de4 100644 --- a/apps/api/v2/src/modules/booking-seat/booking-seat.repository.ts +++ b/apps/api/v2/src/modules/booking-seat/booking-seat.repository.ts @@ -12,6 +12,9 @@ export class BookingSeatRepository { where: { referenceUid, }, + include: { + booking: { select: { uid: true } }, + }, }); } }