refactor: Theme 클래스 코틀린 전환 및 클래스명 변경(-> ThemeEntity)

This commit is contained in:
이상진 2025-07-17 18:24:59 +09:00
parent b6dd89c9d4
commit c9ab0aff95
17 changed files with 96 additions and 142 deletions

View File

@ -18,7 +18,7 @@ import jakarta.persistence.ManyToOne;
import roomescape.common.exception.ErrorType;
import roomescape.common.exception.RoomescapeException;
import roomescape.member.infrastructure.persistence.Member;
import roomescape.theme.infrastructure.persistence.Theme;
import roomescape.theme.infrastructure.persistence.ThemeEntity;
@Entity
public class Reservation {
@ -35,7 +35,7 @@ public class Reservation {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "theme_id", nullable = false)
private Theme theme;
private ThemeEntity theme;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "member_id", nullable = false)
@ -50,7 +50,7 @@ public class Reservation {
public Reservation(
LocalDate date,
ReservationTime reservationTime,
Theme theme,
ThemeEntity theme,
Member member,
ReservationStatus status
) {
@ -61,7 +61,7 @@ public class Reservation {
Long id,
LocalDate date,
ReservationTime reservationTime,
Theme theme,
ThemeEntity theme,
Member member,
ReservationStatus status
) {
@ -74,7 +74,7 @@ public class Reservation {
this.reservationStatus = status;
}
private void validateIsNull(LocalDate date, ReservationTime reservationTime, Theme theme, Member member,
private void validateIsNull(LocalDate date, ReservationTime reservationTime, ThemeEntity theme, Member 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),
@ -98,7 +98,7 @@ public class Reservation {
return reservationTime;
}
public Theme getTheme() {
public ThemeEntity getTheme() {
return theme;
}

View File

@ -24,7 +24,7 @@ import roomescape.reservation.dto.request.WaitingRequest;
import roomescape.reservation.dto.response.MyReservationsResponse;
import roomescape.reservation.dto.response.ReservationResponse;
import roomescape.reservation.dto.response.ReservationsResponse;
import roomescape.theme.infrastructure.persistence.Theme;
import roomescape.theme.infrastructure.persistence.ThemeEntity;
import roomescape.theme.business.ThemeService;
@Service
@ -146,7 +146,7 @@ public class ReservationService {
private Reservation getReservationForSave(Long timeId, Long themeId, LocalDate date, Long memberId,
ReservationStatus status) {
ReservationTime time = reservationTimeService.findTimeById(timeId);
Theme theme = themeService.findThemeById(themeId);
ThemeEntity theme = themeService.findThemeById(themeId);
Member member = memberService.findById(memberId);
validateDateAndTime(date, time);

View File

@ -9,7 +9,7 @@ import org.springframework.transaction.annotation.Transactional;
import roomescape.common.exception.ErrorType;
import roomescape.common.exception.RoomescapeException;
import roomescape.theme.infrastructure.persistence.Theme;
import roomescape.theme.infrastructure.persistence.ThemeEntity;
import roomescape.theme.infrastructure.persistence.ThemeRepository;
import roomescape.theme.web.ThemeRequest;
import roomescape.theme.web.ThemeResponse;
@ -26,7 +26,7 @@ public class ThemeService {
}
@Transactional(readOnly = true)
public Theme findThemeById(Long id) {
public ThemeEntity findThemeById(Long id) {
return themeRepository.findById(id)
.orElseThrow(() -> new RoomescapeException(ErrorType.THEME_NOT_FOUND,
String.format("[themeId: %d]", id), HttpStatus.BAD_REQUEST));
@ -59,7 +59,7 @@ public class ThemeService {
public ThemeResponse addTheme(ThemeRequest request) {
validateIsSameThemeNameExist(request.name());
Theme theme = themeRepository.save(new Theme(request.name(), request.description(), request.thumbnail()));
ThemeEntity theme = themeRepository.save(new ThemeEntity(request.name(), request.description(), request.thumbnail()));
return ThemeResponse.from(theme);
}

View File

@ -1,65 +1,15 @@
package roomescape.theme.infrastructure.persistence;
package roomescape.theme.infrastructure.persistence
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.*
@Entity
public class Theme {
@Table(name = "theme")
class ThemeEntity(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var id: Long? = null,
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String description;
private String thumbnail;
protected Theme() {
}
public Theme(String name, String description, String thumbnail) {
this(null, name, description, thumbnail);
}
public Theme(
Long id,
String name,
String description,
String thumbnail
) {
this.id = id;
this.name = name;
this.description = description;
this.thumbnail = thumbnail;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public String getDescription() {
return description;
}
public String getThumbnail() {
return thumbnail;
}
@Override
public String toString() {
return "Theme{" +
"id=" + id +
", name=" + name +
", description=" + description +
", thumbnail=" + thumbnail +
'}';
}
}
var name: String,
var description: String,
var thumbnail: String
)

View File

@ -6,18 +6,18 @@ import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
public interface ThemeRepository extends JpaRepository<Theme, Long> {
public interface ThemeRepository extends JpaRepository<ThemeEntity, Long> {
@Query(value = """
SELECT t
FROM Theme t
FROM ThemeEntity t
RIGHT JOIN Reservation r ON t.id = r.theme.id
WHERE r.date BETWEEN :startDate AND :endDate
GROUP BY r.theme.id
ORDER BY COUNT(r.theme.id) DESC, t.id ASC
LIMIT :limit
""")
List<Theme> findTopNThemeBetweenStartDateAndEndDate(LocalDate startDate, LocalDate endDate, int limit);
List<ThemeEntity> findTopNThemeBetweenStartDateAndEndDate(LocalDate startDate, LocalDate endDate, int limit);
boolean existsByName(String name);

View File

@ -4,7 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema
import jakarta.validation.constraints.NotBlank
import jakarta.validation.constraints.Size
import org.hibernate.validator.constraints.URL
import roomescape.theme.infrastructure.persistence.Theme
import roomescape.theme.infrastructure.persistence.ThemeEntity
@Schema(name = "테마 저장 요청", description = "테마 정보를 저장할 때 사용합니다.")
@JvmRecord
@ -42,14 +42,14 @@ data class ThemeResponse(
) {
companion object {
@JvmStatic
fun from(theme: Theme): ThemeResponse {
return ThemeResponse(theme.id, theme.name, theme.description, theme.thumbnail)
fun from(themeEntity: ThemeEntity): ThemeResponse {
return ThemeResponse(themeEntity.id!!, themeEntity.name, themeEntity.description, themeEntity.thumbnail)
}
}
}
fun Theme.toResponse(): ThemeResponse = ThemeResponse(
id = this.id,
fun ThemeEntity.toResponse(): ThemeResponse = ThemeResponse(
id = this.id!!,
name = this.name,
description = this.description,
thumbnail = this.thumbnail
@ -62,3 +62,7 @@ data class ThemesResponse(
@field:Schema(description = "모든 테마 목록")
val themes: List<ThemeResponse>
)
fun List<ThemeEntity>.toResponse(): ThemesResponse = ThemesResponse(
themes = this.map { it.toResponse()}
)

View File

@ -27,7 +27,7 @@ import roomescape.reservation.domain.ReservationStatus;
import roomescape.reservation.domain.ReservationTime;
import roomescape.reservation.domain.repository.ReservationRepository;
import roomescape.reservation.domain.repository.ReservationTimeRepository;
import roomescape.theme.infrastructure.persistence.Theme;
import roomescape.theme.infrastructure.persistence.ThemeEntity;
import roomescape.theme.infrastructure.persistence.ThemeRepository;
@SpringBootTest
@ -57,7 +57,7 @@ class PaymentServiceTest {
LocalDate date = localDateTime.toLocalDate();
ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime()));
Member member = memberRepository.save(new Member(null, "member", "email@email.com", "password", Role.MEMBER));
Theme theme = themeRepository.save(new Theme("name", "desc", "thumbnail"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "name", "desc", "thumbnail"));
Reservation reservation = reservationRepository.save(new Reservation(date, time, theme, member,
ReservationStatus.CONFIRMED));
@ -79,7 +79,7 @@ class PaymentServiceTest {
LocalDate date = localDateTime.toLocalDate();
ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime()));
Member member = memberRepository.save(new Member(null, "member", "email@email.com", "password", Role.MEMBER));
Theme theme = themeRepository.save(new Theme("name", "desc", "thumbnail"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "name", "desc", "thumbnail"));
Reservation reservation = reservationRepository.save(new Reservation(date, time, theme, member,
ReservationStatus.CONFIRMED));
@ -116,7 +116,7 @@ class PaymentServiceTest {
LocalDate date = localDateTime.toLocalDate();
ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime()));
Member member = memberRepository.save(new Member(null, "member", "email@email.com", "password", Role.MEMBER));
Theme theme = themeRepository.save(new Theme("name", "desc", "thumbnail"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "name", "desc", "thumbnail"));
Reservation reservation = reservationRepository.save(new Reservation(date, time, theme, member,
ReservationStatus.CONFIRMED));

View File

@ -49,7 +49,7 @@ import roomescape.reservation.domain.repository.ReservationTimeRepository;
import roomescape.reservation.dto.request.AdminReservationRequest;
import roomescape.reservation.dto.request.ReservationRequest;
import roomescape.reservation.dto.request.WaitingRequest;
import roomescape.theme.infrastructure.persistence.Theme;
import roomescape.theme.infrastructure.persistence.ThemeEntity;
import roomescape.theme.infrastructure.persistence.ThemeRepository;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ -89,7 +89,7 @@ public class ReservationControllerTest {
LocalDate date = LocalDate.now().plusDays(1L);
reservationTimeRepository.save(new ReservationTime(time));
themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Map<String, String> reservationParams = Map.of(
"date", date.toString(),
@ -124,7 +124,7 @@ public class ReservationControllerTest {
String accessTokenCookie = getAccessTokenCookieByLogin("email@email.com", "password");
ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30)));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member member1 = memberRepository.save(new Member(null, "name1", "email1r@email.com", "password", Role.MEMBER));
// when
@ -152,7 +152,7 @@ public class ReservationControllerTest {
String accessTokenCookie = getAccessTokenCookieByLogin("email@email.com", "password");
ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30)));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member waitingMember = memberRepository.save(
new Member(null, "name1", "email1r@email.com", "password", Role.MEMBER));
@ -179,7 +179,7 @@ public class ReservationControllerTest {
String accessTokenCookie = getAdminAccessTokenCookieByLogin("admin@admin.com", "12341234");
ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30)));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member member = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));
// when
@ -208,7 +208,7 @@ public class ReservationControllerTest {
String accessTokenCookie = getAccessTokenCookieByLogin(member.getEmail(), member.getPassword());
ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30)));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Reservation reservation = reservationRepository.save(
new Reservation(LocalDate.now(), reservationTime, theme, member, ReservationStatus.CONFIRMED));
@ -228,7 +228,7 @@ public class ReservationControllerTest {
String adminTokenCookie = getAdminAccessTokenCookieByLogin("admin@email.com", "password");
ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30)));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member confirmedMember = memberRepository.save(
new Member(null, "name1", "email@email.com", "password", Role.MEMBER));
Member waitingMember = memberRepository.save(
@ -256,7 +256,7 @@ public class ReservationControllerTest {
String accessTokenCookie = getAccessTokenCookieByLogin(member.getEmail(), member.getPassword());
ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30)));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member anotherMember = memberRepository.save(
new Member(null, "name", "email@email.com", "password", Role.MEMBER));
@ -337,7 +337,7 @@ public class ReservationControllerTest {
void getAllReservations(String requestURI, String responseFieldName, int expectedSize) {
// given
LocalDate date = LocalDate.now().plusDays(1);
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
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)));
@ -366,7 +366,7 @@ public class ReservationControllerTest {
void removeNotPaidReservation() {
// given
LocalDate date = LocalDate.now().plusDays(1);
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
ReservationTime time = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30)));
String accessToken = getAdminAccessTokenCookieByLogin("admin@email.com", "password");
@ -390,7 +390,7 @@ public class ReservationControllerTest {
// given
String accessToken = getAdminAccessTokenCookieByLogin("admin@email.com", "password");
LocalDate date = LocalDate.now().plusDays(1);
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
ReservationTime time = reservationTimeRepository.save(new ReservationTime(LocalTime.of(17, 30)));
Member member = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));
@ -421,7 +421,7 @@ public class ReservationControllerTest {
LocalDateTime localDateTime = LocalDateTime.now().minusHours(1L).withNano(0);
LocalDate date = localDateTime.toLocalDate();
ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime()));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member member = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));
String accessToken = getAccessTokenCookieByLogin(member.getEmail(), member.getPassword());
@ -514,7 +514,7 @@ public class ReservationControllerTest {
LocalDateTime localDateTime = LocalDateTime.now().plusDays(1L).withNano(0);
LocalDate date = localDateTime.toLocalDate();
ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime()));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member member = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));
Member member1 = memberRepository.save(new Member(null, "name1", "email1@email.com", "password", Role.MEMBER));
@ -540,7 +540,7 @@ public class ReservationControllerTest {
LocalDateTime localDateTime = LocalDateTime.now().plusHours(1L);
LocalDate date = localDateTime.toLocalDate();
ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime()));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member member = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));
String accessToken = getAdminAccessTokenCookieByLogin("admin@email.com", "password");
@ -585,7 +585,7 @@ public class ReservationControllerTest {
LocalDateTime localDateTime = LocalDateTime.now().plusDays(1L).withNano(0);
LocalDate date = localDateTime.toLocalDate();
ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime()));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member member = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));
String adminAccessToken = getAdminAccessTokenCookieByLogin("admin@email.com", "password");

