Skip to content

달력 리뷰 상세페이지 응답 기능 구현 완료#59

Merged
hyunsb merged 12 commits into
developfrom
feature/#36-my-review-detail-service
Sep 21, 2023
Merged

달력 리뷰 상세페이지 응답 기능 구현 완료#59
hyunsb merged 12 commits into
developfrom
feature/#36-my-review-detail-service

Conversation

@hyunsb
Copy link
Copy Markdown
Member

@hyunsb hyunsb commented Sep 20, 2023

review_id를 PathVariable로 제공받아 해당 리뷰의 상세 데이터를 응답한다.
member_id는 JWT에서 추출한다.

  • 달력 리뷰 상세페이지 응답 기능 구현 #36
  • 외부식당 리뷰인 경우: 제목(메뉴: selected_dishes)과 위치 정보를 함께 제공한다.
  • 구내식당 리뷰인 경우: 메뉴 정보대신 구내식당 문자열을 제공한다. 위치 정보로 빌딩 이름을 제공한다.
  • 도시락 리뷰인 경우: 메뉴 정보대신 도시락 문자열을 제공한다.

변경정

  • 기존에 PathVariable로 받던 reviewType을 각각의GET /api/reviews/{reviewId}/{type}/members
  • 기존에 그룹핑과 concat을 사용하여 이미지를 하나의 문자열로 만드는 작업을 비즈니스 로직에서 처리

프로세스

  • JWT로부터 member_id를 추출한다.
  • URI로부터 review_id를 추출한다. (PathVariable)
  • Type에 따라 분기한다. (RESTAURANT, CAFETERIA, LUNCHBOX)
  • member_id, review_id를 통해 review를 조회한다. (자신이 작성한 리뷰인지 판단하기 위해 member_id도 사용)
  • review_id를 사용하여 review테이블과 상세 리뷰 테이블을 조인한다.

쿼리

외부식당 리뷰인 경우

SELECT 
    review.selected_dishes, 
    restaurant_review.taste, 
    review.description,
    review.created_at,
    restaurant.name,
    review_image.url AS url
FROM review
LEFT JOIN review_image ON review_image.review_id = review.id
INNER JOIN restaurant_review on restaurant_review.id = review.id
INNER JOIN restaurant on restaurant.id = restaurant_review.restaurant_id
WHERE review.id = 475 AND review.member_id = 1;

아닌경우

SELECT 
    review.selected_dishes as review_title,
    lunch_box_review.taste as review_taste,
    review.description as review_discription,
    review.created_at as review_created_at
FROM review
INNER JOIN lunch_box_review ON lunch_box_review.id = review.id
WHERE review.id = {reviewId} AND member_id = {memberId};
SELECT 
    review.selected_dishes as review_title,
    cafeteria_review.taste as review_taste,
    review.description as review_discription,
    review.created_at as review_created_at
FROM review
INNER JOIN cafeteria_review ON cafeteria_review.id = review.id
WHERE review.id = {reviewId} AND member_id = {memberId};

만약 조회가 안된다면 본인의 리뷰가 아니거나 타입을 잘못 전달한 것

Issue

  • GROUP CONCAT은 MySQL에서 사용하는 문법으로 해당 문법을 사용하면 특정 DBMS에 너무 종속적이게 된다. 따라서 GROUP CONCAT에서 처리해주던 로직을 애플리케이션 단에서 처리하는 것으로 결정했다.
  • 쿼리의 결과를 오브젝트에 매핑한 뒤 쿼리 결과에 대한 권한을 MyReview일급 객체에 위임했다. 해당 일급 객체에서 ResponseDTO로의 변환을 수행하는 로직을 가지는 것과, ResponseDTO에서 일급객체를 파라매터로 받는 정적 팩토리 메서드로 가지는 것 어떤 방식이 효율적일까
  • 컨트롤러에서 ReviewType을 받아 타입에 따라 각각 다른 서비스 로직을 수행한다. 해당 방법은 확장성이 떨어진다는 단점이 존재한다. 또한 하나의 쿼리결과 매핑 오브젝트에 결과를 담아야 하기 때문에 매핑 오브젝트에 NULL이 존재하게 된다. 따라서 해당 사항 의논 후 엔드포인트를 나누어 처리하는 방향을 고려해보려 한다.

resolved: #36

@hyunsb hyunsb added the develop 기능 개발 label Sep 20, 2023
@hyunsb hyunsb self-assigned this Sep 20, 2023
@hyunsb hyunsb merged commit ef3ac13 into develop Sep 21, 2023
@hyunsb hyunsb deleted the feature/#36-my-review-detail-service branch September 27, 2023 09:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

develop 기능 개발

Projects

None yet

Development

Successfully merging this pull request may close these issues.

달력 리뷰 상세페이지 응답 기능 구현

1 participant