[#30] 코드 구조 개선 #31

Merged
pricelees merged 31 commits from refactor/#30 into main 2025-08-06 10:16:08 +00:00
3 changed files with 20 additions and 13 deletions
Showing only changes of commit 7b059fc92f - Show all commits

View File

@ -22,25 +22,26 @@ private val log: KLogger = KotlinLogging.logger {}
class ReservationValidator( class ReservationValidator(
private val reservationRepository: ReservationRepository, private val reservationRepository: ReservationRepository,
) { ) {
fun validateIsNotPast( fun validateIsPast(
requestDate: LocalDate, requestDate: LocalDate,
requestTime: LocalTime, requestTime: LocalTime,
) { ) {
val now = LocalDateTime.now() val now = LocalDateTime.now()
val requestDateTime = LocalDateTime.of(requestDate, requestTime) 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)) { 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) 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?) { fun validateSearchDateRange(startFrom: LocalDate?, endAt: LocalDate?) {
log.debug { "[ReservationValidator.validateSearchDateRange] 시작: startFrom=$startFrom, endAt=$endAt" } log.debug { "[ReservationValidator.validateSearchDateRange] 시작: startFrom=$startFrom, endAt=$endAt" }
if (startFrom == null || endAt == null) { if (startFrom == null || endAt == null) {
log.debug { "[ReservationValidator.validateSearchDateRange] 완료: startFrom=$startFrom, endAt=$endAt" }
return return
} }
if (startFrom.isAfter(endAt)) { if (startFrom.isAfter(endAt)) {
@ -129,4 +130,15 @@ class ReservationValidator(
log.debug { "[ReservationValidator.validateDeleteAuthority] 완료: reservationId=${reservation.id}, requesterId=$requesterId" } 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" }
}
} }

View File

@ -39,7 +39,7 @@ class ReservationWriter(
"date=${date}, timeId=${timeId}, themeId=${themeId}, memberId=${memberId}, status=${status}" "date=${date}, timeId=${timeId}, themeId=${themeId}, memberId=${memberId}, status=${status}"
} }
val time = timeFinder.findById(timeId).also { val time = timeFinder.findById(timeId).also {
reservationValidator.validateIsNotPast(date, it.startAt) reservationValidator.validateIsPast(date, it.startAt)
} }
val theme = themeFinder.findById(themeId) val theme = themeFinder.findById(themeId)
@ -95,14 +95,9 @@ class ReservationWriter(
fun confirm(reservationId: Long) { fun confirm(reservationId: Long) {
log.debug { "[ReservationWriter.confirm] 대기 여부 확인 시작: reservationId=$reservationId" } log.debug { "[ReservationWriter.confirm] 대기 여부 확인 시작: reservationId=$reservationId" }
if (reservationRepository.isExistConfirmedReservation(reservationId)) { reservationValidator.validateAlreadyConfirmed(reservationId)
log.warn { "[ReservationWriter.confirm] 이미 확정된 예약 존재: reservationId=$reservationId" }
throw ReservationException(ReservationErrorCode.CONFIRMED_RESERVATION_ALREADY_EXISTS)
}
reservationRepository.updateStatusByReservationId( reservationRepository.updateStatusByReservationId(reservationId, ReservationStatus.CONFIRMED_PAYMENT_REQUIRED)
reservationId, ReservationStatus.CONFIRMED_PAYMENT_REQUIRED
)
log.debug { "[ReservationWriter.confirm] 완료: reservationId=$reservationId, status=${ReservationStatus.CONFIRMED_PAYMENT_REQUIRED}" } log.debug { "[ReservationWriter.confirm] 완료: reservationId=$reservationId, status=${ReservationStatus.CONFIRMED_PAYMENT_REQUIRED}" }
} }

View File

@ -34,7 +34,7 @@ class TimeFinderTest : FunSpec({
timeRepository.findAll() timeRepository.findAll()
} returns listOf(mockk(), mockk(), mockk()) } returns listOf(mockk(), mockk(), mockk())
timeRepository.findAll() shouldHaveSize 3 timeFinder.findAll() shouldHaveSize 3
} }
} }