diff --git a/perfume-api/src/main/java/io/perfume/api/review/adapter/in/http/ReviewController.java b/perfume-api/src/main/java/io/perfume/api/review/adapter/in/http/ReviewController.java index 5282db8b..32c039e9 100644 --- a/perfume-api/src/main/java/io/perfume/api/review/adapter/in/http/ReviewController.java +++ b/perfume-api/src/main/java/io/perfume/api/review/adapter/in/http/ReviewController.java @@ -10,7 +10,6 @@ import io.perfume.api.review.adapter.in.http.dto.GetReviewCommentsRequestDto; import io.perfume.api.review.adapter.in.http.dto.GetReviewCommentsResponseDto; import io.perfume.api.review.adapter.in.http.dto.GetReviewDetailResponseDto; -import io.perfume.api.review.adapter.in.http.dto.GetReviewOptionItemRequestDto; import io.perfume.api.review.adapter.in.http.dto.GetReviewOptionItemResponseDto; import io.perfume.api.review.adapter.in.http.dto.GetReviewsRequestDto; import io.perfume.api.review.adapter.in.http.dto.GetReviewsResponseDto; @@ -157,14 +156,9 @@ public ResponseEntity likeReview( return ResponseEntity.status(HttpStatus.OK).body(new ReviewLikeResponseDto(id)); } + @PreAuthorize("isAuthenticated()") @GetMapping("/options") - public ResponseEntity> getReviewCategories( - final GetReviewOptionItemRequestDto type) { - return switch (type.type()) { - case STRENGTH -> ResponseEntity.ok(GetReviewOptionItemResponseDto.getStrength()); - case SEASON -> ResponseEntity.ok(GetReviewOptionItemResponseDto.getSeason()); - case DURATION -> ResponseEntity.ok(GetReviewOptionItemResponseDto.getDuration()); - case DAY_TYPE -> ResponseEntity.ok(GetReviewOptionItemResponseDto.getDayType()); - }; + public GetReviewOptionItemResponseDto getReviewCategories() { + return GetReviewOptionItemResponseDto.get(); } } diff --git a/perfume-api/src/main/java/io/perfume/api/review/adapter/in/http/dto/GetReviewOptionItemRequestDto.java b/perfume-api/src/main/java/io/perfume/api/review/adapter/in/http/dto/GetReviewOptionItemRequestDto.java deleted file mode 100644 index dea8de39..00000000 --- a/perfume-api/src/main/java/io/perfume/api/review/adapter/in/http/dto/GetReviewOptionItemRequestDto.java +++ /dev/null @@ -1,11 +0,0 @@ -package io.perfume.api.review.adapter.in.http.dto; - -public record GetReviewOptionItemRequestDto(ReviewOptionType type) { - - public enum ReviewOptionType { - STRENGTH, - SEASON, - DURATION, - DAY_TYPE - } -} diff --git a/perfume-api/src/main/java/io/perfume/api/review/adapter/in/http/dto/GetReviewOptionItemResponseDto.java b/perfume-api/src/main/java/io/perfume/api/review/adapter/in/http/dto/GetReviewOptionItemResponseDto.java index 8c482d15..249be526 100644 --- a/perfume-api/src/main/java/io/perfume/api/review/adapter/in/http/dto/GetReviewOptionItemResponseDto.java +++ b/perfume-api/src/main/java/io/perfume/api/review/adapter/in/http/dto/GetReviewOptionItemResponseDto.java @@ -1,40 +1,41 @@ package io.perfume.api.review.adapter.in.http.dto; +import io.perfume.api.review.domain.ReviewOption; +import io.perfume.api.review.domain.type.DayType; +import io.perfume.api.review.domain.type.Duration; +import io.perfume.api.review.domain.type.Season; import io.perfume.api.review.domain.type.Strength; -import java.util.Arrays; +import java.util.EnumSet; import java.util.List; -public record GetReviewOptionItemResponseDto(String name, String code) { +public record GetReviewOptionItemResponseDto( + List strength, + List season, + List duration, + List dayType) { - public static List getStrength() { - return Arrays.stream(Strength.values()) - .map( - strength -> - new GetReviewOptionItemResponseDto(strength.getDescription(), strength.name())) - .toList(); - } + public static GetReviewOptionItemResponseDto get() { - public static List getSeason() { - return Arrays.stream(Strength.values()) - .map( - strength -> - new GetReviewOptionItemResponseDto(strength.getDescription(), strength.name())) - .toList(); - } + List strength = + EnumSet.allOf(Strength.class).stream() + .map(enumValue -> new ReviewOption(enumValue.name(), enumValue.getDescription())) + .toList(); - public static List getDuration() { - return Arrays.stream(Strength.values()) - .map( - strength -> - new GetReviewOptionItemResponseDto(strength.getDescription(), strength.name())) - .toList(); - } + List season = + EnumSet.allOf(Season.class).stream() + .map(enumValue -> new ReviewOption(enumValue.name(), enumValue.getDescription())) + .toList(); + + List duration = + EnumSet.allOf(Duration.class).stream() + .map(enumValue -> new ReviewOption(enumValue.name(), enumValue.getDescription())) + .toList(); + + List dayType = + EnumSet.allOf(DayType.class).stream() + .map(enumValue -> new ReviewOption(enumValue.name(), enumValue.getDescription())) + .toList(); - public static List getDayType() { - return Arrays.stream(Strength.values()) - .map( - strength -> - new GetReviewOptionItemResponseDto(strength.getDescription(), strength.name())) - .toList(); + return new GetReviewOptionItemResponseDto(strength, season, duration, dayType); } } diff --git a/perfume-api/src/main/java/io/perfume/api/review/domain/ReviewOption.java b/perfume-api/src/main/java/io/perfume/api/review/domain/ReviewOption.java new file mode 100644 index 00000000..633f4b2a --- /dev/null +++ b/perfume-api/src/main/java/io/perfume/api/review/domain/ReviewOption.java @@ -0,0 +1,3 @@ +package io.perfume.api.review.domain; + +public record ReviewOption(String name, String code) {} diff --git a/perfume-api/src/test/java/io/perfume/api/review/adapter/in/http/ReviewControllerTest.java b/perfume-api/src/test/java/io/perfume/api/review/adapter/in/http/ReviewControllerTest.java index ece84d8e..60177621 100644 --- a/perfume-api/src/test/java/io/perfume/api/review/adapter/in/http/ReviewControllerTest.java +++ b/perfume-api/src/test/java/io/perfume/api/review/adapter/in/http/ReviewControllerTest.java @@ -7,7 +7,6 @@ import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields; import static org.springframework.restdocs.request.RequestDocumentation.parameterWithName; import static org.springframework.restdocs.request.RequestDocumentation.pathParameters; -import static org.springframework.restdocs.request.RequestDocumentation.queryParameters; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; @@ -521,11 +520,12 @@ void testGetReviewDetail() throws Exception { } @Test - void 리뷰_항목_조회() throws Exception { + @WithMockUser(username = "2", roles = "USER") + void 리뷰_옵션_목록_조회() throws Exception { // when & then mockMvc .perform( - RestDocumentationRequestBuilders.get("/v1/reviews/options?type=DAY_TYPE") + RestDocumentationRequestBuilders.get("/v1/reviews/options") .accept(MediaType.APPLICATION_JSON) .contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) @@ -533,11 +533,30 @@ void testGetReviewDetail() throws Exception { .andDo( document( "get-review-options", - queryParameters( - parameterWithName("type") - .description("리뷰 항목 타입 (STRENGTH, SEASON, DURATION, DAY_TYPE)")), responseFields( - fieldWithPath("[].code").type(JsonFieldType.STRING).description("리뷰 항목 코드"), - fieldWithPath("[].name").type(JsonFieldType.STRING).description("리뷰 항목 이름")))); + fieldWithPath("strength[].name") + .type(JsonFieldType.STRING) + .description("향수 강도 이름"), + fieldWithPath("strength[].code") + .type(JsonFieldType.STRING) + .description("향수 강도 코드"), + fieldWithPath("season[].name") + .type(JsonFieldType.STRING) + .description("향수 강도 이름"), + fieldWithPath("season[].code") + .type(JsonFieldType.STRING) + .description("향수 강도 코드"), + fieldWithPath("duration[].name") + .type(JsonFieldType.STRING) + .description("향수 지속력 이름"), + fieldWithPath("duration[].code") + .type(JsonFieldType.STRING) + .description("향수 지속력 코드"), + fieldWithPath("dayType[].name") + .type(JsonFieldType.STRING) + .description("어울리는 상황 이름"), + fieldWithPath("dayType[].code") + .type(JsonFieldType.STRING) + .description("어울리는 상황 코드")))); } }