View File

@ -29,7 +29,7 @@ import roomescape.reservation.domain.ReservationStatus;
import roomescape.reservation.domain.ReservationTime;
import roomescape.reservation.domain.repository.ReservationRepository;
import roomescape.reservation.domain.repository.ReservationTimeRepository;
import roomescape.theme.infrastructure.persistence.Theme;
import roomescape.theme.infrastructure.persistence.ThemeEntity;
import roomescape.theme.infrastructure.persistence.ThemeRepository;
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@ -224,7 +224,7 @@ public class ReservationTimeControllerTest {
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)));
Theme theme = themeRepository.save(new Theme("테마명1", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명1", "설명", "썸네일URL"));
Member member = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));
reservationRepository.save(

View File

@ -13,14 +13,14 @@ import org.junit.jupiter.params.provider.MethodSource;
import roomescape.member.infrastructure.persistence.Member;
import roomescape.member.infrastructure.persistence.Role;
import roomescape.common.exception.RoomescapeException;
import roomescape.theme.infrastructure.persistence.Theme;
import roomescape.theme.infrastructure.persistence.ThemeEntity;
public class ReservationTest {
@ParameterizedTest
@MethodSource("validateConstructorParameterBlankSource")
@DisplayName("객체 생성 시, null 또는 공백이 존재하면 예외를 발생한다.")
void validateConstructorParameterBlank(LocalDate date, ReservationTime reservationTime, Theme theme,
void validateConstructorParameterBlank(LocalDate date, ReservationTime reservationTime, ThemeEntity theme,
Member member) {
// when & then
@ -33,12 +33,12 @@ public class ReservationTest {
return Stream.of(
Arguments.of(null,
new ReservationTime(LocalTime.now().plusHours(1)),
new Theme("테마명", "설명", "썸네일URI"),
new ThemeEntity(null, "테마명", "설명", "썸네일URI"),
new Member(null, "name", "email@email.com", "password", Role.MEMBER)),
Arguments.of(
LocalDate.now(),
null,
new Theme("테마명", "설명", "썸네일URI"),
new ThemeEntity(null, "테마명", "설명", "썸네일URI"),
new Member(null, "name", "email@email.com", "password", Role.MEMBER)),
Arguments.of(
LocalDate.now(),
@ -48,7 +48,7 @@ public class ReservationTest {
Arguments.of(
LocalDate.now(),
new ReservationTime(LocalTime.now().plusHours(1)),
new Theme("테마명", "설명", "썸네일URI"),
new ThemeEntity(null, "테마명", "설명", "썸네일URI"),
null)
);
}

View File

@ -19,7 +19,7 @@ import roomescape.member.infrastructure.persistence.Role;
import roomescape.reservation.domain.Reservation;
import roomescape.reservation.domain.ReservationStatus;
import roomescape.reservation.domain.ReservationTime;
import roomescape.theme.infrastructure.persistence.Theme;
import roomescape.theme.infrastructure.persistence.ThemeEntity;
import roomescape.theme.infrastructure.persistence.ThemeRepository;
@DataJpaTest
@ -52,7 +52,7 @@ class ReservationSearchSpecificationTest {
LocalDateTime dateTime = LocalDateTime.now();
Member member = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));
ReservationTime time = timeRepository.save(new ReservationTime(dateTime.toLocalTime()));
Theme theme = themeRepository.save(new Theme("name", "description", "thumbnail"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "name", "description", "thumbnail"));
reservation1 = reservationRepository.save(
new Reservation(dateTime.toLocalDate(), time, theme, member, ReservationStatus.CONFIRMED));

View File

@ -27,7 +27,7 @@ import roomescape.reservation.dto.request.ReservationRequest;
import roomescape.reservation.dto.request.WaitingRequest;
import roomescape.reservation.dto.response.ReservationResponse;
import roomescape.common.exception.RoomescapeException;
import roomescape.theme.infrastructure.persistence.Theme;
import roomescape.theme.infrastructure.persistence.ThemeEntity;
import roomescape.theme.infrastructure.persistence.ThemeRepository;
import roomescape.theme.business.ThemeService;
@ -52,7 +52,7 @@ class ReservationServiceTest {
void reservationAlreadyExistFail() {
// given
ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(12, 30)));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member member1 = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));
Member member2 = memberRepository.save(new Member(null, "name2", "email2@email.com", "password", Role.MEMBER));
LocalDate date = LocalDate.now().plusDays(1L);
@ -74,7 +74,7 @@ class ReservationServiceTest {
void requestWaitWhenAlreadyReserveFail() {
// given
ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(12, 30)));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member member = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));
LocalDate date = LocalDate.now().plusDays(1L);
@ -94,7 +94,7 @@ class ReservationServiceTest {
void requestWaitTwiceFail() {
// given
ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(12, 30)));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member member = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));
Member member1 = memberRepository.save(new Member(null, "name1", "email1@email.com", "password", Role.MEMBER));
LocalDate date = LocalDate.now().plusDays(1L);
@ -118,7 +118,7 @@ class ReservationServiceTest {
void beforeDateReservationFail() {
// given
ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(12, 30)));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member member = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));
LocalDate beforeDate = LocalDate.now().minusDays(1L);
@ -135,7 +135,7 @@ class ReservationServiceTest {
// given
LocalDateTime beforeTime = LocalDateTime.now().minusHours(1L).withNano(0);
ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(beforeTime.toLocalTime()));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member member = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));
// when & then
@ -151,7 +151,7 @@ class ReservationServiceTest {
// given
LocalDateTime beforeTime = LocalDateTime.now().minusDays(1L).withNano(0);
ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(beforeTime.toLocalTime()));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Long NotExistMemberId = 1L;
// when & then
@ -179,7 +179,7 @@ class ReservationServiceTest {
void confirmWaitingWhenReservationExist() {
// given
ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(12, 30)));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member admin = memberRepository.save(new Member(null, "admin", "admin@email.com", "password", Role.ADMIN));
Member member = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));
Member member1 = memberRepository.save(new Member(null, "name1", "email1@email.com", "password", Role.MEMBER));
@ -202,7 +202,7 @@ class ReservationServiceTest {
void approveWaiting() {
// given
ReservationTime reservationTime = reservationTimeRepository.save(new ReservationTime(LocalTime.of(12, 30)));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member admin = memberRepository.save(new Member(null, "admin", "admin@email.com", "password", Role.ADMIN));
Member member = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));

