TR1LL1ON / TR1LL1ON_BE

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

Feat: Review 구현 #24

Closed yurim0628 closed 11 months ago

yurim0628 commented 11 months ago

리뷰 기능 개발

리뷰 조회 (숙소 및 사용자별) 등록, 수정, 삭제 기능을 개발하였습니다.

숙소 리뷰 조회

  1. 요청 메서드 : GET
  2. 엔드포인트 : /reviews/{accommodationId}
  3. 요청 데이터 : accommodationId
  4. 응답 데이터
    • 성공 시 200 OK : 해당 숙소의 객실 별 작성된 리뷰 정보를 담은 ProductReviewListResponse 객체의 리스트를 반환
      [
      {
      "review_id": 12,
      "review_date": "2023-11-27",
      "score": 4.5,
      "user_id": 34,
      "product_id": 56,
      "content": "매우 만족!"
      },
      {
      "review_id": 13,
      "review_date": "2023-11-28",
      "score": 3.8,
      "user_id": 35,
      "product_id": 57,
      "content": "보통 만족!"
      }
      // ...
      ]
    • 실패 시 404 Not Found : 숙소가 존재하지 않을 경우 발생하는 AccommodationNotFoundException 예외에 대한 에러 응답을 반환
스크린샷 2023-11-27 19 31 48

개별 리뷰 조회

  1. 요청 메서드 : GET
  2. 엔드포인트 : /reviews
  3. 요청 데이터 : 없음
  4. 응답 데이터 성공 시 200 OK : 사용자가 작성한 상품 별 작성한 리뷰 정보를 담은 UserReviewListResponse 객체의 리스트를 반환
    [
    {
    "review_id": 12,
    "review_date": "2023-11-26",
    "score": 5.0,
    "order_item_id": 34,
    "accommodation_id": 56,
    "product_id": 78,
    "content": "매우 만족함!",      
    },
    {
    "review_id": 13,
    "review_date": "2023-11-26",
    "score": 5.0,
    "order_item_id": 35,
    "accommodation_id": 57,
    "product_id": 79,
    "content": "매우 만족함!",    
    },
    // ...
    ]
    스크린샷 2023-11-27 16 46 29

리뷰 등록

  1. 요청 메서드 : POST
  2. 엔드포인트 : /reviews
  3. 요청 데이터 : ReviewCreateRequest 객체
    
    {
    "order_item_id": 56,
    "score": 4.5,
    "content": "대체적으로 만족합니다!"
    }
> 4. 응답 데이터
>  * 성공 시 200 OK : 등록된 리뷰 정보를 담은 ReviewCreateResponse 객체를 반환 ( + OrderItem  reviewWritten 값 true 전환 ) 

{ "message": "리뷰가 성공적으로 작성되었습니다.", "review": { "review_id": 12, "review_date": "2023-11-27", "score": 4.5, "user_id": 34, "order_item_id": 56, "accommodationId": 78, "product_id": 90, "content": "대체적으로 만족합니다!" } }

>  * 실패 시 
>    * 404 Not Found : 이미 주문 상품을 삭제했을 때 OrderItemNotFoundException 예외에 대한 에러 응답을 반환
>    * 409 Conflict : 이미 리뷰를 작성했을 때 발생하는 ReviewAlreadyWrittenException 예외에 대한 에러 응답을 반환
<img width="1077" alt="스크린샷 2023-11-27 16 34 52" src="https://github.com/TR1LL1ON/TR1LL1ON_BE/assets/139152515/1ced91ab-fa9b-44f4-8581-fe188fcfe789">

## 리뷰 수정
> 1. 요청 메서드 : PUT
> 2. 엔드포인트 : /reviews/{reviewId}
> 3. 요청 데이터 : reviewId 및 ReviewUpdateRequest 객체 

{ "content": "대체적으로 만족합니다! 조식 구성이 다양했으면 좋겠어요!", "score": 5.0, }

> 4. 응답 데이터
>  * 성공 시 200 OK : 수정된 리뷰 정보를 담은 ReviewUpdateResponse 객체를 반환

{ "message": "리뷰가 성공적으로 수정되었습니다.", "review": { "review_id": 12, "update_date": "2023-11-28", "score": 5.0, "user_id": 34, "order_item_id": 56, "accommodation_id": 78, "product_id": 90, "content": "대체적으로 만족합니다! 조식 구성이 다양했으면 좋겠어요!" } }

>  * 실패 시 404 Not Found :  이미 리뷰를 삭제했을 때 발생하는 ReviewNotFoundException 예외에 대한 에러 응답을 반환
<img width="1077" alt="스크린샷 2023-11-26 17 10 14" src="https://github.com/TR1LL1ON/TR1LL1ON_BE/assets/139152515/6e217563-ba70-4e88-baea-2b5f94906cb6">

## 리뷰 삭제
> 1. 요청 메서드 : DELETE
> 2. 엔드포인트 : /reviews/{reviewId}
> 3. 요청 데이터 : reviewId
> 4. 응답 데이터
>  * 성공 시 200 OK :  수정된 리뷰 정보를 담은 ReviewDeleteResponse 객체를 반환

{ "message": "리뷰가 성공적으로 삭제되었습니다.", "review": { "review_id": 12, "delete_date": "2023-11-27" } }


>  * 실패 시  404 Not Found :  이미 리뷰를 삭제했을 때 발생하는 ReviewNotFoundException 예외에 대한 에러 응답을 반환
<img width="646" alt="스크린샷 2023-11-27 20 00 06" src="https://github.com/TR1LL1ON/TR1LL1ON_BE/assets/139152515/c51a7ff9-4f9f-49c0-a4a2-e9f01f2838a8">