refactor: ReservationTime 및 Repository 코틀린 전환 및 클래스명 수정(-> ReservationTimeEntity)

This commit is contained in:
이상진 2025-07-18 15:48:42 +09:00
parent ceed888d5c
commit 2241f38b77
19 changed files with 114 additions and 159 deletions

View File

@ -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);

View File

@ -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<ReservationTime> duplicateReservationTimes = reservationTimeRepository.findByStartAt(
List<ReservationTimeEntity> 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<Reservation> 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<ReservationTime> allTimes = reservationTimeRepository.findAll();
List<ReservationTimeEntity> allTimes = reservationTimeRepository.findAll();
List<Reservation> reservations = reservationRepository.findByThemeId(themeId);
List<ReservationTimeInfoResponse> response = allTimes.stream()
@ -95,7 +95,7 @@ public class ReservationTimeService {
return new ReservationTimeInfosResponse(response);
}
private boolean isReservationBooked(List<Reservation> reservations, LocalDate date, ReservationTime time) {
private boolean isReservationBooked(List<Reservation> reservations, LocalDate date, ReservationTimeEntity time) {
return reservations.stream()
.anyMatch(reservation -> reservation.isSameDateAndTime(date, time));
}

View File

@ -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());
}

View File

@ -12,7 +12,7 @@ import roomescape.reservation.web.MyReservationResponse;
public interface ReservationRepository extends JpaRepository<Reservation, Long>, JpaSpecificationExecutor<Reservation> {
List<Reservation> findByReservationTime(ReservationTime reservationTime);
List<Reservation> findByReservationTime(ReservationTimeEntity reservationTime);
List<Reservation> findByThemeId(Long themeId);

View File

@ -22,7 +22,7 @@ class ReservationSearchSpecification(
fun sameTimeId(timeId: Long?): ReservationSearchSpecification = andIfNotNull(timeId?.let {
Specification { root, _, cb ->
cb.equal(root.get<ReservationTime>("reservationTime").get<Long>("id"), timeId)
cb.equal(root.get<ReservationTimeEntity>("reservationTime").get<Long>("id"), timeId)
}
})

View File

@ -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 {
@Table(name = "reservation_time")
class ReservationTimeEntity(
@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 +
'}';
}
}
var id: Long? = null,
var startAt: LocalTime
)

View File

@ -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<ReservationTime, Long> {
List<ReservationTime> findByStartAt(LocalTime startAt);
interface ReservationTimeRepository : JpaRepository<ReservationTimeEntity, Long> {
fun findByStartAt(startAt: LocalTime): List<ReservationTimeEntity>
}

View File

@ -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)
}
}
}

View File

@ -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"));

View File

@ -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));

View File

@ -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));

View File

@ -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"));

View File

@ -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
"동일한 테마의 예약을 조회한다" {

View File

@ -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<Arguments> 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)
);

View File

@ -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);
}
}

View File

@ -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<String, String> 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));

View File

@ -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));

View File

@ -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) }

View File

@ -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)