TR1LL1ON / TR1LL1ON_BE

🌟 숙박 예약 서비스 [트릴리언] 🌟
https://www.tr1ll1on.site/
1 stars 3 forks source link

Feat: 특정 객실 리뷰 조회 기능 개발 #113

Closed yurim0628 closed 11 months ago

yurim0628 commented 11 months ago

객실별 리뷰 조회 API

  1. 요청 메서드 : GET
  2. 엔드 포인트 : /reviews/products/{productId}
  3. 요청 데이터 : productId
  4. 응답 데이터 : ProductReviewResponse 객체
    [
    {
        "reviewId": 2,
        "reviewDate": "2023-12-08",
        "score": 5.0,
        "content": "굿굿",
        "userDetails": {
            "userId": 3,
            "userName": "test03"
        }
    },
    {
        "reviewId": 10,
        "reviewDate": "2023-12-07",
        "score": 1.0,
        "content": "너무좋아요(수정)",
        "userDetails": {
            "userId": 10,
            "userName": "호진"
        }
    }
    ]

조회시마다 발생하는 쿼리

Hibernate: 
    select
        r1_0.review_id,
        r1_0.content,
        r1_0.order_item_id,
        r1_0.product_id,
        r1_0.review_date,
        r1_0.score,
        u1_0.user_id,
        u1_0.authority,
        u1_0.cart_id,
        u1_0.email,
        u1_0.name,
        u1_0.password 
    from
        review r1_0 
    left join
        user u1_0 
            on u1_0.user_id=r1_0.user_id 
    where
        r1_0.product_id=?
@EntityGraph(attributePaths = {"user"})
Optional<List<Review>> getReviewsByProductId(Long productId);

@EntityGraph를 사용하여 메서드에 대한 엔터티 그래프를 정의한다. getReviewsByProductId 메서드 실행 시 Review 엔티티와 연관된 User 엔티티도 함께 패치조인한다.