From 95be71e6f6b9903cc6be5fe9f0051d8a329ef778 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Tue, 8 Oct 2024 17:48:59 +0900 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20=EC=9A=94?= =?UTF-8?q?=EC=95=BD=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/controller/ReviewController.java | 2 -- .../review/repository/ReviewRepository.java | 2 ++ .../review/service/ReviewSummaryService.java | 20 ++++++++++++++++++- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/reviewme/review/controller/ReviewController.java b/backend/src/main/java/reviewme/review/controller/ReviewController.java index ba237ddde..7bca618ce 100644 --- a/backend/src/main/java/reviewme/review/controller/ReviewController.java +++ b/backend/src/main/java/reviewme/review/controller/ReviewController.java @@ -26,8 +26,6 @@ @RequiredArgsConstructor public class ReviewController { - private static final String GROUP_ACCESS_CODE_HEADER = "GroupAccessCode"; - private final ReviewRegisterService reviewRegisterService; private final ReviewListLookupService reviewListLookupService; private final ReviewDetailLookupService reviewDetailLookupService; diff --git a/backend/src/main/java/reviewme/review/repository/ReviewRepository.java b/backend/src/main/java/reviewme/review/repository/ReviewRepository.java index 26aacb9bd..bde88eeac 100644 --- a/backend/src/main/java/reviewme/review/repository/ReviewRepository.java +++ b/backend/src/main/java/reviewme/review/repository/ReviewRepository.java @@ -38,4 +38,6 @@ AND CAST(r.created_at AS DATE) <= :createdDate default boolean existsOlderReviewInGroup(long reviewGroupId, long reviewId, LocalDate createdDate) { return existsOlderReviewInGroupInLong(reviewGroupId, reviewId, createdDate) > 0; } + + int countByReviewGroupId(long reviewGroupId); } diff --git a/backend/src/main/java/reviewme/review/service/ReviewSummaryService.java b/backend/src/main/java/reviewme/review/service/ReviewSummaryService.java index d556ef5c1..cea83af1e 100644 --- a/backend/src/main/java/reviewme/review/service/ReviewSummaryService.java +++ b/backend/src/main/java/reviewme/review/service/ReviewSummaryService.java @@ -1,12 +1,30 @@ package reviewme.review.service; +import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import reviewme.review.repository.ReviewRepository; import reviewme.review.service.dto.response.list.ReceivedReviewsSummaryResponse; +import reviewme.review.service.exception.ReviewGroupNotFoundByReviewRequestCodeException; +import reviewme.reviewgroup.domain.ReviewGroup; +import reviewme.reviewgroup.repository.ReviewGroupRepository; @Service +@RequiredArgsConstructor public class ReviewSummaryService { + private final ReviewGroupRepository reviewGroupRepository; + private final ReviewRepository reviewRepository; + public ReceivedReviewsSummaryResponse getReviewSummary(String reviewRequestCode) { - return null; + ReviewGroup reviewGroup = reviewGroupRepository.findByReviewRequestCode(reviewRequestCode) + .orElseThrow(() -> new ReviewGroupNotFoundByReviewRequestCodeException(reviewRequestCode)); + + int totalReviewCount = reviewRepository.countByReviewGroupId(reviewGroup.getId()); + + return new ReceivedReviewsSummaryResponse( + reviewGroup.getProjectName(), + reviewGroup.getReviewee(), + totalReviewCount + ); } } From 73f587d0311503e3015f4f24e769cec7509455cb Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Tue, 8 Oct 2024 17:49:10 +0900 Subject: [PATCH 2/7] =?UTF-8?q?test:=20=EB=A6=AC=EB=B7=B0=20=EC=9A=94?= =?UTF-8?q?=EC=95=BD=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0=EB=8A=A5=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ReviewSummaryServiceTest.java | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java diff --git a/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java b/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java new file mode 100644 index 000000000..42e9791aa --- /dev/null +++ b/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java @@ -0,0 +1,95 @@ +package reviewme.review.service; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.junit.jupiter.api.Assertions.assertAll; +import static reviewme.fixture.QuestionFixture.서술형_필수_질문; +import static reviewme.fixture.SectionFixture.항상_보이는_섹션; +import static reviewme.fixture.TemplateFixture.템플릿; + +import java.util.List; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import reviewme.question.domain.Question; +import reviewme.question.repository.QuestionRepository; +import reviewme.review.domain.Review; +import reviewme.review.repository.ReviewRepository; +import reviewme.review.service.dto.response.list.ReceivedReviewsSummaryResponse; +import reviewme.review.service.exception.ReviewGroupNotFoundByReviewRequestCodeException; +import reviewme.reviewgroup.domain.ReviewGroup; +import reviewme.reviewgroup.repository.ReviewGroupRepository; +import reviewme.support.ServiceTest; +import reviewme.template.domain.Section; +import reviewme.template.domain.Template; +import reviewme.template.repository.SectionRepository; +import reviewme.template.repository.TemplateRepository; + +@ServiceTest +class ReviewSummaryServiceTest { + + @Autowired + private ReviewSummaryService reviewSummaryService; + + @Autowired + private ReviewGroupRepository reviewGroupRepository; + + @Autowired + private ReviewRepository reviewRepository; + + @Autowired + private TemplateRepository templateRepository; + + @Autowired + private SectionRepository sectionRepository; + + @Autowired + private QuestionRepository questionRepository; + + @Test + void 리뷰_그룹에_등록된_리뷰_요약_정보를_반환한다() { + // given + Question question = questionRepository.save(서술형_필수_질문()); + Section section = sectionRepository.save(항상_보이는_섹션(List.of(question.getId()))); + Template template = templateRepository.save(템플릿(List.of(section.getId()))); + + ReviewGroup reviewGroup = reviewGroupRepository.save(new ReviewGroup( + "ted", + "review-me", + "reviewRequestCode", + "groupAccessCode" + )); + + Review review1 = new Review(template.getId(), reviewGroup.getId(), List.of()); + Review review2 = new Review(template.getId(), reviewGroup.getId(), List.of()); + Review review3 = new Review(template.getId(), reviewGroup.getId(), List.of()); + reviewRepository.saveAll(List.of(review1, review2, review3)); + long numberOfReviews = reviewRepository.count(); + + // when + ReceivedReviewsSummaryResponse actual = reviewSummaryService.getReviewSummary( + reviewGroup.getReviewRequestCode()); + + // then + assertAll( + () -> assertThat(actual.projectName()).isEqualTo(reviewGroup.getProjectName()), + () -> assertThat(actual.revieweeName()).isEqualTo(reviewGroup.getReviewee()), + () -> assertThat(actual.totalReviewCount()).isEqualTo(numberOfReviews) + ); + } + + @Test + void 리뷰_요약_정보_조회시_리뷰_요청_코드가_존재하지_않는_경우_예외가_발생한다() { + // given + ReviewGroup reviewGroup = reviewGroupRepository.save(new ReviewGroup( + "ted", + "review-me", + "reviewRequestCode", + "groupAccessCode" + )); + + // when, then + assertThatThrownBy(() -> reviewSummaryService.getReviewSummary( + reviewGroup.getReviewRequestCode() + "wrong")) + .isInstanceOf(ReviewGroupNotFoundByReviewRequestCodeException.class); + } +} From 530cebb79e2a75fc8913d6db8378889ac03dd656 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Wed, 9 Oct 2024 11:18:49 +0900 Subject: [PATCH 3/7] =?UTF-8?q?test:=20=EB=A6=AC=EB=B7=B0=20=EA=B7=B8?= =?UTF-8?q?=EB=A3=B9=20=ED=94=BD=EC=8A=A4=EC=B3=90=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/service/ReviewSummaryServiceTest.java | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java b/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java index 42e9791aa..7d2c7843a 100644 --- a/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java +++ b/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java @@ -4,6 +4,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertAll; import static reviewme.fixture.QuestionFixture.서술형_필수_질문; +import static reviewme.fixture.ReviewGroupFixture.리뷰_그룹; import static reviewme.fixture.SectionFixture.항상_보이는_섹션; import static reviewme.fixture.TemplateFixture.템플릿; @@ -52,12 +53,7 @@ class ReviewSummaryServiceTest { Section section = sectionRepository.save(항상_보이는_섹션(List.of(question.getId()))); Template template = templateRepository.save(템플릿(List.of(section.getId()))); - ReviewGroup reviewGroup = reviewGroupRepository.save(new ReviewGroup( - "ted", - "review-me", - "reviewRequestCode", - "groupAccessCode" - )); + ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹()); Review review1 = new Review(template.getId(), reviewGroup.getId(), List.of()); Review review2 = new Review(template.getId(), reviewGroup.getId(), List.of()); @@ -80,12 +76,7 @@ class ReviewSummaryServiceTest { @Test void 리뷰_요약_정보_조회시_리뷰_요청_코드가_존재하지_않는_경우_예외가_발생한다() { // given - ReviewGroup reviewGroup = reviewGroupRepository.save(new ReviewGroup( - "ted", - "review-me", - "reviewRequestCode", - "groupAccessCode" - )); + ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹()); // when, then assertThatThrownBy(() -> reviewSummaryService.getReviewSummary( From 3231afa71ce926e78067c06d98fed27bf12d6563 Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Wed, 9 Oct 2024 14:23:57 +0900 Subject: [PATCH 4/7] =?UTF-8?q?test:=20=EB=A6=AC=EB=B7=B0=20=EC=9A=94?= =?UTF-8?q?=EC=95=BD=20=EC=A1=B0=ED=9A=8C=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EC=97=90=EC=84=9C=20list=20=EC=88=98=EB=A5=BC=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../review/service/ReviewSummaryServiceTest.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java b/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java index 7d2c7843a..7177cca38 100644 --- a/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java +++ b/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java @@ -55,21 +55,20 @@ class ReviewSummaryServiceTest { ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹()); - Review review1 = new Review(template.getId(), reviewGroup.getId(), List.of()); - Review review2 = new Review(template.getId(), reviewGroup.getId(), List.of()); - Review review3 = new Review(template.getId(), reviewGroup.getId(), List.of()); - reviewRepository.saveAll(List.of(review1, review2, review3)); - long numberOfReviews = reviewRepository.count(); - + List reviews = List.of( + new Review(template.getId(), reviewGroup.getId(), List.of()), + new Review(template.getId(), reviewGroup.getId(), List.of()), + new Review(template.getId(), reviewGroup.getId(), List.of()) + ); + reviewRepository.saveAll(reviews); // when ReceivedReviewsSummaryResponse actual = reviewSummaryService.getReviewSummary( reviewGroup.getReviewRequestCode()); - // then assertAll( () -> assertThat(actual.projectName()).isEqualTo(reviewGroup.getProjectName()), () -> assertThat(actual.revieweeName()).isEqualTo(reviewGroup.getReviewee()), - () -> assertThat(actual.totalReviewCount()).isEqualTo(numberOfReviews) + () -> assertThat(actual.totalReviewCount()).isEqualTo(reviews.size()) ); } From cc6e147579ad2984fb39ff9dd0b8ecc8365fecfe Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Wed, 9 Oct 2024 14:32:54 +0900 Subject: [PATCH 5/7] =?UTF-8?q?test:=20=EB=A6=AC=EB=B7=B0=20=EC=9A=94?= =?UTF-8?q?=EC=95=BD=20=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EC=97=90=20=EB=8B=A4=EB=A5=B8=20=EA=B7=B8?= =?UTF-8?q?=EB=A3=B9=20=EC=B6=94=EA=B0=80=ED=95=98=EB=8A=94=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/ReviewSummaryServiceTest.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java b/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java index 7177cca38..1b7265e28 100644 --- a/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java +++ b/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java @@ -53,21 +53,24 @@ class ReviewSummaryServiceTest { Section section = sectionRepository.save(항상_보이는_섹션(List.of(question.getId()))); Template template = templateRepository.save(템플릿(List.of(section.getId()))); - ReviewGroup reviewGroup = reviewGroupRepository.save(리뷰_그룹()); + ReviewGroup reviewGroup1 = reviewGroupRepository.save(리뷰_그룹()); + ReviewGroup reviewGroup2 = reviewGroupRepository.save(리뷰_그룹("reReCo", "groupCo")); List reviews = List.of( - new Review(template.getId(), reviewGroup.getId(), List.of()), - new Review(template.getId(), reviewGroup.getId(), List.of()), - new Review(template.getId(), reviewGroup.getId(), List.of()) + new Review(template.getId(), reviewGroup1.getId(), List.of()), + new Review(template.getId(), reviewGroup1.getId(), List.of()), + new Review(template.getId(), reviewGroup1.getId(), List.of()) ); reviewRepository.saveAll(reviews); + reviewRepository.save(new Review(template.getId(), reviewGroup2.getId(), List.of())); + // when ReceivedReviewsSummaryResponse actual = reviewSummaryService.getReviewSummary( - reviewGroup.getReviewRequestCode()); + reviewGroup1.getReviewRequestCode()); // then assertAll( - () -> assertThat(actual.projectName()).isEqualTo(reviewGroup.getProjectName()), - () -> assertThat(actual.revieweeName()).isEqualTo(reviewGroup.getReviewee()), + () -> assertThat(actual.projectName()).isEqualTo(reviewGroup1.getProjectName()), + () -> assertThat(actual.revieweeName()).isEqualTo(reviewGroup1.getReviewee()), () -> assertThat(actual.totalReviewCount()).isEqualTo(reviews.size()) ); } From 8b0742cdea69876f7959242c0d1a5a63793ec24b Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Wed, 9 Oct 2024 14:38:04 +0900 Subject: [PATCH 6/7] =?UTF-8?q?refactor:=20Transactional=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/reviewme/review/service/ReviewSummaryService.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/backend/src/main/java/reviewme/review/service/ReviewSummaryService.java b/backend/src/main/java/reviewme/review/service/ReviewSummaryService.java index cea83af1e..50cc80354 100644 --- a/backend/src/main/java/reviewme/review/service/ReviewSummaryService.java +++ b/backend/src/main/java/reviewme/review/service/ReviewSummaryService.java @@ -2,6 +2,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import reviewme.review.repository.ReviewRepository; import reviewme.review.service.dto.response.list.ReceivedReviewsSummaryResponse; import reviewme.review.service.exception.ReviewGroupNotFoundByReviewRequestCodeException; @@ -15,6 +16,7 @@ public class ReviewSummaryService { private final ReviewGroupRepository reviewGroupRepository; private final ReviewRepository reviewRepository; + @Transactional(readOnly = true) public ReceivedReviewsSummaryResponse getReviewSummary(String reviewRequestCode) { ReviewGroup reviewGroup = reviewGroupRepository.findByReviewRequestCode(reviewRequestCode) .orElseThrow(() -> new ReviewGroupNotFoundByReviewRequestCodeException(reviewRequestCode)); From 6533eb8e9be977d9e4a5b951b67753b986df0d6e Mon Sep 17 00:00:00 2001 From: KIMGYUTAE Date: Fri, 11 Oct 2024 16:23:15 +0900 Subject: [PATCH 7/7] =?UTF-8?q?style:=20=EA=B0=9C=ED=96=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/reviewme/review/service/ReviewSummaryServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java b/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java index 1b7265e28..2a6e56088 100644 --- a/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java +++ b/backend/src/test/java/reviewme/review/service/ReviewSummaryServiceTest.java @@ -67,6 +67,7 @@ class ReviewSummaryServiceTest { // when ReceivedReviewsSummaryResponse actual = reviewSummaryService.getReviewSummary( reviewGroup1.getReviewRequestCode()); + // then assertAll( () -> assertThat(actual.projectName()).isEqualTo(reviewGroup1.getProjectName()),