Skip to content

Commit

Permalink
refactor: 버전 관리를 위해 기존 버전, v2 분리
Browse files Browse the repository at this point in the history
  • Loading branch information
skylar1220 committed Aug 11, 2024
1 parent 9b78bfb commit 6dd97b9
Show file tree
Hide file tree
Showing 7 changed files with 104 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -45,6 +46,14 @@ public ResponseEntity<ReceivedReviewsResponse> findReceivedReviews(
return ResponseEntity.ok(response);
}

@GetMapping("/v2/reviews")
public ResponseEntity<ReceivedReviewsResponse2> findReceivedReviews2(
@HeaderProperty(GROUP_ACCESS_CODE_HEADER) String groupAccessCode
) {
ReceivedReviewsResponse2 response = reviewService.findReceivedReviews2(groupAccessCode);
return ResponseEntity.ok(response);
}

@GetMapping("/reviews/{id}")
public ResponseEntity<ReviewDetailResponse> findReceivedReviewDetail(
@PathVariable long id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public record ReceivedReviewResponse(
@Schema(description = "응답 내용 미리보기")
String contentPreview,

@Schema(description = "선택된 카테고리 목록")
List<ReceivedReviewCategoryResponse> categories
@Schema(description = "선택된 키워드 목록")
List<ReceivedReviewKeywordsResponse> keywords
) {
}
Original file line number Diff line number Diff line change
@@ -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<ReceivedReviewCategoryResponse> categories
) {
}
Original file line number Diff line number Diff line change
@@ -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<ReceivedReviewResponse2> reviews
) {
}
Original file line number Diff line number Diff line change
@@ -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<ReviewContent> 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<TextAnswer> reviewTextAnswers) {
if (reviewTextAnswers.isEmpty()) {
return "";
Expand Down
43 changes: 37 additions & 6 deletions backend/src/main/java/reviewme/review/service/ReviewService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<ReceivedReviewResponse> reviewResponses = review2Repository.findReceivedReviewsByGroupId(
List<ReceivedReviewResponse2> 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,
Expand All @@ -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<ReceivedReviewResponse> reviewResponses =
reviewRepository.findReceivedReviewsByGroupId(reviewGroup.getId())
.stream()
.map(this::createReceivedReviewResponse)
.toList();
return new ReceivedReviewsResponse(reviewGroup.getReviewee(), reviewGroup.getProjectName(), reviewResponses);
}

private ReceivedReviewResponse createReceivedReviewResponse(Review review) {
List<ReceivedReviewKeywordsResponse> 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
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -148,7 +148,7 @@ class ReviewServiceTest {

@Test
void 확인_코드에_해당하는_그룹이_없는_경우_예외가_발생한다() {
assertThatThrownBy(() -> reviewService.findReceivedReviews("abc"))
assertThatThrownBy(() -> reviewService.findReceivedReviews2("abc"))
.isInstanceOf(ReviewGroupNotFoundByGroupAccessCodeException.class);
}

Expand All @@ -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);
Expand Down Expand Up @@ -276,7 +276,7 @@ class ReviewServiceTest {
);

// when
ReceivedReviewsResponse response = reviewService.findReceivedReviews(groupAccessCode);
ReceivedReviewsResponse2 response = reviewService.findReceivedReviews2(groupAccessCode);

// then
List<String> categoryContents = optionItemRepository.findAllByOptionType(OptionType.CATEGORY)
Expand Down

0 comments on commit 6dd97b9

Please sign in to comment.