From b9be48fce2efc898ba51877a9132e1713f92c7ec Mon Sep 17 00:00:00 2001 From: JSoi Date: Mon, 1 Aug 2022 05:00:25 +0900 Subject: [PATCH] =?UTF-8?q?#18=20[Refactor]=20=EC=A4=91=EB=B3=B5=20?= =?UTF-8?q?=ED=95=A8=EC=88=98=20=EC=B6=94=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baechelin/api/dto/LocationInfoDto.java | 21 ++++++ .../baechelin/api/dto/LocationPartDto.java | 35 ++++++++++ .../api/service/LocationServiceRT.java | 70 ++----------------- .../api/service/LocationServiceWC.java | 66 ++--------------- .../baechelin/common/DataClarification.java | 15 ++++ 5 files changed, 82 insertions(+), 125 deletions(-) diff --git a/src/main/java/com/mpnp/baechelin/api/dto/LocationInfoDto.java b/src/main/java/com/mpnp/baechelin/api/dto/LocationInfoDto.java index f073b51..6b15424 100644 --- a/src/main/java/com/mpnp/baechelin/api/dto/LocationInfoDto.java +++ b/src/main/java/com/mpnp/baechelin/api/dto/LocationInfoDto.java @@ -1,8 +1,11 @@ package com.mpnp.baechelin.api.dto; +import com.mpnp.baechelin.api.model.LocationKeywordSearchForm; +import com.mpnp.baechelin.common.DataClarification; import lombok.*; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; @NoArgsConstructor @@ -34,5 +37,23 @@ public boolean validate() { return this.category != null && this.storeId != null && this.latitude != null && this.longitude != null && this.storeName != null; } + + public static LocationResponse KeywordToRes(LocationKeywordSearchForm locationKeywordSearchForm){ + if (locationKeywordSearchForm == null) { + return null; + } + LocationKeywordSearchForm.Documents latLngDoc + = Arrays.stream(locationKeywordSearchForm.getDocuments()).findFirst().orElse(null); + if (latLngDoc == null) { + return null; + } + return LocationInfoDto.LocationResponse.builder() + .storeId(Long.valueOf(latLngDoc.getId())) + .latitude(latLngDoc.getY()) + .longitude(latLngDoc.getX()) + .category(DataClarification.categoryFilter(latLngDoc.getCategory_name())) + .storeName(latLngDoc.getPlace_name()) + .phoneNumber(latLngDoc.getPhone()).build(); + } } } diff --git a/src/main/java/com/mpnp/baechelin/api/dto/LocationPartDto.java b/src/main/java/com/mpnp/baechelin/api/dto/LocationPartDto.java index bfdba51..d9f485d 100644 --- a/src/main/java/com/mpnp/baechelin/api/dto/LocationPartDto.java +++ b/src/main/java/com/mpnp/baechelin/api/dto/LocationPartDto.java @@ -1,7 +1,11 @@ package com.mpnp.baechelin.api.dto; +import com.mpnp.baechelin.api.model.LocationAddressSearchForm; +import com.mpnp.baechelin.api.model.LocationKeywordSearchForm; import lombok.*; +import java.util.Arrays; + @AllArgsConstructor @Getter @Setter @Builder @@ -19,6 +23,22 @@ public static class LatLong{ public boolean validate() { return this.latitude != null && this.longitude != null; } + public static LatLong convertPart(LocationKeywordSearchForm locationKeywordSearchForm){ + LocationPartDto.LatLong locLl = LocationPartDto.LatLong.builder().build(); + if (locationKeywordSearchForm == null) { // 비어 있을 때 status-false 저장 + return locLl; + } + LocationKeywordSearchForm.Documents latLngDoc + = Arrays.stream(locationKeywordSearchForm.getDocuments()).findAny().orElse(null); + if (latLngDoc != null) { + locLl = LocationPartDto.LatLong.builder() + .latitude(latLngDoc.getY()) + .longitude(latLngDoc.getX()) + .status(true) + .build(); + } + return locLl; + } } @AllArgsConstructor @@ -28,5 +48,20 @@ public static class Address{ @Builder.Default private boolean status = false; private String address; + public static Address formToDto(LocationAddressSearchForm resultRe) { + LocationPartDto.Address addressInfoDto = LocationPartDto.Address.builder().build(); + if (resultRe == null) + return addressInfoDto; + + LocationAddressSearchForm.TotalAddress address = Arrays.stream(resultRe.getDocuments()).findFirst().orElse(null); + if (address == null) { + return addressInfoDto; + } else { + return LocationPartDto.Address.builder() + .address(address.getAddress().getAddress_name()) + .status(true) + .build(); + } + } } } diff --git a/src/main/java/com/mpnp/baechelin/api/service/LocationServiceRT.java b/src/main/java/com/mpnp/baechelin/api/service/LocationServiceRT.java index 48cf1a1..29758d8 100644 --- a/src/main/java/com/mpnp/baechelin/api/service/LocationServiceRT.java +++ b/src/main/java/com/mpnp/baechelin/api/service/LocationServiceRT.java @@ -17,6 +17,8 @@ import java.net.URI; import java.util.*; +import static com.mpnp.baechelin.common.DataClarification.categoryFilter; + @Service @Slf4j @RequiredArgsConstructor @@ -35,21 +37,8 @@ public class LocationServiceRT implements LocationService { */ public LocationPartDto.LatLong convertAddressToGeo(String address) { // status, latitude, longitude 를 키로 가지는 HashMap 생성 - LocationPartDto.LatLong locLl = LocationPartDto.LatLong.builder().build(); LocationKeywordSearchForm locationKeywordSearchForm = getLatLngByAddress(address); - if (locationKeywordSearchForm == null) { // 비어 있을 때 status-false 저장 - return locLl; - } - LocationKeywordSearchForm.Documents latLngDoc - = Arrays.stream(locationKeywordSearchForm.getDocuments()).findAny().orElse(null); - if (latLngDoc != null) { - locLl = LocationPartDto.LatLong.builder() - .latitude(latLngDoc.getY()) - .longitude(latLngDoc.getX()) - .status(true) - .build(); - } - return locLl; + return LocationPartDto.LatLong.convertPart(locationKeywordSearchForm); } /** @@ -136,21 +125,7 @@ private LocationKeywordSearchForm getCategoryByCode(String lat, String lng, Stri public LocationInfoDto.LocationResponse convertGeoAndStoreNameToKeyword(String lat, String lng, String storeName) { LocationKeywordSearchForm locationKeywordSearchForm = getCategoryByLatLngKeyword(lat, lng, storeName); // 위도, 경도, 업장명을 가지고 업장 정보를 찾는다 - if (locationKeywordSearchForm == null) { - return null; - } - LocationKeywordSearchForm.Documents latLngDoc - = Arrays.stream(locationKeywordSearchForm.getDocuments()).findFirst().orElse(null); - if (latLngDoc == null) { - return null; - } - return LocationInfoDto.LocationResponse.builder() - .storeId(Long.parseLong(latLngDoc.getId())) - .latitude(latLngDoc.getY()) - .longitude(latLngDoc.getX()) - .category(categoryFilter(latLngDoc.getCategory_name())) - .storeName(latLngDoc.getPlace_name()) - .phoneNumber(latLngDoc.getPhone()).build(); + return LocationInfoDto.LocationResponse.KeywordToRes(locationKeywordSearchForm); } /** @@ -204,21 +179,6 @@ private void getStoreResults(String lat, String lng, String address, String type } while (locationKeywordSearchForm.getMeta().is_end()); // 마지막 페이지까지 검사 } - - /** - * @param category 변환할 카테고리 - * @return 카테고리의 중분류를 추출해 반환 - */ - private String categoryFilter(String category) { - if (category == null) { - return Category.ETC.getDesc(); - } else if (category.contains(">")) { - return Category.giveCategory(category.split(" > ")[1]).getDesc(); - } else { - return null; - } - } - /** * @param lat 위도 * @param lng 경도 @@ -242,26 +202,6 @@ public LocationPartDto.Address convertGeoToAddress(String lat, String lng) { uri, HttpMethod.GET, new HttpEntity<>(headers), LocationAddressSearchForm.class ); LocationAddressSearchForm locationKeywordSearchForm = resultRe.getBody(); - return formToDto(locationKeywordSearchForm); - } - - /** - * @param resultRe API에서 받아온 결과 Form - * @return DTO로 매핑한 결과 - */ - private LocationPartDto.Address formToDto(LocationAddressSearchForm resultRe) { - LocationPartDto.Address addressInfoDto = LocationPartDto.Address.builder().build(); - if (resultRe == null) - return addressInfoDto; - - LocationAddressSearchForm.TotalAddress address = Arrays.stream(resultRe.getDocuments()).findFirst().orElse(null); - if (address == null) { - return addressInfoDto; - } else { - return LocationPartDto.Address.builder() - .address(address.getAddress().getAddress_name()) - .status(true) - .build(); - } + return LocationPartDto.Address.formToDto(locationKeywordSearchForm); } } diff --git a/src/main/java/com/mpnp/baechelin/api/service/LocationServiceWC.java b/src/main/java/com/mpnp/baechelin/api/service/LocationServiceWC.java index 5fdcefe..85046b6 100644 --- a/src/main/java/com/mpnp/baechelin/api/service/LocationServiceWC.java +++ b/src/main/java/com/mpnp/baechelin/api/service/LocationServiceWC.java @@ -4,6 +4,7 @@ import com.mpnp.baechelin.api.dto.LocationPartDto; import com.mpnp.baechelin.api.model.LocationAddressSearchForm; import com.mpnp.baechelin.api.model.LocationKeywordSearchForm; +import com.mpnp.baechelin.common.DataClarification; import com.mpnp.baechelin.common.httpclient.HttpConfig; import com.mpnp.baechelin.store.domain.Category; import lombok.RequiredArgsConstructor; @@ -39,21 +40,8 @@ public class LocationServiceWC implements LocationService { */ public LocationPartDto.LatLong convertAddressToGeo(String address) { // status, latitude, longitude 를 키로 가지는 HashMap 생성 - LocationPartDto.LatLong locLl = LocationPartDto.LatLong.builder().build(); LocationKeywordSearchForm locationKeywordSearchForm = getLatLngByAddress(address); - if (locationKeywordSearchForm == null) { // 비어 있을 때 status-false 저장 - return locLl; - } - LocationKeywordSearchForm.Documents latLngDoc - = Arrays.stream(locationKeywordSearchForm.getDocuments()).findAny().orElse(null); - if (latLngDoc != null) { - locLl = LocationPartDto.LatLong.builder() - .latitude(latLngDoc.getY()) - .longitude(latLngDoc.getX()) - .status(true) - .build(); - } - return locLl; + return LocationPartDto.LatLong.convertPart(locationKeywordSearchForm); } /** @@ -125,21 +113,7 @@ private LocationKeywordSearchForm getCategoryByCode(String lat, String lng, Stri public LocationInfoDto.LocationResponse convertGeoAndStoreNameToKeyword(String lat, String lng, String storeName) { LocationKeywordSearchForm locationKeywordSearchForm = getCategoryByLatLngKeyword(lat, lng, storeName); // 위도, 경도, 업장명을 가지고 업장 정보를 찾는다 - if (locationKeywordSearchForm == null) { - return null; - } - LocationKeywordSearchForm.Documents latLngDoc - = Arrays.stream(locationKeywordSearchForm.getDocuments()).findFirst().orElse(null); - if (latLngDoc == null) { - return null; - } - return LocationInfoDto.LocationResponse.builder() - .storeId(Long.valueOf(latLngDoc.getId())) - .latitude(latLngDoc.getY()) - .longitude(latLngDoc.getX()) - .category(categoryFilter(latLngDoc.getCategory_name())) - .storeName(latLngDoc.getPlace_name()) - .phoneNumber(latLngDoc.getPhone()).build(); + return LocationInfoDto.LocationResponse.KeywordToRes(locationKeywordSearchForm); } /** @@ -174,7 +148,7 @@ private void getStoreResults(String lat, String lng, String address, String type LocationInfoDto.LocationResponse newResult = LocationInfoDto.LocationResponse.builder() .latitude(latLngDoc.getY()) .longitude(latLngDoc.getX()) - .category(categoryFilter(latLngDoc.getCategory_name())) + .category(DataClarification.categoryFilter(latLngDoc.getCategory_name())) .storeName(latLngDoc.getPlace_name()) .storeId(Long.valueOf(latLngDoc.getId())) .phoneNumber(latLngDoc.getPhone()) @@ -187,19 +161,7 @@ private void getStoreResults(String lat, String lng, String address, String type } while (locationKeywordSearchForm.getMeta().is_end()); // 마지막 페이지까지 검사 } - /** - * @param category 변환할 카테고리 - * @return 카테고리의 중분류를 추출해 반환 - */ - private String categoryFilter(String category) { - if (category == null) { - return Category.ETC.getDesc(); - } else if (category.contains(">")) { - return Category.giveCategory(category.split(" > ")[1]).getDesc(); - } else { - return null; - } - } + public LocationPartDto.Address convertGeoToAddress(String lat, String lng) { WebClient client = WebClient.builder() @@ -218,22 +180,6 @@ public LocationPartDto.Address convertGeoToAddress(String lat, String lng) { .toStream() .findFirst() .orElse(null); - return formToDto(locationAddressSearchForm); - } - - private LocationPartDto.Address formToDto(LocationAddressSearchForm resultRe) { - LocationPartDto.Address addressInfoDto = LocationPartDto.Address.builder().build(); - if (resultRe == null) - return addressInfoDto; - - LocationAddressSearchForm.TotalAddress address = Arrays.stream(resultRe.getDocuments()).findFirst().orElse(null); - if (address == null) { - return addressInfoDto; - } else { - return LocationPartDto.Address.builder() - .address(address.getAddress().getAddress_name()) - .status(true) - .build(); - } + return LocationPartDto.Address.formToDto(locationAddressSearchForm); } } diff --git a/src/main/java/com/mpnp/baechelin/common/DataClarification.java b/src/main/java/com/mpnp/baechelin/common/DataClarification.java index 12d9072..cc18f08 100644 --- a/src/main/java/com/mpnp/baechelin/common/DataClarification.java +++ b/src/main/java/com/mpnp/baechelin/common/DataClarification.java @@ -1,5 +1,7 @@ package com.mpnp.baechelin.common; +import com.mpnp.baechelin.store.domain.Category; + public class DataClarification { public static String clarifyString(String input){ // Trim @@ -7,4 +9,17 @@ public static String clarifyString(String input){ // replace all blanks return input.replaceAll("\\s+", " "); } + /** + * @param category 변환할 카테고리 + * @return 카테고리의 중분류를 추출해 반환 + */ + public static String categoryFilter(String category) { + if (category == null) { + return Category.ETC.getDesc(); + } else if (category.contains(">")) { + return Category.giveCategory(category.split(" > ")[1]).getDesc(); + } else { + return null; + } + } }