From b3c89af0ce6592db6e3dfa14229fc53af698bd92 Mon Sep 17 00:00:00 2001 From: jiyoon Date: Wed, 22 May 2024 19:09:30 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=9C=84=EC=B9=98=EA=B8=B0=EB=B0=98=20?= =?UTF-8?q?=EB=AA=A8=EB=93=A0=20=EC=9C=A0=ED=98=95=20=EA=B4=80=EA=B4=91?= =?UTF-8?q?=EC=A7=80=20=EB=AA=A9=EB=A1=9D=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/openAPI/TourController.java | 12 +++++-- .../repository/LocationRepository.java | 9 +++++ .../fliwith/service/openAPI/TourService.java | 33 +++++-------------- 3 files changed, 26 insertions(+), 28 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 0cb16ea..1a427f5 100644 --- a/src/main/java/com/narae/fliwith/controller/openAPI/TourController.java +++ b/src/main/java/com/narae/fliwith/controller/openAPI/TourController.java @@ -24,10 +24,16 @@ public class TourController { private final TourService tourService; +// @GetMapping("/tour") +// public ResponseEntity>> getTourByType(@AuthenticationPrincipal CustomUser customUser, @RequestParam String latitude, @RequestParam String longitude, @RequestParam String contentTypeId){ +// return ResponseEntity.ok(BaseRes.create(HttpStatus.OK.value(), "관광지 목록 조회에 성공했습니다.", tourService.getTourByType( +// customUser.getEmail(), latitude, longitude, contentTypeId))); +// } + @GetMapping("/tour") - public ResponseEntity>> getTourByType(@AuthenticationPrincipal CustomUser customUser, @RequestParam String latitude, @RequestParam String longitude, @RequestParam String contentTypeId){ - return ResponseEntity.ok(BaseRes.create(HttpStatus.OK.value(), "관광지 목록 조회에 성공했습니다.", tourService.getTourByType( - customUser.getEmail(), latitude, longitude, contentTypeId))); + public ResponseEntity>> getTourByType(@AuthenticationPrincipal CustomUser customUser, @RequestParam double latitude, @RequestParam double longitude){ + return ResponseEntity.ok(BaseRes.create(HttpStatus.OK.value(), "위치기반 모든 유형의 관광지 목록 조회에 성공했습니다.", tourService.getNearEveryTourType( + customUser.getEmail(), latitude, longitude))); } @GetMapping("/tour/{contentTypeId}/{contentId}") diff --git a/src/main/java/com/narae/fliwith/repository/LocationRepository.java b/src/main/java/com/narae/fliwith/repository/LocationRepository.java index df8b154..22a539a 100644 --- a/src/main/java/com/narae/fliwith/repository/LocationRepository.java +++ b/src/main/java/com/narae/fliwith/repository/LocationRepository.java @@ -1,9 +1,18 @@ package com.narae.fliwith.repository; import com.narae.fliwith.domain.Location; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @Repository public interface LocationRepository extends JpaRepository { + @Query(value = "select * from location l " + + "where (6371 * acos(cos(radians(:curLat)) * cos(radians(l.latitude)) " + + "* cos(radians(l.longitude) - radians(:curLong)) " + + "+ sin(radians(:curLat)) * sin(radians(l.latitude)))) <= 3", nativeQuery = true) + List findNearEverySpotType(@Param("curLat")Double curLatitude, @Param("curLong")Double curLongitude); + } 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 b80b035..08f4842 100644 --- a/src/main/java/com/narae/fliwith/service/openAPI/TourService.java +++ b/src/main/java/com/narae/fliwith/service/openAPI/TourService.java @@ -119,32 +119,15 @@ public Mono getDetailIntro(String contentId, String content .onErrorReturn(DecodingException.class, new DetailIntroRes.Item()); } - public List getTourByType(String email, String latitude, String longitude, String contentTypeId) { + public List getNearEveryTourType(String email, double latitude, double longitude) { User user = authService.authUser(email); - return webClient.get() - .uri(uriBuilder -> - uriBuilder.path("/locationBasedList1") - .queryParam("MobileOS", "AND") - .queryParam("MobileApp", "fliwith") - .queryParam("mapX", longitude) - .queryParam("mapY", String.valueOf(latitude)) - .queryParam("radius", "1500") - .queryParam("_type", "json") - .queryParam("contentTypeId", String.valueOf(contentTypeId)) - .queryParam("serviceKey", serviceKey) - .build() - ) - .retrieve() - .bodyToFlux(new ParameterizedTypeReference() { - }) - .map(root -> root.getResponse().getBody().getItems().getItem().stream() - .map(item -> TourType.builder().contentId(Integer.parseInt(item.getContentid())).contentTypeId(Integer.parseInt(item.getContenttypeid())).latitude( - Double.parseDouble(item.getMapy())).longitude(Double.parseDouble(item.getMapx())).build()).collect( - Collectors.toList())) - .onErrorReturn(DecodingException.class, new ArrayList<>()) - .blockFirst(); - //TODO: DB에 관광지 미리 저장해두고, 조회하는 걸로 로직 변경하기 - + return locationRepository.findNearEverySpotType(latitude, longitude).stream() + .map(location -> TourType.builder() + .contentTypeId(location.getSpot().getContentTypeId()) + .contentId(location.getSpot().getId()) + .latitude(location.getLatitude()) + .longitude(location.getLongitude()).build()) + .collect(Collectors.toList()); } public TourDetailRes getTour(String email, String contentTypeId, String contentId) {