diff --git a/src/main/kotlin/roomescape/reservation/implement/ReservationValidator.kt b/src/main/kotlin/roomescape/reservation/implement/ReservationValidator.kt index a7f0ba3e..257c9815 100644 --- a/src/main/kotlin/roomescape/reservation/implement/ReservationValidator.kt +++ b/src/main/kotlin/roomescape/reservation/implement/ReservationValidator.kt @@ -22,25 +22,26 @@ private val log: KLogger = KotlinLogging.logger {} class ReservationValidator( private val reservationRepository: ReservationRepository, ) { - fun validateIsNotPast( + fun validateIsPast( requestDate: LocalDate, requestTime: LocalTime, ) { val now = LocalDateTime.now() val requestDateTime = LocalDateTime.of(requestDate, requestTime) - log.debug { "[ReservationValidator.validateDateAndTime] 시작. request=$requestDateTime, now=$now" } + log.debug { "[ReservationValidator.validateIsPast] 시작. request=$requestDateTime, now=$now" } if (requestDateTime.isBefore(now)) { - log.info { "[ReservationValidator.validateDateAndTime] 날짜 범위 오류. request=$requestDateTime, now=$now" } + log.info { "[ReservationValidator.validateIsPast] 날짜 범위 오류. request=$requestDateTime, now=$now" } throw ReservationException(ReservationErrorCode.PAST_REQUEST_DATETIME) } - log.debug { "[ReservationValidator.validateDateAndTime] 완료. request=$requestDateTime, now=$now" } + log.debug { "[ReservationValidator.validateIsPast] 완료. request=$requestDateTime, now=$now" } } fun validateSearchDateRange(startFrom: LocalDate?, endAt: LocalDate?) { log.debug { "[ReservationValidator.validateSearchDateRange] 시작: startFrom=$startFrom, endAt=$endAt" } if (startFrom == null || endAt == null) { + log.debug { "[ReservationValidator.validateSearchDateRange] 완료: startFrom=$startFrom, endAt=$endAt" } return } if (startFrom.isAfter(endAt)) { @@ -129,4 +130,15 @@ class ReservationValidator( log.debug { "[ReservationValidator.validateDeleteAuthority] 완료: reservationId=${reservation.id}, requesterId=$requesterId" } } + + fun validateAlreadyConfirmed(reservationId: Long) { + log.debug { "[ReservationValidator.validateAlreadyConfirmed] 시작: reservationId=$reservationId" } + + if (reservationRepository.isExistConfirmedReservation(reservationId)) { + log.warn { "[ReservationWriter.confirm] 이미 확정된 예약: reservationId=$reservationId" } + throw ReservationException(ReservationErrorCode.CONFIRMED_RESERVATION_ALREADY_EXISTS) + } + + log.debug { "[ReservationValidator.validateAlreadyConfirmed] 완료: reservationId=$reservationId" } + } } diff --git a/src/main/kotlin/roomescape/reservation/implement/ReservationWriter.kt b/src/main/kotlin/roomescape/reservation/implement/ReservationWriter.kt index d2a7b7dd..23f34de8 100644 --- a/src/main/kotlin/roomescape/reservation/implement/ReservationWriter.kt +++ b/src/main/kotlin/roomescape/reservation/implement/ReservationWriter.kt @@ -39,7 +39,7 @@ class ReservationWriter( "date=${date}, timeId=${timeId}, themeId=${themeId}, memberId=${memberId}, status=${status}" } val time = timeFinder.findById(timeId).also { - reservationValidator.validateIsNotPast(date, it.startAt) + reservationValidator.validateIsPast(date, it.startAt) } val theme = themeFinder.findById(themeId) @@ -95,14 +95,9 @@ class ReservationWriter( fun confirm(reservationId: Long) { log.debug { "[ReservationWriter.confirm] 대기 여부 확인 시작: reservationId=$reservationId" } - if (reservationRepository.isExistConfirmedReservation(reservationId)) { - log.warn { "[ReservationWriter.confirm] 이미 확정된 예약 존재: reservationId=$reservationId" } - throw ReservationException(ReservationErrorCode.CONFIRMED_RESERVATION_ALREADY_EXISTS) - } + reservationValidator.validateAlreadyConfirmed(reservationId) - reservationRepository.updateStatusByReservationId( - reservationId, ReservationStatus.CONFIRMED_PAYMENT_REQUIRED - ) + reservationRepository.updateStatusByReservationId(reservationId, ReservationStatus.CONFIRMED_PAYMENT_REQUIRED) log.debug { "[ReservationWriter.confirm] 완료: reservationId=$reservationId, status=${ReservationStatus.CONFIRMED_PAYMENT_REQUIRED}" } } diff --git a/src/test/kotlin/roomescape/time/implement/TimeFinderTest.kt b/src/test/kotlin/roomescape/time/implement/TimeFinderTest.kt index e8d4c9f7..66520c80 100644 --- a/src/test/kotlin/roomescape/time/implement/TimeFinderTest.kt +++ b/src/test/kotlin/roomescape/time/implement/TimeFinderTest.kt @@ -34,7 +34,7 @@ class TimeFinderTest : FunSpec({ timeRepository.findAll() } returns listOf(mockk(), mockk(), mockk()) - timeRepository.findAll() shouldHaveSize 3 + timeFinder.findAll() shouldHaveSize 3 } }