generated from pricelees/issue-pr-template
<!-- 제목 양식 --> <!-- [이슈번호] 작업 요약 (예시: [#10] Gitea 템플릿 생성) --> ## 📝 관련 이슈 및 PR **PR과 관련된 이슈 번호** - #30 ## ✨ 작업 내용 <!-- 어떤 작업을 했는지 알려주세요! --> - ReservationService를 읽기(Find) / 쓰기(Write) 서비스로 분리 - 모든 도메인에 repository를 사용하는 Finder, Writer, Validator 도입 -> ReservationService에 있는 조회, 검증, 쓰기 작업을 별도의 클래스로 분리하기 위함이었고, 이 과정에서 다른 도메인에도 도입함. ## 🧪 테스트 <!-- 어떤 테스트를 생각했고 진행했는지 알려주세요! --> 새로 추가된 기능 & 클래스는 모두 테스트 추가하였고, 작업 후 전체 테스트 완료 ## 📚 참고 자료 및 기타 <!-- 참고한 자료, 또는 논의할 사항이 있다면 알려주세요! --> Reviewed-on: #31 Co-authored-by: pricelees <priceelees@gmail.com> Co-committed-by: pricelees <priceelees@gmail.com>
42 lines
1.6 KiB
Kotlin
42 lines
1.6 KiB
Kotlin
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}" }
|
|
}
|
|
}
|