diff --git a/src/main/java/roomescape/reservation/business/ReservationService.kt b/src/main/java/roomescape/reservation/business/ReservationService.kt index f93c7eb3..1047b9c7 100644 --- a/src/main/java/roomescape/reservation/business/ReservationService.kt +++ b/src/main/java/roomescape/reservation/business/ReservationService.kt @@ -201,7 +201,7 @@ class ReservationService( fun approveWaiting(reservationId: Long, memberId: Long) { validateIsMemberAdmin(memberId) - if (reservationRepository. isExistConfirmedReservation(reservationId)) { + if (reservationRepository.isExistConfirmedReservation(reservationId)) { throw RoomescapeException(ErrorType.RESERVATION_DUPLICATED, HttpStatus.CONFLICT) } reservationRepository.updateStatusByReservationId(reservationId, ReservationStatus.CONFIRMED_PAYMENT_REQUIRED) diff --git a/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationRepository.kt b/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationRepository.kt index c14602b1..5d17d47a 100644 --- a/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationRepository.kt +++ b/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationRepository.kt @@ -28,11 +28,17 @@ interface ReservationRepository @Query(""" SELECT EXISTS ( SELECT 1 - FROM ReservationEntity r - WHERE r.id = :id - AND r.reservationStatus != 'WAITING' - ) - """) + FROM ReservationEntity r2 + WHERE r2.id = :id + AND EXISTS ( + SELECT 1 FROM ReservationEntity r + WHERE r.theme.id = r2.theme.id + AND r.reservationTime.id = r2.reservationTime.id + AND r.date = r2.date + AND r.reservationStatus != 'WAITING' + ) + ) + """) fun isExistConfirmedReservation(@Param("id") reservationId: Long): Boolean @Query("""