From 7e986c2d77d6a8ac5bff5ab997f7e2009cc53191 Mon Sep 17 00:00:00 2001 From: jiyoon Date: Sun, 19 May 2024 17:16:50 +0900 Subject: [PATCH] =?UTF-8?q?update:=20=EA=B4=80=EA=B4=91=EC=A7=80=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=EC=A1=B0=ED=9A=8C=EC=97=90=20=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EB=AA=A9=EB=A1=9D=20=EC=B6=94=EA=B0=80,=20?= =?UTF-8?q?=EB=94=94=EC=BD=94=EB=94=A9=20=EC=97=90=EB=9F=AC=20return?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/openAPI/TourController.java | 6 ++-- .../java/com/narae/fliwith/dto/TourRes.java | 2 ++ .../fliwith/repository/ReviewRepository.java | 3 ++ .../fliwith/service/openAPI/TourService.java | 29 +++++++++++++++---- 4 files changed, 31 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/narae/fliwith/controller/openAPI/TourController.java b/src/main/java/com/narae/fliwith/controller/openAPI/TourController.java index a552c17..df16bf6 100644 --- a/src/main/java/com/narae/fliwith/controller/openAPI/TourController.java +++ b/src/main/java/com/narae/fliwith/controller/openAPI/TourController.java @@ -21,19 +21,19 @@ public class TourController { private final TourService tourService; @GetMapping("/tour") public ResponseEntity>> getTourByType(@RequestParam String latitude, @RequestParam String longitude, @RequestParam String contentTypeId){ - return ResponseEntity.ok(BaseRes.create(HttpStatus.OK.value(), "관광지 리스트를 조회하는데 성공했습니다.", tourService.getTourByType(latitude, longitude, contentTypeId))); + return ResponseEntity.ok(BaseRes.create(HttpStatus.OK.value(), "관광지 목록 조회에 성공했습니다.", tourService.getTourByType(latitude, longitude, contentTypeId))); } @GetMapping("/tour/{contentTypeId}/{contentId}") public ResponseEntity> getTour(@PathVariable(value = "contentTypeId")String contentTypeId, @PathVariable(value = "contentId") String contentId){ - return ResponseEntity.ok(BaseRes.create(HttpStatus.OK.value(), "관광지 리스트를 조회하는데 성공했습니다.", tourService.getTour(contentTypeId, contentId))); + return ResponseEntity.ok(BaseRes.create(HttpStatus.OK.value(), "관광지 상세 조회에 성공했습니다.", tourService.getTour(contentTypeId, contentId))); } @GetMapping("/admin/save") public ResponseEntity> saveTour(@RequestParam String contentTypeId){ tourService.saveAllSpots(contentTypeId); - return ResponseEntity.ok(BaseRes.create(HttpStatus.OK.value(), "관광지 타입 리스트를 저장하는데 성공했습니다.")); + return ResponseEntity.ok(BaseRes.create(HttpStatus.OK.value(), "관광지 타입 목록을 저장하는데 성공했습니다.")); } } diff --git a/src/main/java/com/narae/fliwith/dto/TourRes.java b/src/main/java/com/narae/fliwith/dto/TourRes.java index b5bcafc..918dd6e 100644 --- a/src/main/java/com/narae/fliwith/dto/TourRes.java +++ b/src/main/java/com/narae/fliwith/dto/TourRes.java @@ -1,5 +1,6 @@ package com.narae.fliwith.dto; +import com.narae.fliwith.dto.ReviewRes.ReviewItem; import com.narae.fliwith.dto.openAPI.DetailCommonRes; import com.narae.fliwith.dto.openAPI.DetailIntroRes; import com.narae.fliwith.dto.openAPI.DetailWithTourRes; @@ -37,6 +38,7 @@ public static class TourDetailRes{ DetailWithTourRes.Item detailWithTour; DetailIntroRes.Item detailIntro; DetailCommonRes.Item detailCommon; + List reviews; } diff --git a/src/main/java/com/narae/fliwith/repository/ReviewRepository.java b/src/main/java/com/narae/fliwith/repository/ReviewRepository.java index 064c5da..775ebe9 100644 --- a/src/main/java/com/narae/fliwith/repository/ReviewRepository.java +++ b/src/main/java/com/narae/fliwith/repository/ReviewRepository.java @@ -1,6 +1,7 @@ package com.narae.fliwith.repository; import com.narae.fliwith.domain.Review; +import com.narae.fliwith.domain.Spot; import com.narae.fliwith.domain.User; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -14,5 +15,7 @@ public interface ReviewRepository extends JpaRepository { Page findAllByUserOrderByCreatedAtDesc(User user, Pageable pageable); + Page findAllBySpotOrderByCreatedAtDesc(Spot spot, Pageable pageable); + } diff --git a/src/main/java/com/narae/fliwith/service/openAPI/TourService.java b/src/main/java/com/narae/fliwith/service/openAPI/TourService.java index b89eb89..bb5fddb 100644 --- a/src/main/java/com/narae/fliwith/service/openAPI/TourService.java +++ b/src/main/java/com/narae/fliwith/service/openAPI/TourService.java @@ -1,13 +1,15 @@ package com.narae.fliwith.service.openAPI; import com.narae.fliwith.domain.Location; +import com.narae.fliwith.domain.Review; import com.narae.fliwith.domain.Spot; -import com.narae.fliwith.dto.TourRes; +import com.narae.fliwith.dto.ReviewRes.ReviewItem; import com.narae.fliwith.dto.TourRes.TourDetailRes; import com.narae.fliwith.dto.TourRes.TourType; import com.narae.fliwith.dto.openAPI.*; -import com.narae.fliwith.dto.openAPI.DetailWithTourRes.Item; +import com.narae.fliwith.exception.spot.SpotFindFailException; import com.narae.fliwith.repository.LocationRepository; +import com.narae.fliwith.repository.ReviewRepository; import com.narae.fliwith.repository.SpotRepository; import jakarta.transaction.Transactional; import java.util.ArrayList; @@ -17,6 +19,9 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.core.ParameterizedTypeReference; import org.springframework.core.codec.DecodingException; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.web.reactive.function.client.WebClient; import reactor.core.publisher.Mono; @@ -32,8 +37,9 @@ public class TourService { private final SpotRepository spotRepository; private final LocationRepository locationRepository; + private final ReviewRepository reviewRepository; - public Mono getDetailWithTour(String contentId) { + public Mono getDetailWithTour(String contentId) { return webClient.get() .uri(uriBuilder -> uriBuilder.path("/detailWithTour1") @@ -47,7 +53,8 @@ public Mono getDetailWithTour(String contentId) { .retrieve() .bodyToMono(new ParameterizedTypeReference() { }) - .map(root -> root.getResponse().getBody().getItems().getItem().get(0)); + .map(root -> root.getResponse().getBody().getItems().getItem().get(0)) + .onErrorReturn(DecodingException.class, new DetailWithTourRes.Item()); } @@ -69,7 +76,8 @@ public Mono getDetailCommon(String contentId) { .retrieve() .bodyToMono(new ParameterizedTypeReference() { }) - .map(root -> root.getResponse().getBody().getItems().getItem().get(0)); + .map(root -> root.getResponse().getBody().getItems().getItem().get(0)) + .onErrorReturn(DecodingException.class, new DetailCommonRes.Item()); } public Mono getDetailIntro(String contentId, String contentTypeId) { @@ -87,7 +95,8 @@ public Mono getDetailIntro(String contentId, String content .retrieve() .bodyToMono(new ParameterizedTypeReference() { }) - .map(root -> root.getResponse().getBody().getItems().getItem().get(0)); + .map(root -> root.getResponse().getBody().getItems().getItem().get(0)) + .onErrorReturn(DecodingException.class, new DetailIntroRes.Item()); } public List getTourByType(String latitude, String longitude, String contentTypeId) { @@ -121,10 +130,18 @@ public TourDetailRes getTour(String contentTypeId, String contentId) { DetailIntroRes.Item detailIntro = getDetailIntro(contentId, contentTypeId).block(); DetailCommonRes.Item detailCommon = getDetailCommon(contentId).block(); + Pageable pageable = PageRequest.of(0, 10); // 0은 페이지 번호, 10은 페이지 크기 + Spot spot = spotRepository.findById(Integer.parseInt(contentId)).orElseThrow(SpotFindFailException::new); + + Page reviewsPage = reviewRepository.findAllBySpotOrderByCreatedAtDesc(spot, pageable); + List reviews = reviewsPage.getContent(); + return TourDetailRes.builder() .detailWithTour(detailWithTour) .detailIntro(detailIntro) .detailCommon(detailCommon) + .reviews(reviews.stream().map(review -> new ReviewItem(review.getId(), review.getImages().get(0).getUrl(), review.getUser().getNickname(), review.getUser().getDisability(), (long) review.getLikes().size())).collect( + Collectors.toList())) .build(); }