View File

@ -23,7 +23,7 @@ import roomescape.reservation.domain.repository.ReservationRepository;
import roomescape.reservation.domain.repository.ReservationTimeRepository;
import roomescape.reservation.dto.request.ReservationTimeRequest;
import roomescape.common.exception.RoomescapeException;
import roomescape.theme.infrastructure.persistence.Theme;
import roomescape.theme.infrastructure.persistence.ThemeEntity;
import roomescape.theme.infrastructure.persistence.ThemeRepository;
@SpringBootTest
@ -74,7 +74,7 @@ class ReservationTimeServiceTest {
LocalDateTime localDateTime = LocalDateTime.now().plusDays(1L).withNano(0);
ReservationTime reservationTime = reservationTimeRepository.save(
new ReservationTime(localDateTime.toLocalTime()));
Theme theme = themeRepository.save(new Theme("테마명", "설명", "썸네일URL"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "테마명", "설명", "썸네일URL"));
Member member = memberRepository.save(new Member(null, "name", "email@email.com", "password", Role.MEMBER));
// when

View File

@ -28,7 +28,7 @@ import roomescape.reservation.domain.repository.ReservationRepository;
import roomescape.reservation.domain.repository.ReservationTimeRepository;
import roomescape.reservation.dto.request.ReservationRequest;
import roomescape.reservation.dto.response.ReservationResponse;
import roomescape.theme.infrastructure.persistence.Theme;
import roomescape.theme.infrastructure.persistence.ThemeEntity;
import roomescape.theme.infrastructure.persistence.ThemeRepository;
@SpringBootTest
@ -60,7 +60,7 @@ class ReservationWithPaymentServiceTest {
LocalDate date = localDateTime.toLocalDate();
ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime()));
Member member = memberRepository.save(new Member(null, "member", "email@email.com", "password", Role.MEMBER));
Theme theme = themeRepository.save(new Theme("name", "desc", "thumbnail"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "name", "desc", "thumbnail"));
ReservationRequest reservationRequest = new ReservationRequest(date, time.getId(), theme.getId(), "payment-key",
"order-id", 10000L, "NORMAL");
@ -96,7 +96,7 @@ class ReservationWithPaymentServiceTest {
LocalDate date = localDateTime.toLocalDate();
ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime()));
Member member = memberRepository.save(new Member(null, "member", "admin@email.com", "password", Role.ADMIN));
Theme theme = themeRepository.save(new Theme("name", "desc", "thumbnail"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "name", "desc", "thumbnail"));
ReservationRequest reservationRequest = new ReservationRequest(date, time.getId(), theme.getId(), "payment-key",
"order-id", 10000L, "NORMAL");
@ -124,7 +124,7 @@ class ReservationWithPaymentServiceTest {
LocalDate date = localDateTime.toLocalDate();
ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime()));
Member member = memberRepository.save(new Member(null, "member", "admin@email.com", "password", Role.ADMIN));
Theme theme = themeRepository.save(new Theme("name", "desc", "thumbnail"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "name", "desc", "thumbnail"));
Reservation saved = reservationRepository.save(
new Reservation(date, time, theme, member, ReservationStatus.CONFIRMED_PAYMENT_REQUIRED));
@ -146,7 +146,7 @@ class ReservationWithPaymentServiceTest {
LocalDate date = localDateTime.toLocalDate();
ReservationTime time = reservationTimeRepository.save(new ReservationTime(localDateTime.toLocalTime()));
Member member = memberRepository.save(new Member(null, "member", "admin@email.com", "password", Role.ADMIN));
Theme theme = themeRepository.save(new Theme("name", "desc", "thumbnail"));
ThemeEntity theme = themeRepository.save(new ThemeEntity(null, "name", "desc", "thumbnail"));
ReservationRequest reservationRequest = new ReservationRequest(date, time.getId(), theme.getId(), "payment-key",
"order-id", 10000L, "NORMAL");

View File

@ -23,7 +23,7 @@ import roomescape.reservation.dto.response.ReservationTimeResponse;
import roomescape.reservation.service.ReservationService;
import roomescape.reservation.service.ReservationTimeService;
import roomescape.common.exception.RoomescapeException;
import roomescape.theme.infrastructure.persistence.Theme;
import roomescape.theme.infrastructure.persistence.ThemeEntity;
import roomescape.theme.infrastructure.persistence.ThemeRepository;
import roomescape.theme.web.ThemeRequest;
import roomescape.theme.web.ThemeResponse;
@ -53,10 +53,10 @@ class ThemeServiceTest {
@DisplayName("테마를 조회한다.")
void findThemeById() {
// given
Theme theme = themeRepository.save(new Theme("name", "description", "thumbnail"));
ThemeEntity theme = themeRepository.save(new ThemeEntity("name", "description", "thumbnail"));
// when
Theme foundTheme = themeService.findThemeById(theme.getId());
ThemeEntity foundTheme = themeService.findThemeById(theme.getId());
// then
assertThat(foundTheme).isEqualTo(theme);
@ -66,7 +66,7 @@ class ThemeServiceTest {
@DisplayName("존재하지 않는 ID로 테마를 조회하면 예외가 발생한다.")
void findThemeByNotExistId() {
// given
Theme theme = themeRepository.save(new Theme("name", "description", "thumbnail"));
ThemeEntity theme = themeRepository.save(new ThemeEntity("name", "description", "thumbnail"));
// when
Long notExistId = theme.getId() + 1;
@ -80,8 +80,8 @@ class ThemeServiceTest {
@DisplayName("모든 테마를 조회한다.")
void findAllThemes() {
// given
Theme theme = themeRepository.save(new Theme("name", "description", "thumbnail"));
Theme theme1 = themeRepository.save(new Theme("name1", "description1", "thumbnail1"));
ThemeEntity theme = themeRepository.save(new ThemeEntity("name", "description", "thumbnail"));
ThemeEntity theme1 = themeRepository.save(new ThemeEntity("name1", "description1", "thumbnail1"));
// when
ThemesResponse found = themeService.findAllThemes();
@ -111,7 +111,7 @@ class ThemeServiceTest {
ThemeResponse themeResponse = themeService.addTheme(new ThemeRequest("name", "description", "thumbnail"));
// when
Theme found = themeRepository.findById(themeResponse.id()).orElse(null);
ThemeEntity found = themeRepository.findById(themeResponse.id()).orElse(null);
// then
assertThat(found).isNotNull();
@ -135,7 +135,7 @@ class ThemeServiceTest {
@DisplayName("테마를 삭제한다.")
void removeThemeById() {
// given
Theme theme = themeRepository.save(new Theme("name", "description", "thumbnail"));
ThemeEntity theme = themeRepository.save(new ThemeEntity("name", "description", "thumbnail"));
// when
themeService.removeThemeById(theme.getId());
@ -151,7 +151,7 @@ class ThemeServiceTest {
LocalDateTime dateTime = LocalDateTime.now().plusDays(1);
ReservationTimeResponse time = reservationTimeService.addTime(
new ReservationTimeRequest(dateTime.toLocalTime()));
Theme theme = themeRepository.save(new Theme("name", "description", "thumbnail"));
ThemeEntity theme = themeRepository.save(new ThemeEntity("name", "description", "thumbnail"));
Member member = memberRepository.save(new Member(null, "member", "password", "name", Role.MEMBER));
reservationService.addReservation(
new ReservationRequest(dateTime.toLocalDate(), time.id(), theme.getId(), "paymentKey", "orderId", 1000L,

View File

@ -4,7 +4,7 @@ import jakarta.persistence.EntityManager
import roomescape.member.infrastructure.persistence.Member
import roomescape.reservation.domain.ReservationStatus
import roomescape.reservation.domain.ReservationTime
import roomescape.theme.infrastructure.persistence.Theme
import roomescape.theme.infrastructure.persistence.ThemeEntity
import roomescape.util.MemberFixture
import roomescape.util.ReservationFixture
import roomescape.util.ReservationTimeFixture
@ -18,8 +18,8 @@ object TestThemeCreateUtil {
name: String,
reservedCount: Int,
date: LocalDate,
): Long {
val theme: Theme = ThemeFixture.create(name = name).also { entityManager.persist(it) }
): ThemeEntity {
val themeEntity: ThemeEntity = ThemeFixture.create(name = name).also { entityManager.persist(it) }
val member: Member = MemberFixture.create().also { entityManager.persist(it) }
for (i in 1..reservedCount) {
@ -29,7 +29,7 @@ object TestThemeCreateUtil {
ReservationFixture.create(
date = date,
theme = theme,
themeEntity = themeEntity,
member = member,
reservationTime = time,
status = ReservationStatus.CONFIRMED
@ -39,6 +39,6 @@ object TestThemeCreateUtil {
entityManager.flush()
entityManager.clear()
return theme.id
return themeEntity
}
}

View File

@ -11,7 +11,7 @@ import roomescape.payment.web.PaymentCancel
import roomescape.reservation.domain.Reservation
import roomescape.reservation.domain.ReservationStatus
import roomescape.reservation.domain.ReservationTime
import roomescape.theme.infrastructure.persistence.Theme
import roomescape.theme.infrastructure.persistence.ThemeEntity
import java.time.LocalDate
import java.time.LocalTime
import java.time.OffsetDateTime
@ -62,18 +62,18 @@ object ThemeFixture {
name: String = "Default Theme",
description: String = "Default Description",
thumbnail: String = "https://example.com/default-thumbnail.jpg"
): Theme = Theme(id, name, description, thumbnail)
): ThemeEntity = ThemeEntity(id, name, description, thumbnail)
}
object ReservationFixture {
fun create(
id: Long? = null,
date: LocalDate = LocalDate.now().plusWeeks(1),
theme: Theme = ThemeFixture.create(),
themeEntity: ThemeEntity = ThemeFixture.create(),
reservationTime: ReservationTime = ReservationTimeFixture.create(),
member: Member = MemberFixture.create(),
status: ReservationStatus = ReservationStatus.CONFIRMED_PAYMENT_REQUIRED
): Reservation = Reservation(id, date, reservationTime, theme, member, status)
): Reservation = Reservation(id, date, reservationTime, themeEntity, member, status)
}
object JwtFixture {