From 6dd97b9af251c8e090f418c42e16840f00ebd548 Mon Sep 17 00:00:00 2001 From: hyeonjilee Date: Sun, 11 Aug 2024 22:46:59 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EB=B2=84=EC=A0=84=20=EA=B4=80?= =?UTF-8?q?=EB=A6=AC=EB=A5=BC=20=EC=9C=84=ED=95=B4=20=EA=B8=B0=EC=A1=B4=20?= =?UTF-8?q?=EB=B2=84=EC=A0=84,=20v2=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/controller/ReviewController.java | 9 ++++ .../dto/response/ReceivedReviewResponse.java | 4 +- .../dto/response/ReceivedReviewResponse2.java | 22 ++++++++++ .../response/ReceivedReviewsResponse2.java | 18 ++++++++ .../service/ReviewPreviewGenerator.java | 12 ++++++ .../review/service/ReviewService.java | 43 ++++++++++++++++--- .../review/service/ReviewServiceTest.java | 8 ++-- 7 files changed, 104 insertions(+), 12 deletions(-) create mode 100644 backend/src/main/java/reviewme/review/dto/response/ReceivedReviewResponse2.java create mode 100644 backend/src/main/java/reviewme/review/dto/response/ReceivedReviewsResponse2.java diff --git a/backend/src/main/java/reviewme/review/controller/ReviewController.java b/backend/src/main/java/reviewme/review/controller/ReviewController.java index 00bdf9917..0e6561c09 100644 --- a/backend/src/main/java/reviewme/review/controller/ReviewController.java +++ b/backend/src/main/java/reviewme/review/controller/ReviewController.java @@ -13,6 +13,7 @@ import reviewme.global.HeaderProperty; import reviewme.review.dto.request.CreateReviewRequest; import reviewme.review.dto.response.ReceivedReviewsResponse; +import reviewme.review.dto.response.ReceivedReviewsResponse2; import reviewme.review.dto.response.ReviewDetailResponse; import reviewme.review.dto.response.ReviewSetupResponse; import reviewme.review.service.ReviewService; @@ -45,6 +46,14 @@ public ResponseEntity findReceivedReviews( return ResponseEntity.ok(response); } + @GetMapping("/v2/reviews") + public ResponseEntity findReceivedReviews2( + @HeaderProperty(GROUP_ACCESS_CODE_HEADER) String groupAccessCode + ) { + ReceivedReviewsResponse2 response = reviewService.findReceivedReviews2(groupAccessCode); + return ResponseEntity.ok(response); + } + @GetMapping("/reviews/{id}") public ResponseEntity findReceivedReviewDetail( @PathVariable long id, diff --git a/backend/src/main/java/reviewme/review/dto/response/ReceivedReviewResponse.java b/backend/src/main/java/reviewme/review/dto/response/ReceivedReviewResponse.java index c9b67e72b..514f61311 100644 --- a/backend/src/main/java/reviewme/review/dto/response/ReceivedReviewResponse.java +++ b/backend/src/main/java/reviewme/review/dto/response/ReceivedReviewResponse.java @@ -16,7 +16,7 @@ public record ReceivedReviewResponse( @Schema(description = "응답 내용 미리보기") String contentPreview, - @Schema(description = "선택된 카테고리 목록") - List categories + @Schema(description = "선택된 키워드 목록") + List keywords ) { } diff --git a/backend/src/main/java/reviewme/review/dto/response/ReceivedReviewResponse2.java b/backend/src/main/java/reviewme/review/dto/response/ReceivedReviewResponse2.java new file mode 100644 index 000000000..0cf779cc3 --- /dev/null +++ b/backend/src/main/java/reviewme/review/dto/response/ReceivedReviewResponse2.java @@ -0,0 +1,22 @@ +package reviewme.review.dto.response; + +import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDate; +import java.util.List; + +@Schema(name = "리뷰 내용 응답") +public record ReceivedReviewResponse2( + + @Schema(description = "리뷰 ID") + long id, + + @Schema(description = "리뷰 작성일") + LocalDate createdAt, + + @Schema(description = "응답 내용 미리보기") + String contentPreview, + + @Schema(description = "선택된 카테고리 목록") + List categories +) { +} diff --git a/backend/src/main/java/reviewme/review/dto/response/ReceivedReviewsResponse2.java b/backend/src/main/java/reviewme/review/dto/response/ReceivedReviewsResponse2.java new file mode 100644 index 000000000..5649e4d75 --- /dev/null +++ b/backend/src/main/java/reviewme/review/dto/response/ReceivedReviewsResponse2.java @@ -0,0 +1,18 @@ +package reviewme.review.dto.response; + +import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; + +@Schema(name = "내가 받은 리뷰 목록 응답") +public record ReceivedReviewsResponse2( + + @Schema(description = "리뷰이 이름") + String revieweeName, + + @Schema(description = "프로젝트 이름") + String projectName, + + @Schema(description = "받은 리뷰 미리보기 목록") + List reviews +) { +} diff --git a/backend/src/main/java/reviewme/review/service/ReviewPreviewGenerator.java b/backend/src/main/java/reviewme/review/service/ReviewPreviewGenerator.java index e2930b97d..1f434fe03 100644 --- a/backend/src/main/java/reviewme/review/service/ReviewPreviewGenerator.java +++ b/backend/src/main/java/reviewme/review/service/ReviewPreviewGenerator.java @@ -1,12 +1,24 @@ package reviewme.review.service; import java.util.List; +import reviewme.review.domain.ReviewContent; import reviewme.review.domain.TextAnswer; public class ReviewPreviewGenerator { private static final int PREVIEW_LENGTH = 150; + public String generatePreview(List reviewContents) { + if (reviewContents.isEmpty()) { + return ""; + } + String answer = reviewContents.get(0).getAnswer(); + if (answer.length() > PREVIEW_LENGTH) { + return answer.substring(0, PREVIEW_LENGTH); + } + return answer; + } + public String generatePreview2(List reviewTextAnswers) { if (reviewTextAnswers.isEmpty()) { return ""; diff --git a/backend/src/main/java/reviewme/review/service/ReviewService.java b/backend/src/main/java/reviewme/review/service/ReviewService.java index 204613542..639f5ede2 100644 --- a/backend/src/main/java/reviewme/review/service/ReviewService.java +++ b/backend/src/main/java/reviewme/review/service/ReviewService.java @@ -23,8 +23,11 @@ import reviewme.review.dto.response.KeywordResponse; import reviewme.review.dto.response.QuestionSetupResponse; import reviewme.review.dto.response.ReceivedReviewCategoryResponse; +import reviewme.review.dto.response.ReceivedReviewKeywordsResponse; import reviewme.review.dto.response.ReceivedReviewResponse; +import reviewme.review.dto.response.ReceivedReviewResponse2; import reviewme.review.dto.response.ReceivedReviewsResponse; +import reviewme.review.dto.response.ReceivedReviewsResponse2; import reviewme.review.dto.response.ReviewContentResponse; import reviewme.review.dto.response.ReviewDetailResponse; import reviewme.review.dto.response.ReviewSetupResponse; @@ -152,20 +155,20 @@ private ReviewDetailResponse createReviewDetailResponse(Review review, ReviewGro } @Transactional(readOnly = true) - public ReceivedReviewsResponse findReceivedReviews(String groupAccessCode) { + public ReceivedReviewsResponse2 findReceivedReviews2(String groupAccessCode) { ReviewGroup reviewGroup = reviewGroupRepository.findByGroupAccessCode(groupAccessCode) .orElseThrow(() -> new ReviewGroupNotFoundByGroupAccessCodeException(groupAccessCode)); - List reviewResponses = review2Repository.findReceivedReviewsByGroupId( + List reviewResponses = review2Repository.findReceivedReviewsByGroupId( reviewGroup.getId()) .stream() - .map(this::createReceivedReviewResponse) + .map(this::createReceivedReviewResponse2) .toList(); - return new ReceivedReviewsResponse(reviewGroup.getReviewee(), reviewGroup.getProjectName(), reviewResponses); + return new ReceivedReviewsResponse2(reviewGroup.getReviewee(), reviewGroup.getProjectName(), reviewResponses); } - private ReceivedReviewResponse createReceivedReviewResponse(Review2 review) { + private ReceivedReviewResponse2 createReceivedReviewResponse2(Review2 review) { CheckboxAnswer checkboxAnswer = review.getCheckboxAnswers() .stream() .filter(answer -> optionItemRepository.existsByOptionTypeAndId(OptionType.CATEGORY, @@ -179,11 +182,39 @@ private ReceivedReviewResponse createReceivedReviewResponse(Review2 review) { .map(optionItem -> new ReceivedReviewCategoryResponse(optionItem.getId(), optionItem.getContent())) .toList(); - return new ReceivedReviewResponse( + return new ReceivedReviewResponse2( review.getId(), review.getCreatedAt().toLocalDate(), reviewPreviewGenerator.generatePreview2(review.getTextAnswers()), categoryResponses ); } + + + @Transactional(readOnly = true) + public ReceivedReviewsResponse findReceivedReviews(String groupAccessCode) { + ReviewGroup reviewGroup = reviewGroupRepository.findByGroupAccessCode(groupAccessCode) + .orElseThrow(() -> new ReviewGroupNotFoundByGroupAccessCodeException(groupAccessCode)); + List reviewResponses = + reviewRepository.findReceivedReviewsByGroupId(reviewGroup.getId()) + .stream() + .map(this::createReceivedReviewResponse) + .toList(); + return new ReceivedReviewsResponse(reviewGroup.getReviewee(), reviewGroup.getProjectName(), reviewResponses); + } + + private ReceivedReviewResponse createReceivedReviewResponse(Review review) { + List keywordsResponses = + reviewKeywordRepository.findAllByReviewId(review.getId()) + .stream() + .map(reviewKeyword -> keywordRepository.getKeywordById(reviewKeyword.getKeywordId())) + .map(keyword -> new ReceivedReviewKeywordsResponse(keyword.getId(), keyword.getContent())) + .toList(); + return new ReceivedReviewResponse( + review.getId(), + review.getCreatedAt().toLocalDate(), + reviewPreviewGenerator.generatePreview(review.getReviewContents()), + keywordsResponses + ); + } } diff --git a/backend/src/test/java/reviewme/review/service/ReviewServiceTest.java b/backend/src/test/java/reviewme/review/service/ReviewServiceTest.java index 71c7b6069..f5a8df1e2 100644 --- a/backend/src/test/java/reviewme/review/service/ReviewServiceTest.java +++ b/backend/src/test/java/reviewme/review/service/ReviewServiceTest.java @@ -30,7 +30,7 @@ import reviewme.review.dto.request.CreateReviewRequest; import reviewme.review.dto.response.QuestionSetupResponse; import reviewme.review.dto.response.ReceivedReviewCategoryResponse; -import reviewme.review.dto.response.ReceivedReviewsResponse; +import reviewme.review.dto.response.ReceivedReviewsResponse2; import reviewme.review.dto.response.ReviewDetailResponse; import reviewme.review.dto.response.ReviewSetupResponse; import reviewme.review.repository.CheckboxAnswerRepository; @@ -148,7 +148,7 @@ class ReviewServiceTest { @Test void 확인_코드에_해당하는_그룹이_없는_경우_예외가_발생한다() { - assertThatThrownBy(() -> reviewService.findReceivedReviews("abc")) + assertThatThrownBy(() -> reviewService.findReceivedReviews2("abc")) .isInstanceOf(ReviewGroupNotFoundByGroupAccessCodeException.class); } @@ -174,7 +174,7 @@ class ReviewServiceTest { review2Repository.saveAll(List.of(review1, review2)); // when - ReceivedReviewsResponse response = reviewService.findReceivedReviews(groupAccessCode); + ReceivedReviewsResponse2 response = reviewService.findReceivedReviews2(groupAccessCode); // then assertThat(response.reviews()).hasSize(2); @@ -276,7 +276,7 @@ class ReviewServiceTest { ); // when - ReceivedReviewsResponse response = reviewService.findReceivedReviews(groupAccessCode); + ReceivedReviewsResponse2 response = reviewService.findReceivedReviews2(groupAccessCode); // then List categoryContents = optionItemRepository.findAllByOptionType(OptionType.CATEGORY)