generated from pricelees/issue-pr-template
[#16] Reservation 도메인 코드 코틀린 마이그레이션 #17
@ -12,6 +12,7 @@ import roomescape.reservation.infrastructure.persistence.ReservationTimeEntity
|
|||||||
import roomescape.reservation.infrastructure.persistence.ReservationTimeRepository
|
import roomescape.reservation.infrastructure.persistence.ReservationTimeRepository
|
||||||
import roomescape.reservation.web.*
|
import roomescape.reservation.web.*
|
||||||
import java.time.LocalDate
|
import java.time.LocalDate
|
||||||
|
import java.time.LocalTime
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
class ReservationTimeService(
|
class ReservationTimeService(
|
||||||
@ -28,30 +29,24 @@ class ReservationTimeService(
|
|||||||
|
|
||||||
|
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
fun findAllTimes(): ReservationTimesResponse = reservationTimeRepository.findAll()
|
fun findAllTimes(): ReservationTimesResponse = reservationTimeRepository.findAll()
|
||||||
.toResponses()
|
.toResponses()
|
||||||
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
fun addTime(reservationTimeRequest: ReservationTimeRequest): ReservationTimeResponse {
|
fun addTime(reservationTimeRequest: ReservationTimeRequest): ReservationTimeResponse {
|
||||||
validateIsDuplicatedTimeExists(reservationTimeRequest)
|
val startAt: LocalTime = reservationTimeRequest.startAt
|
||||||
|
|
||||||
return ReservationTimeEntity(startAt = reservationTimeRequest.startAt)
|
if (reservationTimeRepository.existsByStartAt(startAt)) {
|
||||||
|
throw RoomescapeException(
|
||||||
|
ErrorType.TIME_DUPLICATED, "[startAt: $startAt]", HttpStatus.CONFLICT
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ReservationTimeEntity(startAt = startAt)
|
||||||
.also { reservationTimeRepository.save(it) }
|
.also { reservationTimeRepository.save(it) }
|
||||||
.toResponse()
|
.toResponse()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun validateIsDuplicatedTimeExists(reservationTimeRequest: ReservationTimeRequest) {
|
|
||||||
reservationTimeRepository.findByStartAt(reservationTimeRequest.startAt)
|
|
||||||
.also {
|
|
||||||
if (it.isNotEmpty()) {
|
|
||||||
throw RoomescapeException(
|
|
||||||
ErrorType.TIME_DUPLICATED, "[startAt: $it]", HttpStatus.CONFLICT
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
fun removeTimeById(id: Long) {
|
fun removeTimeById(id: Long) {
|
||||||
val reservationTime: ReservationTimeEntity = findTimeById(id)
|
val reservationTime: ReservationTimeEntity = findTimeById(id)
|
||||||
|
|||||||
@ -4,5 +4,5 @@ import org.springframework.data.jpa.repository.JpaRepository
|
|||||||
import java.time.LocalTime
|
import java.time.LocalTime
|
||||||
|
|
||||||
interface ReservationTimeRepository : JpaRepository<ReservationTimeEntity, Long> {
|
interface ReservationTimeRepository : JpaRepository<ReservationTimeEntity, Long> {
|
||||||
fun findByStartAt(startAt: LocalTime): List<ReservationTimeEntity>
|
fun existsByStartAt(startAt: LocalTime): Boolean
|
||||||
}
|
}
|
||||||
|
|||||||
@ -45,7 +45,7 @@ class ReservationTimeServiceTest : FunSpec({
|
|||||||
val request = ReservationTimeRequest(startAt = LocalTime.of(10, 0))
|
val request = ReservationTimeRequest(startAt = LocalTime.of(10, 0))
|
||||||
|
|
||||||
// Mocking the behavior of reservationTimeRepository.findByStartAt
|
// Mocking the behavior of reservationTimeRepository.findByStartAt
|
||||||
every { reservationTimeRepository.findByStartAt(request.startAt) } returns listOf(mockk())
|
every { reservationTimeRepository.existsByStartAt(request.startAt) } returns true
|
||||||
|
|
||||||
shouldThrow<RoomescapeException> {
|
shouldThrow<RoomescapeException> {
|
||||||
reservationTimeService.addTime(request)
|
reservationTimeService.addTime(request)
|
||||||
|
|||||||
@ -0,0 +1,33 @@
|
|||||||
|
package roomescape.reservation.infrastructure.persistence
|
||||||
|
|
||||||
|
import io.kotest.core.spec.style.FunSpec
|
||||||
|
import io.kotest.matchers.shouldBe
|
||||||
|
import jakarta.persistence.EntityManager
|
||||||
|
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest
|
||||||
|
import roomescape.util.ReservationTimeFixture
|
||||||
|
import java.time.LocalTime
|
||||||
|
|
||||||
|
@DataJpaTest
|
||||||
|
class ReservationTimeRepositoryTest(
|
||||||
|
val entityManager: EntityManager,
|
||||||
|
val reservationTimeRepository: ReservationTimeRepository,
|
||||||
|
) : FunSpec({
|
||||||
|
|
||||||
|
context("existsByStartAt") {
|
||||||
|
val startAt = LocalTime.of(10, 0)
|
||||||
|
|
||||||
|
beforeTest {
|
||||||
|
entityManager.persist(ReservationTimeFixture.create(startAt = startAt))
|
||||||
|
entityManager.flush()
|
||||||
|
entityManager.clear()
|
||||||
|
}
|
||||||
|
|
||||||
|
test("동일한 시간이 있으면 true 반환") {
|
||||||
|
reservationTimeRepository.existsByStartAt(startAt) shouldBe true
|
||||||
|
}
|
||||||
|
|
||||||
|
test("동일한 시간이 없으면 false 반환") {
|
||||||
|
reservationTimeRepository.existsByStartAt(startAt.plusSeconds(1)) shouldBe false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
Loading…
x
Reference in New Issue
Block a user