diff --git a/src/main/java/roomescape/reservation/business/ReservationService.java b/src/main/java/roomescape/reservation/business/ReservationService.java index 4f8d0933..fc1747d5 100644 --- a/src/main/java/roomescape/reservation/business/ReservationService.java +++ b/src/main/java/roomescape/reservation/business/ReservationService.java @@ -17,7 +17,7 @@ import roomescape.reservation.infrastructure.persistence.Reservation; import roomescape.reservation.infrastructure.persistence.ReservationRepository; import roomescape.reservation.infrastructure.persistence.ReservationSearchSpecification; import roomescape.reservation.infrastructure.persistence.ReservationStatus; -import roomescape.reservation.infrastructure.persistence.ReservationTime; +import roomescape.reservation.infrastructure.persistence.ReservationTimeEntity; import roomescape.reservation.web.AdminReservationRequest; import roomescape.reservation.web.MyReservationsResponse; import roomescape.reservation.web.ReservationRequest; @@ -130,7 +130,7 @@ public class ReservationService { private void validateDateAndTime( LocalDate requestDate, - ReservationTime requestReservationTime + ReservationTimeEntity requestReservationTime ) { LocalDateTime now = LocalDateTime.now(); LocalDateTime request = LocalDateTime.of(requestDate, requestReservationTime.getStartAt()); @@ -145,7 +145,7 @@ public class ReservationService { private Reservation getReservationForSave(Long timeId, Long themeId, LocalDate date, Long memberId, ReservationStatus status) { - ReservationTime time = reservationTimeService.findTimeById(timeId); + ReservationTimeEntity time = reservationTimeService.findTimeById(timeId); ThemeEntity theme = themeService.findThemeById(themeId); MemberEntity member = memberService.findById(memberId); diff --git a/src/main/java/roomescape/reservation/business/ReservationTimeService.java b/src/main/java/roomescape/reservation/business/ReservationTimeService.java index f0062ef5..21c77a7a 100644 --- a/src/main/java/roomescape/reservation/business/ReservationTimeService.java +++ b/src/main/java/roomescape/reservation/business/ReservationTimeService.java @@ -11,7 +11,7 @@ import roomescape.common.exception.ErrorType; import roomescape.common.exception.RoomescapeException; import roomescape.reservation.infrastructure.persistence.Reservation; import roomescape.reservation.infrastructure.persistence.ReservationRepository; -import roomescape.reservation.infrastructure.persistence.ReservationTime; +import roomescape.reservation.infrastructure.persistence.ReservationTimeEntity; import roomescape.reservation.infrastructure.persistence.ReservationTimeRepository; import roomescape.reservation.web.ReservationTimeInfoResponse; import roomescape.reservation.web.ReservationTimeInfosResponse; @@ -35,7 +35,7 @@ public class ReservationTimeService { } @Transactional(readOnly = true) - public ReservationTime findTimeById(Long id) { + public ReservationTimeEntity findTimeById(Long id) { return reservationTimeRepository.findById(id) .orElseThrow(() -> new RoomescapeException(ErrorType.RESERVATION_TIME_NOT_FOUND, String.format("[reservationTimeId: %d]", id), HttpStatus.BAD_REQUEST)); @@ -53,15 +53,15 @@ public class ReservationTimeService { public ReservationTimeResponse addTime(ReservationTimeRequest reservationTimeRequest) { validateTimeDuplication(reservationTimeRequest); - ReservationTime reservationTime = reservationTimeRepository.save( - new ReservationTime(reservationTimeRequest.startAt) + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, reservationTimeRequest.startAt) ); return ReservationTimeResponse.from(reservationTime); } private void validateTimeDuplication(ReservationTimeRequest reservationTimeRequest) { - List duplicateReservationTimes = reservationTimeRepository.findByStartAt( + List duplicateReservationTimes = reservationTimeRepository.findByStartAt( reservationTimeRequest.startAt); if (!duplicateReservationTimes.isEmpty()) { @@ -71,7 +71,7 @@ public class ReservationTimeService { } public void removeTimeById(Long id) { - ReservationTime reservationTime = findTimeById(id); + ReservationTimeEntity reservationTime = findTimeById(id); List usingTimeReservations = reservationRepository.findByReservationTime(reservationTime); if (!usingTimeReservations.isEmpty()) { @@ -84,7 +84,7 @@ public class ReservationTimeService { @Transactional(readOnly = true) public ReservationTimeInfosResponse findAllAvailableTimesByDateAndTheme(LocalDate date, Long themeId) { - List allTimes = reservationTimeRepository.findAll(); + List allTimes = reservationTimeRepository.findAll(); List reservations = reservationRepository.findByThemeId(themeId); List response = allTimes.stream() @@ -95,7 +95,7 @@ public class ReservationTimeService { return new ReservationTimeInfosResponse(response); } - private boolean isReservationBooked(List reservations, LocalDate date, ReservationTime time) { + private boolean isReservationBooked(List reservations, LocalDate date, ReservationTimeEntity time) { return reservations.stream() .anyMatch(reservation -> reservation.isSameDateAndTime(date, time)); } diff --git a/src/main/java/roomescape/reservation/infrastructure/persistence/Reservation.java b/src/main/java/roomescape/reservation/infrastructure/persistence/Reservation.java index be474891..81b8583c 100644 --- a/src/main/java/roomescape/reservation/infrastructure/persistence/Reservation.java +++ b/src/main/java/roomescape/reservation/infrastructure/persistence/Reservation.java @@ -31,7 +31,7 @@ public class Reservation { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "time_id", nullable = false) - private ReservationTime reservationTime; + private ReservationTimeEntity reservationTime; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "theme_id", nullable = false) @@ -49,7 +49,7 @@ public class Reservation { public Reservation( LocalDate date, - ReservationTime reservationTime, + ReservationTimeEntity reservationTime, ThemeEntity theme, MemberEntity member, ReservationStatus status @@ -60,7 +60,7 @@ public class Reservation { public Reservation( Long id, LocalDate date, - ReservationTime reservationTime, + ReservationTimeEntity reservationTime, ThemeEntity theme, MemberEntity member, ReservationStatus status @@ -74,7 +74,7 @@ public class Reservation { this.reservationStatus = status; } - private void validateIsNull(LocalDate date, ReservationTime reservationTime, ThemeEntity theme, MemberEntity member, + private void validateIsNull(LocalDate date, ReservationTimeEntity reservationTime, ThemeEntity theme, MemberEntity member, ReservationStatus reservationStatus) { if (date == null || reservationTime == null || theme == null || member == null || reservationStatus == null) { throw new RoomescapeException(ErrorType.REQUEST_DATA_BLANK, String.format("[values: %s]", this), @@ -94,7 +94,7 @@ public class Reservation { return date; } - public ReservationTime getReservationTime() { + public ReservationTimeEntity getReservationTime() { return reservationTime; } @@ -111,7 +111,7 @@ public class Reservation { } @JsonIgnore - public boolean isSameDateAndTime(LocalDate date, ReservationTime time) { + public boolean isSameDateAndTime(LocalDate date, ReservationTimeEntity time) { return this.date.equals(date) && time.getStartAt().equals(this.reservationTime.getStartAt()); } diff --git a/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationRepository.java b/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationRepository.java index b6dd32de..3635d4ff 100644 --- a/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationRepository.java +++ b/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationRepository.java @@ -12,7 +12,7 @@ import roomescape.reservation.web.MyReservationResponse; public interface ReservationRepository extends JpaRepository, JpaSpecificationExecutor { - List findByReservationTime(ReservationTime reservationTime); + List findByReservationTime(ReservationTimeEntity reservationTime); List findByThemeId(Long themeId); diff --git a/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecification.kt b/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecification.kt index 8bd9c6bf..7d18b86d 100644 --- a/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecification.kt +++ b/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecification.kt @@ -22,7 +22,7 @@ class ReservationSearchSpecification( fun sameTimeId(timeId: Long?): ReservationSearchSpecification = andIfNotNull(timeId?.let { Specification { root, _, cb -> - cb.equal(root.get("reservationTime").get("id"), timeId) + cb.equal(root.get("reservationTime").get("id"), timeId) } }) diff --git a/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationTimeEntity.kt b/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationTimeEntity.kt index fa9ef589..73479a7b 100644 --- a/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationTimeEntity.kt +++ b/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationTimeEntity.kt @@ -1,59 +1,13 @@ -package roomescape.reservation.infrastructure.persistence; +package roomescape.reservation.infrastructure.persistence -import java.time.LocalTime; - -import org.springframework.http.HttpStatus; - -import jakarta.persistence.Entity; -import jakarta.persistence.GeneratedValue; -import jakarta.persistence.GenerationType; -import jakarta.persistence.Id; -import roomescape.common.exception.ErrorType; -import roomescape.common.exception.RoomescapeException; +import jakarta.persistence.* +import java.time.LocalTime @Entity -public class ReservationTime { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - - private LocalTime startAt; - - protected ReservationTime() { - } - - public ReservationTime(final LocalTime startAt) { - this(null, startAt); - } - - public ReservationTime(final Long id, final LocalTime startAt) { - this.id = id; - this.startAt = startAt; - - validateNull(); - } - - private void validateNull() { - if (startAt == null) { - throw new RoomescapeException(ErrorType.REQUEST_DATA_BLANK, String.format("[values: %s]", this), - HttpStatus.BAD_REQUEST); - } - } - - public Long getId() { - return id; - } - - public LocalTime getStartAt() { - return startAt; - } - - @Override - public String toString() { - return "ReservationTime{" + - "id=" + id + - ", startAt=" + startAt + - '}'; - } -} +@Table(name = "reservation_time") +class ReservationTimeEntity( + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + var id: Long? = null, + var startAt: LocalTime +) diff --git a/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationTimeRepository.kt b/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationTimeRepository.kt index 8b6a1c0b..26b533b8 100644 --- a/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationTimeRepository.kt +++ b/src/main/java/roomescape/reservation/infrastructure/persistence/ReservationTimeRepository.kt @@ -1,11 +1,8 @@ -package roomescape.reservation.infrastructure.persistence; +package roomescape.reservation.infrastructure.persistence -import java.time.LocalTime; -import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository +import java.time.LocalTime -import org.springframework.data.jpa.repository.JpaRepository; - -public interface ReservationTimeRepository extends JpaRepository { - - List findByStartAt(LocalTime startAt); +interface ReservationTimeRepository : JpaRepository { + fun findByStartAt(startAt: LocalTime): List } diff --git a/src/main/java/roomescape/reservation/web/ReservationResponse.kt b/src/main/java/roomescape/reservation/web/ReservationResponse.kt index d3ea1ec2..e7f41596 100644 --- a/src/main/java/roomescape/reservation/web/ReservationResponse.kt +++ b/src/main/java/roomescape/reservation/web/ReservationResponse.kt @@ -6,7 +6,7 @@ import roomescape.member.web.MemberResponse import roomescape.member.web.MemberResponse.Companion.fromEntity import roomescape.reservation.infrastructure.persistence.Reservation import roomescape.reservation.infrastructure.persistence.ReservationStatus -import roomescape.reservation.infrastructure.persistence.ReservationTime +import roomescape.reservation.infrastructure.persistence.ReservationTimeEntity import roomescape.theme.web.ThemeResponse import java.time.LocalDate import java.time.LocalTime @@ -106,8 +106,8 @@ data class ReservationTimeResponse( companion object { @JvmStatic - fun from(reservationTime: ReservationTime): ReservationTimeResponse { - return ReservationTimeResponse(reservationTime.id, reservationTime.startAt) + fun from(reservationTime: ReservationTimeEntity): ReservationTimeResponse { + return ReservationTimeResponse(reservationTime.id!!, reservationTime.startAt) } } } diff --git a/src/test/java/roomescape/payment/business/PaymentServiceTest.java b/src/test/java/roomescape/payment/business/PaymentServiceTest.java index ef6a43e1..7d48ef0d 100644 --- a/src/test/java/roomescape/payment/business/PaymentServiceTest.java +++ b/src/test/java/roomescape/payment/business/PaymentServiceTest.java @@ -25,7 +25,7 @@ import roomescape.payment.web.ReservationPaymentResponse; import roomescape.reservation.infrastructure.persistence.Reservation; import roomescape.reservation.infrastructure.persistence.ReservationRepository; import roomescape.reservation.infrastructure.persistence.ReservationStatus; -import roomescape.reservation.infrastructure.persistence.ReservationTime; +import roomescape.reservation.infrastructure.persistence.ReservationTimeEntity; import roomescape.reservation.infrastructure.persistence.ReservationTimeRepository; import roomescape.theme.infrastructure.persistence.ThemeEntity; import roomescape.theme.infrastructure.persistence.ThemeRepository; @@ -55,7 +55,7 @@ class PaymentServiceTest { OffsetDateTime.now(), 10000L); LocalDateTime localDateTime = LocalDateTime.now().plusHours(1L); LocalDate date = localDateTime.toLocalDate(); - ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); + ReservationTimeEntity time = reservationTimeRepository.save(new ReservationTimeEntity(null, localDateTime.toLocalTime())); MemberEntity member = memberRepository.save( new MemberEntity(null, "member", "email@email.com", "password", Role.MEMBER)); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "name", "desc", "thumbnail")); @@ -78,7 +78,7 @@ class PaymentServiceTest { OffsetDateTime.now(), 10000L); LocalDateTime localDateTime = LocalDateTime.now().plusHours(1L); LocalDate date = localDateTime.toLocalDate(); - ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); + ReservationTimeEntity time = reservationTimeRepository.save(new ReservationTimeEntity(null, localDateTime.toLocalTime())); MemberEntity member = memberRepository.save( new MemberEntity(null, "member", "email@email.com", "password", Role.MEMBER)); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "name", "desc", "thumbnail")); @@ -116,7 +116,7 @@ class PaymentServiceTest { OffsetDateTime.now(), 10000L); LocalDateTime localDateTime = LocalDateTime.now().plusHours(1L); LocalDate date = localDateTime.toLocalDate(); - ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); + ReservationTimeEntity time = reservationTimeRepository.save(new ReservationTimeEntity(null, localDateTime.toLocalTime())); MemberEntity member = memberRepository.save( new MemberEntity(null, "member", "email@email.com", "password", Role.MEMBER)); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "name", "desc", "thumbnail")); diff --git a/src/test/java/roomescape/reservation/business/ReservationServiceTest.java b/src/test/java/roomescape/reservation/business/ReservationServiceTest.java index c61b8dbf..cf6aa519 100644 --- a/src/test/java/roomescape/reservation/business/ReservationServiceTest.java +++ b/src/test/java/roomescape/reservation/business/ReservationServiceTest.java @@ -22,7 +22,7 @@ import roomescape.member.infrastructure.persistence.Role; import roomescape.reservation.infrastructure.persistence.Reservation; import roomescape.reservation.infrastructure.persistence.ReservationRepository; import roomescape.reservation.infrastructure.persistence.ReservationStatus; -import roomescape.reservation.infrastructure.persistence.ReservationTime; +import roomescape.reservation.infrastructure.persistence.ReservationTimeEntity; import roomescape.reservation.infrastructure.persistence.ReservationTimeRepository; import roomescape.reservation.web.ReservationRequest; import roomescape.reservation.web.ReservationResponse; @@ -51,7 +51,8 @@ class ReservationServiceTest { @DisplayName("예약을 추가할때 이미 예약이 존재하면 예외가 발생한다.") void reservationAlreadyExistFail() { // given - ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(12, 30))); + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(12, 30))); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity member1 = memberRepository.save( new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); @@ -75,7 +76,8 @@ class ReservationServiceTest { @DisplayName("이미 예약한 멤버가 같은 테마에 대기를 신청하면 예외가 발생한다.") void requestWaitWhenAlreadyReserveFail() { // given - ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(12, 30))); + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(12, 30))); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity member = memberRepository.save( new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); @@ -96,7 +98,8 @@ class ReservationServiceTest { @DisplayName("예약 대기를 두 번 이상 요청하면 예외가 발생한다.") void requestWaitTwiceFail() { // given - ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(12, 30))); + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(12, 30))); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity member = memberRepository.save( new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); @@ -122,7 +125,8 @@ class ReservationServiceTest { @DisplayName("이미 지난 날짜로 예약을 생성하면 예외가 발생한다.") void beforeDateReservationFail() { // given - ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(12, 30))); + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(12, 30))); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity member = memberRepository.save( new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); @@ -140,7 +144,8 @@ class ReservationServiceTest { void beforeTimeReservationFail() { // given LocalDateTime beforeTime = LocalDateTime.now().minusHours(1L).withNano(0); - ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(beforeTime.toLocalTime())); + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, beforeTime.toLocalTime())); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity member = memberRepository.save( new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); @@ -157,7 +162,8 @@ class ReservationServiceTest { void notExistMemberReservationFail() { // given LocalDateTime beforeTime = LocalDateTime.now().minusDays(1L).withNano(0); - ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(beforeTime.toLocalTime())); + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, beforeTime.toLocalTime())); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); Long NotExistMemberId = 1L; @@ -185,7 +191,8 @@ class ReservationServiceTest { @DisplayName("대기중인 예약을 승인할 때, 기존에 예약이 존재하면 예외가 발생한다.") void confirmWaitingWhenReservationExist() { // given - ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(12, 30))); + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(12, 30))); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity admin = memberRepository.save( new MemberEntity(null, "admin", "admin@email.com", "password", Role.ADMIN)); @@ -211,7 +218,8 @@ class ReservationServiceTest { @DisplayName("대기중인 예약을 확정한다.") void approveWaiting() { // given - ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(12, 30))); + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(12, 30))); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity admin = memberRepository.save( new MemberEntity(null, "admin", "admin@email.com", "password", Role.ADMIN)); diff --git a/src/test/java/roomescape/reservation/business/ReservationTimeServiceTest.java b/src/test/java/roomescape/reservation/business/ReservationTimeServiceTest.java index 0fc57aed..32cccb52 100644 --- a/src/test/java/roomescape/reservation/business/ReservationTimeServiceTest.java +++ b/src/test/java/roomescape/reservation/business/ReservationTimeServiceTest.java @@ -20,7 +20,7 @@ import roomescape.member.infrastructure.persistence.Role; import roomescape.reservation.infrastructure.persistence.Reservation; import roomescape.reservation.infrastructure.persistence.ReservationRepository; import roomescape.reservation.infrastructure.persistence.ReservationStatus; -import roomescape.reservation.infrastructure.persistence.ReservationTime; +import roomescape.reservation.infrastructure.persistence.ReservationTimeEntity; import roomescape.reservation.infrastructure.persistence.ReservationTimeRepository; import roomescape.reservation.web.ReservationTimeRequest; import roomescape.theme.infrastructure.persistence.ThemeEntity; @@ -46,7 +46,7 @@ class ReservationTimeServiceTest { @DisplayName("중복된 예약 시간을 등록하는 경우 예외가 발생한다.") void duplicateTimeFail() { // given - reservationTimeRepository.save(new ReservationTime(LocalTime.of(12, 30))); + reservationTimeRepository.save(new ReservationTimeEntity(null, LocalTime.of(12, 30))); // when & then assertThatThrownBy(() -> reservationTimeService.addTime(new ReservationTimeRequest(LocalTime.of(12, 30)))) @@ -57,7 +57,7 @@ class ReservationTimeServiceTest { @DisplayName("존재하지 않는 ID로 시간을 조회하면 예외가 발생한다.") void findTimeByIdFail() { // given - ReservationTime saved = reservationTimeRepository.save(new ReservationTime(LocalTime.of(12, 30))); + ReservationTimeEntity saved = reservationTimeRepository.save(new ReservationTimeEntity(null, LocalTime.of(12, 30))); // when Long invalidTimeId = saved.getId() + 1; @@ -72,8 +72,8 @@ class ReservationTimeServiceTest { void usingTimeDeleteFail() { // given LocalDateTime localDateTime = LocalDateTime.now().plusDays(1L).withNano(0); - ReservationTime reservationTime = reservationTimeRepository.save( - new ReservationTime(localDateTime.toLocalTime())); + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, localDateTime.toLocalTime())); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity member = memberRepository.save( new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); diff --git a/src/test/java/roomescape/reservation/business/ReservationWithPaymentServiceTest.java b/src/test/java/roomescape/reservation/business/ReservationWithPaymentServiceTest.java index 45017021..ebe9f602 100644 --- a/src/test/java/roomescape/reservation/business/ReservationWithPaymentServiceTest.java +++ b/src/test/java/roomescape/reservation/business/ReservationWithPaymentServiceTest.java @@ -24,7 +24,7 @@ import roomescape.payment.web.PaymentCancel; import roomescape.reservation.infrastructure.persistence.Reservation; import roomescape.reservation.infrastructure.persistence.ReservationRepository; import roomescape.reservation.infrastructure.persistence.ReservationStatus; -import roomescape.reservation.infrastructure.persistence.ReservationTime; +import roomescape.reservation.infrastructure.persistence.ReservationTimeEntity; import roomescape.reservation.infrastructure.persistence.ReservationTimeRepository; import roomescape.reservation.web.ReservationRequest; import roomescape.reservation.web.ReservationResponse; @@ -58,7 +58,7 @@ class ReservationWithPaymentServiceTest { OffsetDateTime.now(), 10000L); LocalDateTime localDateTime = LocalDateTime.now().plusDays(1L).withNano(0); LocalDate date = localDateTime.toLocalDate(); - ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); + ReservationTimeEntity time = reservationTimeRepository.save(new ReservationTimeEntity(null, localDateTime.toLocalTime())); MemberEntity member = memberRepository.save( new MemberEntity(null, "member", "email@email.com", "password", Role.MEMBER)); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "name", "desc", "thumbnail")); @@ -95,7 +95,7 @@ class ReservationWithPaymentServiceTest { OffsetDateTime.now(), 10000L); LocalDateTime localDateTime = LocalDateTime.now().plusDays(1L).withNano(0); LocalDate date = localDateTime.toLocalDate(); - ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); + ReservationTimeEntity time = reservationTimeRepository.save(new ReservationTimeEntity(null, localDateTime.toLocalTime())); MemberEntity member = memberRepository.save( new MemberEntity(null, "member", "admin@email.com", "password", Role.ADMIN)); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "name", "desc", "thumbnail")); @@ -124,7 +124,7 @@ class ReservationWithPaymentServiceTest { OffsetDateTime.now(), 10000L); LocalDateTime localDateTime = LocalDateTime.now().plusHours(1L); LocalDate date = localDateTime.toLocalDate(); - ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); + ReservationTimeEntity time = reservationTimeRepository.save(new ReservationTimeEntity(null, localDateTime.toLocalTime())); MemberEntity member = memberRepository.save( new MemberEntity(null, "member", "admin@email.com", "password", Role.ADMIN)); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "name", "desc", "thumbnail")); @@ -147,7 +147,7 @@ class ReservationWithPaymentServiceTest { OffsetDateTime.now(), 10000L); LocalDateTime localDateTime = LocalDateTime.now().plusDays(1L).withNano(0); LocalDate date = localDateTime.toLocalDate(); - ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); + ReservationTimeEntity time = reservationTimeRepository.save(new ReservationTimeEntity(null, localDateTime.toLocalTime())); MemberEntity member = memberRepository.save( new MemberEntity(null, "member", "admin@email.com", "password", Role.ADMIN)); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "name", "desc", "thumbnail")); diff --git a/src/test/java/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecificationTest.kt b/src/test/java/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecificationTest.kt index be918324..263be63e 100644 --- a/src/test/java/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecificationTest.kt +++ b/src/test/java/roomescape/reservation/infrastructure/persistence/ReservationSearchSpecificationTest.kt @@ -25,7 +25,7 @@ class ReservationSearchSpecificationTest( lateinit var confirmedNotPaidYesterday: Reservation lateinit var waitingTomorrow: Reservation lateinit var member: MemberEntity - lateinit var reservationTime: ReservationTime + lateinit var reservationTime: ReservationTimeEntity lateinit var theme: ThemeEntity "동일한 테마의 예약을 조회한다" { diff --git a/src/test/java/roomescape/reservation/infrastructure/persistence/ReservationTest.java b/src/test/java/roomescape/reservation/infrastructure/persistence/ReservationTest.java index db467956..9c0bf1e4 100644 --- a/src/test/java/roomescape/reservation/infrastructure/persistence/ReservationTest.java +++ b/src/test/java/roomescape/reservation/infrastructure/persistence/ReservationTest.java @@ -20,7 +20,7 @@ public class ReservationTest { @ParameterizedTest @MethodSource("validateConstructorParameterBlankSource") @DisplayName("객체 생성 시, null 또는 공백이 존재하면 예외를 발생한다.") - void validateConstructorParameterBlank(LocalDate date, ReservationTime reservationTime, ThemeEntity theme, + void validateConstructorParameterBlank(LocalDate date, ReservationTimeEntity reservationTime, ThemeEntity theme, MemberEntity member) { // when & then @@ -32,7 +32,7 @@ public class ReservationTest { static Stream validateConstructorParameterBlankSource() { return Stream.of( Arguments.of(null, - new ReservationTime(LocalTime.now().plusHours(1)), + new ReservationTimeEntity(null, LocalTime.now().plusHours(1)), new ThemeEntity(null, "테마명", "설명", "썸네일URI"), new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)), Arguments.of( @@ -42,12 +42,12 @@ public class ReservationTest { new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)), Arguments.of( LocalDate.now(), - new ReservationTime(LocalTime.now().plusHours(1)), + new ReservationTimeEntity(null, LocalTime.now().plusHours(1)), null, new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)), Arguments.of( LocalDate.now(), - new ReservationTime(LocalTime.now().plusHours(1)), + new ReservationTimeEntity(null, LocalTime.now().plusHours(1)), new ThemeEntity(null, "테마명", "설명", "썸네일URI"), null) ); diff --git a/src/test/java/roomescape/reservation/infrastructure/persistence/ReservationTimeTest.java b/src/test/java/roomescape/reservation/infrastructure/persistence/ReservationTimeTest.java deleted file mode 100644 index 18260e0e..00000000 --- a/src/test/java/roomescape/reservation/infrastructure/persistence/ReservationTimeTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package roomescape.reservation.infrastructure.persistence; - -import org.assertj.core.api.Assertions; -import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; - -import roomescape.common.exception.RoomescapeException; - -class ReservationTimeTest { - - @Test - @DisplayName("객체 생성 시, null이 존재하면 예외를 발생한다.") - void validateConstructorParameterNull() { - - // when & then - Assertions.assertThatThrownBy(() -> new ReservationTime(null)) - .isInstanceOf(RoomescapeException.class); - } -} diff --git a/src/test/java/roomescape/reservation/web/ReservationControllerTest.java b/src/test/java/roomescape/reservation/web/ReservationControllerTest.java index 8c7d727a..5099ec66 100644 --- a/src/test/java/roomescape/reservation/web/ReservationControllerTest.java +++ b/src/test/java/roomescape/reservation/web/ReservationControllerTest.java @@ -45,7 +45,7 @@ import roomescape.payment.web.PaymentCancel; import roomescape.reservation.infrastructure.persistence.Reservation; import roomescape.reservation.infrastructure.persistence.ReservationRepository; import roomescape.reservation.infrastructure.persistence.ReservationStatus; -import roomescape.reservation.infrastructure.persistence.ReservationTime; +import roomescape.reservation.infrastructure.persistence.ReservationTimeEntity; import roomescape.reservation.infrastructure.persistence.ReservationTimeRepository; import roomescape.theme.infrastructure.persistence.ThemeEntity; import roomescape.theme.infrastructure.persistence.ThemeRepository; @@ -86,7 +86,7 @@ public class ReservationControllerTest { LocalTime time = LocalTime.of(17, 30); LocalDate date = LocalDate.now().plusDays(1L); - reservationTimeRepository.save(new ReservationTime(time)); + reservationTimeRepository.save(new ReservationTimeEntity(null, time)); themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); Map reservationParams = Map.of( @@ -122,7 +122,8 @@ public class ReservationControllerTest { new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); String accessTokenCookie = getAccessTokenCookieByLogin("email@email.com", "password"); - ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30))); + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(17, 30))); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity member1 = memberRepository.save( new MemberEntity(null, "name1", "email1r@email.com", "password", Role.MEMBER)); @@ -151,7 +152,8 @@ public class ReservationControllerTest { new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); String accessTokenCookie = getAccessTokenCookieByLogin("email@email.com", "password"); - ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30))); + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(17, 30))); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity waitingMember = memberRepository.save( new MemberEntity(null, "name1", "email1r@email.com", "password", Role.MEMBER)); @@ -178,7 +180,8 @@ public class ReservationControllerTest { // given String accessTokenCookie = getAdminAccessTokenCookieByLogin("admin@admin.com", "12341234"); - ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30))); + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(17, 30))); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity member = memberRepository.save( new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); @@ -209,7 +212,8 @@ public class ReservationControllerTest { new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); String accessTokenCookie = getAccessTokenCookieByLogin(member.getEmail(), member.getPassword()); - ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30))); + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(17, 30))); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); Reservation reservation = reservationRepository.save( new Reservation(LocalDate.now(), reservationTime, theme, member, ReservationStatus.CONFIRMED)); @@ -229,7 +233,8 @@ public class ReservationControllerTest { // given String adminTokenCookie = getAdminAccessTokenCookieByLogin("admin@email.com", "password"); - ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30))); + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(17, 30))); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity confirmedMember = memberRepository.save( new MemberEntity(null, "name1", "email@email.com", "password", Role.MEMBER)); @@ -258,7 +263,8 @@ public class ReservationControllerTest { new MemberEntity(null, "name", "admin@admin.com", "password", Role.ADMIN)); String accessTokenCookie = getAccessTokenCookieByLogin(member.getEmail(), member.getPassword()); - ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30))); + ReservationTimeEntity reservationTime = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(17, 30))); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity anotherMember = memberRepository.save( new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); @@ -341,9 +347,12 @@ public class ReservationControllerTest { // given LocalDate date = LocalDate.now().plusDays(1); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); - ReservationTime time = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30))); - ReservationTime time1 = reservationTimeRepository.save(new ReservationTime(LocalTime.of(18, 30))); - ReservationTime time2 = reservationTimeRepository.save(new ReservationTime(LocalTime.of(19, 30))); + ReservationTimeEntity time = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(17, 30))); + ReservationTimeEntity time1 = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(18, 30))); + ReservationTimeEntity time2 = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(19, 30))); MemberEntity member = memberRepository.save( new MemberEntity(null, "name", "email@email.com", "password", Role.ADMIN)); @@ -371,7 +380,8 @@ public class ReservationControllerTest { // given LocalDate date = LocalDate.now().plusDays(1); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); - ReservationTime time = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30))); + ReservationTimeEntity time = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(17, 30))); String accessToken = getAdminAccessTokenCookieByLogin("admin@email.com", "password"); // when @@ -395,7 +405,8 @@ public class ReservationControllerTest { String accessToken = getAdminAccessTokenCookieByLogin("admin@email.com", "password"); LocalDate date = LocalDate.now().plusDays(1); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); - ReservationTime time = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30))); + ReservationTimeEntity time = reservationTimeRepository.save( + new ReservationTimeEntity(null, LocalTime.of(17, 30))); MemberEntity member = memberRepository.save( new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); @@ -425,7 +436,8 @@ public class ReservationControllerTest { // given LocalDateTime localDateTime = LocalDateTime.now().minusHours(1L).withNano(0); LocalDate date = localDateTime.toLocalDate(); - ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); + ReservationTimeEntity time = reservationTimeRepository.save( + new ReservationTimeEntity(null, localDateTime.toLocalTime())); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity member = memberRepository.save( new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); @@ -519,7 +531,8 @@ public class ReservationControllerTest { // given LocalDateTime localDateTime = LocalDateTime.now().plusDays(1L).withNano(0); LocalDate date = localDateTime.toLocalDate(); - ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); + ReservationTimeEntity time = reservationTimeRepository.save( + new ReservationTimeEntity(null, localDateTime.toLocalTime())); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity member = memberRepository.save( new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); @@ -547,7 +560,8 @@ public class ReservationControllerTest { // given LocalDateTime localDateTime = LocalDateTime.now().plusHours(1L); LocalDate date = localDateTime.toLocalDate(); - ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); + ReservationTimeEntity time = reservationTimeRepository.save( + new ReservationTimeEntity(null, localDateTime.toLocalTime())); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity member = memberRepository.save( new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); @@ -593,7 +607,8 @@ public class ReservationControllerTest { // given LocalDateTime localDateTime = LocalDateTime.now().plusDays(1L).withNano(0); LocalDate date = localDateTime.toLocalDate(); - ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime())); + ReservationTimeEntity time = reservationTimeRepository.save( + new ReservationTimeEntity(null, localDateTime.toLocalTime())); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL")); MemberEntity member = memberRepository.save( new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); diff --git a/src/test/java/roomescape/reservation/web/ReservationTimeControllerTest.java b/src/test/java/roomescape/reservation/web/ReservationTimeControllerTest.java index d809a355..8fd946a5 100644 --- a/src/test/java/roomescape/reservation/web/ReservationTimeControllerTest.java +++ b/src/test/java/roomescape/reservation/web/ReservationTimeControllerTest.java @@ -27,7 +27,7 @@ import roomescape.member.infrastructure.persistence.Role; import roomescape.reservation.infrastructure.persistence.Reservation; import roomescape.reservation.infrastructure.persistence.ReservationRepository; import roomescape.reservation.infrastructure.persistence.ReservationStatus; -import roomescape.reservation.infrastructure.persistence.ReservationTime; +import roomescape.reservation.infrastructure.persistence.ReservationTimeEntity; import roomescape.reservation.infrastructure.persistence.ReservationTimeRepository; import roomescape.theme.infrastructure.persistence.ThemeEntity; import roomescape.theme.infrastructure.persistence.ThemeRepository; @@ -221,9 +221,9 @@ public class ReservationTimeControllerTest { void readReservationByDateAndThemeId() { // given LocalDate today = LocalDate.now(); - ReservationTime reservationTime1 = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 0))); - ReservationTime reservationTime2 = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30))); - ReservationTime reservationTime3 = reservationTimeRepository.save(new ReservationTime(LocalTime.of(18, 30))); + ReservationTimeEntity reservationTime1 = reservationTimeRepository.save(new ReservationTimeEntity(null, LocalTime.of(17, 0))); + ReservationTimeEntity reservationTime2 = reservationTimeRepository.save(new ReservationTimeEntity(null, LocalTime.of(17, 30))); + ReservationTimeEntity reservationTime3 = reservationTimeRepository.save(new ReservationTimeEntity(null, LocalTime.of(18, 30))); ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명1", "설명", "썸네일URL")); MemberEntity member = memberRepository.save( new MemberEntity(null, "name", "email@email.com", "password", Role.MEMBER)); diff --git a/src/test/java/roomescape/theme/util/TestThemeCreateUtil.kt b/src/test/java/roomescape/theme/util/TestThemeCreateUtil.kt index 33756ae6..0f05cdfa 100644 --- a/src/test/java/roomescape/theme/util/TestThemeCreateUtil.kt +++ b/src/test/java/roomescape/theme/util/TestThemeCreateUtil.kt @@ -3,7 +3,7 @@ package roomescape.theme.util import jakarta.persistence.EntityManager import roomescape.member.infrastructure.persistence.MemberEntity import roomescape.reservation.infrastructure.persistence.ReservationStatus -import roomescape.reservation.infrastructure.persistence.ReservationTime +import roomescape.reservation.infrastructure.persistence.ReservationTimeEntity import roomescape.theme.infrastructure.persistence.ThemeEntity import roomescape.util.MemberFixture import roomescape.util.ReservationFixture @@ -23,7 +23,7 @@ object TestThemeCreateUtil { val member: MemberEntity = MemberFixture.create().also { entityManager.persist(it) } for (i in 1..reservedCount) { - val time: ReservationTime = ReservationTimeFixture.create( + val time: ReservationTimeEntity = ReservationTimeFixture.create( startAt = LocalTime.now().plusMinutes(i.toLong()) ).also { entityManager.persist(it) } diff --git a/src/test/java/roomescape/util/Fixtures.kt b/src/test/java/roomescape/util/Fixtures.kt index 07aca7c2..a1d4e01a 100644 --- a/src/test/java/roomescape/util/Fixtures.kt +++ b/src/test/java/roomescape/util/Fixtures.kt @@ -10,7 +10,7 @@ import roomescape.payment.web.PaymentApprove import roomescape.payment.web.PaymentCancel import roomescape.reservation.infrastructure.persistence.Reservation import roomescape.reservation.infrastructure.persistence.ReservationStatus -import roomescape.reservation.infrastructure.persistence.ReservationTime +import roomescape.reservation.infrastructure.persistence.ReservationTimeEntity import roomescape.theme.infrastructure.persistence.ThemeEntity import java.time.LocalDate import java.time.LocalTime @@ -55,7 +55,7 @@ object ReservationTimeFixture { fun create( id: Long? = null, startAt: LocalTime = LocalTime.now().plusHours(1), - ): ReservationTime = ReservationTime(id, startAt) + ): ReservationTimeEntity = ReservationTimeEntity(id, startAt) } object ThemeFixture { @@ -72,7 +72,7 @@ object ReservationFixture { id: Long? = null, date: LocalDate = LocalDate.now().plusWeeks(1), theme: ThemeEntity = ThemeFixture.create(), - reservationTime: ReservationTime = ReservationTimeFixture.create(), + reservationTime: ReservationTimeEntity = ReservationTimeFixture.create(), member: MemberEntity = MemberFixture.create(), status: ReservationStatus = ReservationStatus.CONFIRMED_PAYMENT_REQUIRED ): Reservation = Reservation(id, date, reservationTime, theme, member, status)