package roomescape.time.implement import io.github.oshai.kotlinlogging.KLogger import io.github.oshai.kotlinlogging.KotlinLogging import org.springframework.stereotype.Component import roomescape.reservation.implement.ReservationFinder import roomescape.time.exception.TimeErrorCode import roomescape.time.exception.TimeException import roomescape.time.infrastructure.persistence.TimeEntity import roomescape.time.infrastructure.persistence.TimeRepository import java.time.LocalTime private val log: KLogger = KotlinLogging.logger {} @Component class TimeValidator( private val timeRepository: TimeRepository, private val reservationFinder: ReservationFinder ) { fun validateIsAlreadyExists(startAt: LocalTime) { log.debug { "[TimeValidator.validateIsAlreadyExists] 시작: startAt=${startAt}" } if (timeRepository.existsByStartAt(startAt)) { log.info { "[TimeValidator.validateIsAlreadyExists] 중복 시간: startAt=$startAt" } throw TimeException(TimeErrorCode.TIME_DUPLICATED) } log.debug { "[TimeValidator.validateIsAlreadyExists] 완료: startAt=${startAt}" } } fun validateIsReserved(time: TimeEntity) { log.debug { "[TimeValidator.validateIsReserved] 시작: id=${time.id}, startAt=${time.startAt}" } if (reservationFinder.isTimeReserved(time)) { log.info { "[TimeValidator.validateIsReserved] 예약이 있는 시간: timeId=${time.id}, startAt=${time.startAt}" } throw TimeException(TimeErrorCode.TIME_ALREADY_RESERVED) } log.debug { "[TimeValidator.validateIsReserved] 시작: id=${time.id}, startAt=${time.startAt}" } } }