V-RIS 개발일지 (14) 음식점 별 리뷰 조회

KHJ·2022년 6월 13일
0

V-RIS 개발일지

목록 보기
14/15

전 포스트에서 설명한대로 원하는 음식점을 클릭하면 음식점의 상세 정보와 함께 리뷰 버튼이 보이도록 구현할 계획이다.


리뷰 종류

아래와 같은 리뷰 선택지가 주어지고, 이 중에서 선택할 수 있다.

공통 리뷰

  • 재료가 신선해요
  • 양이 많아요
  • 음식이 맛있어요
  • 가격이 착해요
  • 다음에 또 오고싶어요
  • 가성비가 좋아요

비건 리뷰

  • 메뉴 선택지가 다양해요
  • 논비건 친구와 함께 올 수 있어요

논비건 리뷰

  • 거부감이 없어요



구현 방법

우선 어떤 식당에 대한 리뷰인지 알아야하므로 resIdx가 필요하다.


앞 포스트에서 리뷰들을 순서대로 Integer형으로 매칭시켜 db에 저장해놓았고, 각 리뷰들이 몇 개 있는지 세어 개수를 반환해야 하므로 MySQL count 함수를 이용했다.


그리고 ReviewCategory라는 클래스를 새로 만들어 반환된 결과값 개수들을 저장하고 ReviewCategory를 반환시켜 주었다.



ReviewCategory.java

반환된 결과값들을 저장할 클래스이다.

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ReviewCategory {
    private Integer review1_fresh;
    private Integer review2_amount;
    private Integer review3_taste;
    private Integer review4_price;
    private Integer review5_next;
    private Integer review6_costPerform;
    private Integer review7_option;
    private Integer review8_withNone;
    private Integer review9_similar;
}



ReviewRepository.java

resIdx로 식당을 찾고, reviewCategory로 각 리뷰가 몇 개 인지 세주었다.

@Repository
public interface ReviewRepository extends JpaRepository<Review, Integer> {

    // 음식점 전체 리뷰 조회
    @Query(value="select count(rev) from review rev where rev.resIdx= :resIdx and rev.reviewCategory= :reviewCategory")
    Integer retrieveAllReviews(Integer resIdx, Integer reviewCategory);
}



ReviewJpaController.java

Repository에 생성해놓은 retrieveAllReviews를 이용하여 각 리뷰별 개수를 센 후 ReviewCategory의 각 필드에 매칭시켜 저장했다.

@RestController
@RequiredArgsConstructor
@RequestMapping("/v1/vegan-res")
public class ReviewJpaController {
    @Autowired
    private ReviewRepository reviewRepository;
    

    // 공통 (1~6)        : 재료신선, 양 많, 맛있, 가격 착, 다음에도, 가성비 좋
    // 비건 (7~8)        : 선택지다양, 논비건과 함께
    // 논비건 (9)        :  논비건과 비슷
    
    // 키워드 리뷰 조회
    @GetMapping("/{resIdx}/review")
    public ReviewCategory retrieveReview(@PathVariable int resIdx){

        ReviewCategory reviewCategory=new ReviewCategory();

        reviewCategory.setReview1_fresh(reviewRepository.retrieveAllReviews(resIdx, 1));
        reviewCategory.setReview2_amount(reviewRepository.retrieveAllReviews(resIdx, 2));
        reviewCategory.setReview3_taste(reviewRepository.retrieveAllReviews(resIdx, 3));
        reviewCategory.setReview4_price(reviewRepository.retrieveAllReviews(resIdx, 4));
        reviewCategory.setReview5_next(reviewRepository.retrieveAllReviews(resIdx, 5));
        reviewCategory.setReview6_costPerform(reviewRepository.retrieveAllReviews(resIdx, 6));
        reviewCategory.setReview7_option(reviewRepository.retrieveAllReviews(resIdx, 7));
        reviewCategory.setReview8_withNone(reviewRepository.retrieveAllReviews(resIdx, 8));
        reviewCategory.setReview9_similar(reviewRepository.retrieveAllReviews(resIdx, 9));

        return reviewCategory;
    }
}

실행결과

resIdx가 1000번인 음식점에 대한 리뷰 조회결과이다.

0개의 댓글