From cde4e57ca4490b645864a5613fb099ed49d1975f Mon Sep 17 00:00:00 2001 From: changha Date: Wed, 1 May 2024 16:37:49 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20=EC=A2=8C=ED=91=9C=20=EB=B3=B4?= =?UTF-8?q?=EB=82=BC=EB=95=8C=EB=8A=94=20=EB=B0=B0=EC=97=B4=ED=98=95?= =?UTF-8?q?=ED=83=9C=EB=A1=9C=20=EC=A7=80=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/service/AddPostRequest.java | 23 +++++++++++++-- .../post/application/service/PostService.java | 7 ++--- .../service/UpdatePostRequest.java | 6 ++-- .../sanEseo/public_api/CoordinateRequest.java | 18 ++++++++++++ .../sanEseo/public_api/CoordinateService.java | 2 +- .../public_api/CoordinatesDeserializer.java | 29 +++++++++++++++++++ .../public_api/CoordinatesSerializer.java | 21 ++++++++++++++ .../public_api/GetCoordinateResponse.java | 3 ++ .../sanEseo/public_api/PublicDataService.java | 7 ++++- 9 files changed, 103 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/seoultech/sanEseo/public_api/CoordinateRequest.java create mode 100644 src/main/java/com/seoultech/sanEseo/public_api/CoordinatesDeserializer.java create mode 100644 src/main/java/com/seoultech/sanEseo/public_api/CoordinatesSerializer.java diff --git a/src/main/java/com/seoultech/sanEseo/post/application/service/AddPostRequest.java b/src/main/java/com/seoultech/sanEseo/post/application/service/AddPostRequest.java index c9e1fa2..a527b23 100644 --- a/src/main/java/com/seoultech/sanEseo/post/application/service/AddPostRequest.java +++ b/src/main/java/com/seoultech/sanEseo/post/application/service/AddPostRequest.java @@ -1,8 +1,10 @@ package com.seoultech.sanEseo.post.application.service; +import com.fasterxml.jackson.annotation.JsonProperty; import com.seoultech.sanEseo.post.domain.Category; import com.seoultech.sanEseo.image.PostImage; -import com.seoultech.sanEseo.public_api.GetCoordinateResponse; +import com.seoultech.sanEseo.public_api.CoordinateRequest; + import com.seoultech.sanEseo.public_api.GetGeometryResponse; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; @@ -43,11 +45,22 @@ public class AddPostRequest { private Long districtId; @NotNull(message = "좌표 정보는 필수입니다.") - private GetGeometryResponse geometry; + private CoordinateRequest geometry; // 생성자, 게터, 세터 등 추가 필요 - public AddPostRequest(Category category, String title, String subTitle, String description, String level, String time, String distance, String courseDetail, String transportation, Long districtId, GetGeometryResponse geometry) { + // 생성자에 @JsonProperty 어노테이션 추가 + public AddPostRequest(@JsonProperty("category") Category category, + @JsonProperty("title") String title, + @JsonProperty("subTitle") String subTitle, + @JsonProperty("description") String description, + @JsonProperty("level") String level, + @JsonProperty("time") String time, + @JsonProperty("distance") String distance, + @JsonProperty("courseDetail") String courseDetail, + @JsonProperty("transportation") String transportation, + @JsonProperty("districtId") Long districtId, + @JsonProperty("geometry") CoordinateRequest geometry) { this.category = category; this.title = title; this.subTitle = subTitle; @@ -60,4 +73,8 @@ public AddPostRequest(Category category, String title, String subTitle, String d this.districtId = districtId; this.geometry = geometry; } + + + + } \ No newline at end of file diff --git a/src/main/java/com/seoultech/sanEseo/post/application/service/PostService.java b/src/main/java/com/seoultech/sanEseo/post/application/service/PostService.java index 7e71255..033a76c 100644 --- a/src/main/java/com/seoultech/sanEseo/post/application/service/PostService.java +++ b/src/main/java/com/seoultech/sanEseo/post/application/service/PostService.java @@ -6,10 +6,7 @@ import com.seoultech.sanEseo.post.domain.Post; import com.seoultech.sanEseo.post_district.domain.PostDistrict; import com.seoultech.sanEseo.post_district.application.port.PostDistrictPort; -import com.seoultech.sanEseo.public_api.Coordinate; -import com.seoultech.sanEseo.public_api.CoordinateService; -import com.seoultech.sanEseo.public_api.GetCoordinateResponse; -import com.seoultech.sanEseo.public_api.GetGeometryResponse; +import com.seoultech.sanEseo.public_api.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -46,7 +43,7 @@ public Post addPost(AddPostRequest request) { request.getLevel(), request.getTime(), request.getDistance(), request.getCourseDetail(), request.getTransportation()); - GetGeometryResponse geometry = request.getGeometry(); + CoordinateRequest geometry = request.getGeometry(); coordinateService.saveCoordinate(geometry, post); postPort.save(post); // Post 저장 diff --git a/src/main/java/com/seoultech/sanEseo/post/application/service/UpdatePostRequest.java b/src/main/java/com/seoultech/sanEseo/post/application/service/UpdatePostRequest.java index 3dad015..4faa019 100644 --- a/src/main/java/com/seoultech/sanEseo/post/application/service/UpdatePostRequest.java +++ b/src/main/java/com/seoultech/sanEseo/post/application/service/UpdatePostRequest.java @@ -2,7 +2,7 @@ import com.seoultech.sanEseo.post.domain.Category; import com.seoultech.sanEseo.image.PostImage; -import com.seoultech.sanEseo.public_api.GetGeometryResponse; +import com.seoultech.sanEseo.public_api.CoordinateRequest; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Getter; @@ -44,9 +44,9 @@ public class UpdatePostRequest { private Long districtId; @NotNull(message = "좌표 정보는 필수입니다.") - private GetGeometryResponse geometry; + private CoordinateRequest geometry; - public UpdatePostRequest(Category category, String title, String subTitle, String description, String level, String time, String distance, String courseDetail, String transportation, List images, Long districtId, GetGeometryResponse geometry) { + public UpdatePostRequest(Category category, String title, String subTitle, String description, String level, String time, String distance, String courseDetail, String transportation, List images, Long districtId, CoordinateRequest geometry) { this.category = category; this.title = title; this.subTitle = subTitle; diff --git a/src/main/java/com/seoultech/sanEseo/public_api/CoordinateRequest.java b/src/main/java/com/seoultech/sanEseo/public_api/CoordinateRequest.java new file mode 100644 index 0000000..a644b5f --- /dev/null +++ b/src/main/java/com/seoultech/sanEseo/public_api/CoordinateRequest.java @@ -0,0 +1,18 @@ +package com.seoultech.sanEseo.public_api; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.List; + +@AllArgsConstructor +@Getter +public class CoordinateRequest { + + private String name; + private String type; + + private List> coordinates; + +} diff --git a/src/main/java/com/seoultech/sanEseo/public_api/CoordinateService.java b/src/main/java/com/seoultech/sanEseo/public_api/CoordinateService.java index 4ae1878..f4054c0 100644 --- a/src/main/java/com/seoultech/sanEseo/public_api/CoordinateService.java +++ b/src/main/java/com/seoultech/sanEseo/public_api/CoordinateService.java @@ -12,7 +12,7 @@ public class CoordinateService { private CoordinateRepository coordinateRepository; @Transactional - public void saveCoordinate(GetGeometryResponse geometryResponse, Post post) { + public void saveCoordinate(CoordinateRequest geometryResponse, Post post) { Coordinate coordinate = new Coordinate( geometryResponse.getName(), geometryResponse.getType(), diff --git a/src/main/java/com/seoultech/sanEseo/public_api/CoordinatesDeserializer.java b/src/main/java/com/seoultech/sanEseo/public_api/CoordinatesDeserializer.java new file mode 100644 index 0000000..735480b --- /dev/null +++ b/src/main/java/com/seoultech/sanEseo/public_api/CoordinatesDeserializer.java @@ -0,0 +1,29 @@ +package com.seoultech.sanEseo.public_api; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class CoordinatesDeserializer extends JsonDeserializer>> { + @Override + public List> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { + List> coordinates = new ArrayList<>(); + while (p.nextToken() != JsonToken.END_ARRAY) { + JsonNode node = p.getCodec().readTree(p); + double lat = node.get("lat").asDouble(); + double lng = node.get("lng").asDouble(); + List coordPair = new ArrayList<>(); + coordPair.add(lat); + coordPair.add(lng); + coordinates.add(coordPair); + } + return coordinates; + } +} \ No newline at end of file diff --git a/src/main/java/com/seoultech/sanEseo/public_api/CoordinatesSerializer.java b/src/main/java/com/seoultech/sanEseo/public_api/CoordinatesSerializer.java new file mode 100644 index 0000000..b3fe30e --- /dev/null +++ b/src/main/java/com/seoultech/sanEseo/public_api/CoordinatesSerializer.java @@ -0,0 +1,21 @@ +package com.seoultech.sanEseo.public_api; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; +import java.io.IOException; +import java.util.List; + +public class CoordinatesSerializer extends JsonSerializer>> { + @Override + public void serialize(List> value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + gen.writeStartArray(); + for (List coord : value) { + gen.writeStartObject(); + gen.writeNumberField("lat", coord.get(0)); + gen.writeNumberField("lng", coord.get(1)); + gen.writeEndObject(); + } + gen.writeEndArray(); + } +} diff --git a/src/main/java/com/seoultech/sanEseo/public_api/GetCoordinateResponse.java b/src/main/java/com/seoultech/sanEseo/public_api/GetCoordinateResponse.java index 0478870..7d5aa0b 100644 --- a/src/main/java/com/seoultech/sanEseo/public_api/GetCoordinateResponse.java +++ b/src/main/java/com/seoultech/sanEseo/public_api/GetCoordinateResponse.java @@ -1,6 +1,7 @@ package com.seoultech.sanEseo.public_api; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; import lombok.AllArgsConstructor; import lombok.Getter; @@ -11,5 +12,7 @@ public class GetCoordinateResponse { String type; + + @JsonSerialize(using = CoordinatesSerializer.class) List> coordinates; } diff --git a/src/main/java/com/seoultech/sanEseo/public_api/PublicDataService.java b/src/main/java/com/seoultech/sanEseo/public_api/PublicDataService.java index 46c765c..ff280be 100644 --- a/src/main/java/com/seoultech/sanEseo/public_api/PublicDataService.java +++ b/src/main/java/com/seoultech/sanEseo/public_api/PublicDataService.java @@ -168,7 +168,7 @@ public void addPublicData(int dataIndex){ safeSubstring(getCourseResponse.getDescription(), 0, 255), getCourseResponse.getLevel(), getCourseResponse.getTime(), getCourseResponse.getDistance(), safeSubstring(getCourseResponse.getCourseDetail(), 0 ,255), - getCourseResponse.getTransportation(), id, getGeometryResponse)); + getCourseResponse.getTransportation(), id, convertToCoordinateRequest(getGeometryResponse))); } @@ -200,6 +200,11 @@ public boolean isNameSimilar(String name1, String name2) { return score > 0.95; // 유사도 점수가 0.85 이상이면 유사하다고 판단 } + public CoordinateRequest convertToCoordinateRequest(GetGeometryResponse geometry){ + return new CoordinateRequest(geometry.getName(), geometry.getType(), geometry.getCoordinates()); + + } + }