전 포스트에서 설명한대로 원하는 음식점을 클릭하면 음식점의 상세 정보와 함께 리뷰 버튼이 보이도록 구현할 계획이다.
아래와 같은 리뷰 선택지가 주어지고, 이 중에서 선택할 수 있다.
우선 어떤 식당에 대한 리뷰인지 알아야하므로 resIdx가 필요하다.
앞 포스트에서 리뷰들을 순서대로 Integer형으로 매칭시켜 db에 저장해놓았고, 각 리뷰들이 몇 개 있는지 세어 개수를 반환해야 하므로 MySQL count 함수를 이용했다.
그리고 ReviewCategory라는 클래스를 새로 만들어 반환된 결과값 개수들을 저장하고 ReviewCategory를 반환시켜 주었다.
반환된 결과값들을 저장할 클래스이다.
@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;
}
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);
}
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번인 음식점에 대한 리뷰 조회결과이다.