Skip to content

Commit

Permalink
refactor: 식품에 따른 review 조회 N+1 문제 해결 (#200)
Browse files Browse the repository at this point in the history
  • Loading branch information
parkmuhyeun authored Aug 7, 2023
1 parent 2e524e9 commit c87f705
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import zipgo.review.domain.Review;
import zipgo.review.exception.ReviewException;

public interface ReviewRepository extends JpaRepository<Review, Long> {

@Query("select r from Review r join fetch r.adverseReactions where r.petFood.id = :petFoodId")
List<Review> findAllByPetFoodId(Long petFoodId);

int countByPetFoodId(Long petFoodId);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,5 @@
package zipgo.review.application;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertAll;
import static zipgo.brand.domain.fixture.BrandFixture.식품_브랜드_생성하기;
import static zipgo.petfood.domain.fixture.PetFoodFixture.키워드_없이_식품_초기화;
import static zipgo.review.domain.type.AdverseReactionType.NONE;
import static zipgo.review.domain.type.StoolCondition.SOFT_MOIST;
import static zipgo.review.domain.type.TastePreference.EATS_VERY_WELL;
import static zipgo.review.fixture.AdverseReactionFixture.눈물_이상반응;
import static zipgo.review.fixture.AdverseReactionFixture.먹고_토_이상반응;
import static zipgo.review.fixture.MemberFixture.무민;
import static zipgo.review.fixture.ReviewFixture.극찬_리뷰_생성;
import static zipgo.review.fixture.ReviewFixture.혹평_리뷰_생성;

import java.util.List;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
Expand All @@ -26,6 +13,19 @@
import zipgo.review.domain.Review;
import zipgo.review.domain.repository.ReviewRepository;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertAll;
import static zipgo.brand.domain.fixture.BrandFixture.식품_브랜드_생성하기;
import static zipgo.petfood.domain.fixture.PetFoodFixture.키워드_없이_식품_초기화;
import static zipgo.review.domain.type.AdverseReactionType.NONE;
import static zipgo.review.domain.type.StoolCondition.SOFT_MOIST;
import static zipgo.review.domain.type.TastePreference.EATS_VERY_WELL;
import static zipgo.review.fixture.AdverseReactionFixture.눈물_이상반응;
import static zipgo.review.fixture.AdverseReactionFixture.먹고_토_이상반응;
import static zipgo.review.fixture.MemberFixture.무민;
import static zipgo.review.fixture.ReviewFixture.극찬_리뷰_생성;
import static zipgo.review.fixture.ReviewFixture.혹평_리뷰_생성;

class ReviewQueryServiceTest extends QueryServiceTest {

@Autowired
Expand All @@ -49,7 +49,7 @@ void getAllReviews() {
PetFood 식품 = 키워드_없이_식품_초기화(브랜드_조회하기());
Member 멤버 = memberRepository.save(무민());
petFoodRepository.save(식품);
Review 극찬_리뷰 = reviewRepository.save(극찬_리뷰_생성(멤버, 식품));
Review 극찬_리뷰 = reviewRepository.save(극찬_리뷰_생성(멤버, 식품, List.of("없어요")));
Review 혹평_리뷰_생성 = 혹평_리뷰_생성(멤버, 식품, List.of(눈물_이상반응().getAdverseReactionType().getDescription(), 먹고_토_이상반응().getAdverseReactionType().getDescription()));
reviewRepository.save(혹평_리뷰_생성);

Expand Down Expand Up @@ -79,7 +79,7 @@ void getReview() {
PetFood 식품 = 키워드_없이_식품_초기화(브랜드_조회하기());
Member 멤버 = memberRepository.save(무민());
petFoodRepository.save(식품);
Review 극찬_리뷰 = reviewRepository.save(극찬_리뷰_생성(멤버, 식품));
Review 극찬_리뷰 = reviewRepository.save(극찬_리뷰_생성(멤버, 식품, List.of("없어요")));

//when
Review review = reviewQueryService.getReview(극찬_리뷰.getId());
Expand Down
8 changes: 4 additions & 4 deletions backend/src/test/java/zipgo/review/fixture/ReviewFixture.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,17 +38,17 @@ public class ReviewFixture {
);
}

public static Review 극찬_리뷰_생성(Member 멤버, PetFood 식품) {
return Review.builder()
public static Review 극찬_리뷰_생성(Member 멤버, PetFood 식품, List<String> 이상반응들) {
Review 리뷰 = Review.builder()
.member(멤버)
.petFood(식품)
.rating(5)
.comment("우리 아이랑 너무 잘 맞아요!")
.tastePreference(EATS_VERY_WELL)
.stoolCondition(SOFT_MOIST)
.adverseReactions(List.of(new AdverseReaction(AdverseReactionType.from("없어요"))))
.build();

리뷰.addAdverseReactions(이상반응들);
return 리뷰;
}

public static Review 혹평_리뷰_생성(Member 멤버, PetFood 식품, List<String> 이상반응들) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
package zipgo.review.presentation;

import com.epages.restdocs.apispec.ResourceSnippetDetails;
import com.epages.restdocs.apispec.Schema;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.restdocs.payload.JsonFieldType;
import org.springframework.restdocs.restassured.RestDocumentationFilter;
import zipgo.acceptance.AcceptanceTest;

import static com.epages.restdocs.apispec.RestAssuredRestDocumentationWrapper.document;
import static com.epages.restdocs.apispec.RestAssuredRestDocumentationWrapper.resourceDetails;
import static com.epages.restdocs.apispec.Schema.schema;
Expand All @@ -21,15 +30,6 @@
import static zipgo.review.fixture.ReviewFixture.리뷰_생성_요청;
import static zipgo.review.fixture.ReviewFixture.리뷰_수정_요청;

import com.epages.restdocs.apispec.ResourceSnippetDetails;
import com.epages.restdocs.apispec.Schema;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.springframework.restdocs.payload.JsonFieldType;
import org.springframework.restdocs.restassured.RestDocumentationFilter;
import zipgo.acceptance.AcceptanceTest;


public class ReviewControllerTest extends AcceptanceTest {

Expand Down Expand Up @@ -61,6 +61,7 @@ class GetReviews {
// then
응답.then()
.assertThat().statusCode(OK.value())
.log().all()
.assertThat().body("reviews.size()", is(2));
}

Expand Down
2 changes: 2 additions & 0 deletions backend/src/test/resources/data.sql
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ values (1, 1, 5, '우리 아이랑 너무 잘 맞아요!', 'EATS_VERY_WELL', 'SO
insert into review(member_id, pet_food_id, rating, comment, taste_preference, stool_condition, created_at)
values (1, 1, 1, '우리 아이가 한 입 먹고 더 안 먹어요 ㅡ.ㅡ 책임지세요.', 'NOT_AT_ALL', 'DIARRHEA', '2023-07-28');

insert into adverse_reaction(adverse_reaction_type, review_id)
values ('NONE', 1);
insert into adverse_reaction(adverse_reaction_type, review_id)
values ('TEARS', 2);
insert into adverse_reaction(adverse_reaction_type, review_id)
Expand Down

0 comments on commit c87f705

Please sign in to comment.