diff --git a/ea-application/app-api/src/main/java/com/nbe2/api/emergencyroom/EmergencyRoomApi.java b/ea-application/app-api/src/main/java/com/nbe2/api/emergencyroom/EmergencyRoomApi.java index 37fc70a..e6b19a9 100644 --- a/ea-application/app-api/src/main/java/com/nbe2/api/emergencyroom/EmergencyRoomApi.java +++ b/ea-application/app-api/src/main/java/com/nbe2/api/emergencyroom/EmergencyRoomApi.java @@ -9,10 +9,12 @@ import lombok.RequiredArgsConstructor; +import com.nbe2.api.emergencyroom.dto.EmergencyRoomDirectionsResponse; import com.nbe2.api.emergencyroom.dto.EmergencyRoomMapResponse; import com.nbe2.api.emergencyroom.dto.RealTimeEmergencyRoomResponse; import com.nbe2.api.global.dto.Response; import com.nbe2.domain.emergencyroom.Coordinate; +import com.nbe2.domain.emergencyroom.EmergencyRoomDirectionsInfo; import com.nbe2.domain.emergencyroom.EmergencyRoomService; @RestController @@ -47,6 +49,17 @@ public Response> saveSearEmergency(@RequestParam String hospitalNam return Response.success(emergencyRoomListForName); } + @GetMapping("/directions") + public Response directionsEmergency( + @RequestParam("myLocation") String myLocation, + @RequestParam("hospitalName") String hospitalName) { + EmergencyRoomDirectionsInfo emergencyRoomDirectionsInfo = + emergencyRoomService.directionsEmergencyRoom(myLocation, hospitalName); + EmergencyRoomDirectionsResponse emergencyRoomDirectionsResponse = + EmergencyRoomDirectionsResponse.to(emergencyRoomDirectionsInfo); + return Response.success(emergencyRoomDirectionsResponse); + } + @GetMapping("/map") public Response> getEmergencyRooms( @RequestParam Double longitude, diff --git a/ea-application/app-api/src/main/java/com/nbe2/api/emergencyroom/dto/EmergencyRoomDirectionsResponse.java b/ea-application/app-api/src/main/java/com/nbe2/api/emergencyroom/dto/EmergencyRoomDirectionsResponse.java new file mode 100644 index 0000000..123e9d6 --- /dev/null +++ b/ea-application/app-api/src/main/java/com/nbe2/api/emergencyroom/dto/EmergencyRoomDirectionsResponse.java @@ -0,0 +1,150 @@ +package com.nbe2.api.emergencyroom.dto; + +import java.util.List; + +import lombok.Builder; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.nbe2.domain.emergencyroom.EmergencyRoomDirectionsInfo; + +@Builder +public record EmergencyRoomDirectionsResponse( + @JsonProperty("code") Integer code, + @JsonProperty("message") String message, + @JsonProperty("currentDateTime") String currentDateTime, + @JsonProperty("route") Route route) { + + @Builder + public record Route(@JsonProperty("traoptimal") List traoptimal) {} + + @Builder + public record Traoptimal( + @JsonProperty("summary") Summary summary, + @JsonProperty("path") List path, + @JsonProperty("section") List
section, + @JsonProperty("guide") List guide) {} + + @Builder + public record Summary( + @JsonProperty("start") Start start, + @JsonProperty("goal") Goal goal, + @JsonProperty("distance") Integer distance, + @JsonProperty("duration") Integer duration, + @JsonProperty("departureTime") String departureTime, + @JsonProperty("bbox") List> bbox, + @JsonProperty("tollFare") Integer tollFare, + @JsonProperty("taxiFare") Integer taxiFare, + @JsonProperty("fuelPrice") Integer fuelPrice) {} + + @Builder + public record Start(@JsonProperty("location") List location) {} + + @Builder + public record Goal( + @JsonProperty("location") List location, @JsonProperty("dir") Integer dir) {} + + @Builder + public record Section( + @JsonProperty("pointIndex") Integer pointIndex, + @JsonProperty("pointCount") Integer pointCount, + @JsonProperty("distance") Integer distance, + @JsonProperty("name") String name, + @JsonProperty("congestion") Integer congestion, + @JsonProperty("speed") Integer speed) {} + + @Builder + public record Guide( + @JsonProperty("pointIndex") Integer pointIndex, + @JsonProperty("type") Integer type, + @JsonProperty("instructions") String instructions, + @JsonProperty("distance") Integer distance, + @JsonProperty("duration") Integer duration) {} + + public static EmergencyRoomDirectionsResponse to(EmergencyRoomDirectionsInfo e) { + return EmergencyRoomDirectionsResponse.builder() + .code(e.code()) + .message(e.message()) + .currentDateTime(e.currentDateTime()) + .route(convertorRoute(e.route())) + .build(); + } + + private static EmergencyRoomDirectionsResponse.Route convertorRoute( + EmergencyRoomDirectionsInfo.Route route) { + List traoptimalList = + route.traoptimal().stream() + .map(EmergencyRoomDirectionsResponse::convertorTraoptimal) + .toList(); + return EmergencyRoomDirectionsResponse.Route.builder().traoptimal(traoptimalList).build(); + } + + private static EmergencyRoomDirectionsResponse.Traoptimal convertorTraoptimal( + EmergencyRoomDirectionsInfo.Traoptimal traoptimal) { + return EmergencyRoomDirectionsResponse.Traoptimal.builder() + .summary(convertoeSummary(traoptimal.summary())) + .path(traoptimal.path()) + .section(convertorSections(traoptimal.section())) + .guide(convertorGuides(traoptimal.guide())) + .build(); + } + + private static EmergencyRoomDirectionsResponse.Summary convertoeSummary( + EmergencyRoomDirectionsInfo.Summary summary) { + return EmergencyRoomDirectionsResponse.Summary.builder() + .start(convertorStart(summary.start())) + .goal(convertorGoal(summary.goal())) + .distance(summary.distance()) + .duration(summary.duration()) + .departureTime(summary.departureTime()) + .bbox(summary.bbox()) + .tollFare(summary.tollFare()) + .taxiFare(summary.taxiFare()) + .fuelPrice(summary.fuelPrice()) + .build(); + } + + private static List convertorSections( + List section) { + return section.stream().map(EmergencyRoomDirectionsResponse::convertorSection).toList(); + } + + private static EmergencyRoomDirectionsResponse.Section convertorSection( + EmergencyRoomDirectionsInfo.Section section) { + return EmergencyRoomDirectionsResponse.Section.builder() + .pointIndex(section.pointIndex()) + .pointCount(section.pointCount()) + .distance(section.distance()) + .name(section.name()) + .congestion(section.congestion()) + .speed(section.speed()) + .build(); + } + + private static List convertorGuides( + List guide) { + return guide.stream().map(EmergencyRoomDirectionsResponse::convertorGuide).toList(); + } + + private static EmergencyRoomDirectionsResponse.Guide convertorGuide( + EmergencyRoomDirectionsInfo.Guide guide) { + return EmergencyRoomDirectionsResponse.Guide.builder() + .type(guide.type()) + .instructions(guide.instructions()) + .distance(guide.distance()) + .duration(guide.duration()) + .build(); + } + + private static EmergencyRoomDirectionsResponse.Goal convertorGoal( + EmergencyRoomDirectionsInfo.Goal goal) { + return EmergencyRoomDirectionsResponse.Goal.builder() + .location(goal.location()) + .dir(goal.dir()) + .build(); + } + + private static EmergencyRoomDirectionsResponse.Start convertorStart( + EmergencyRoomDirectionsInfo.Start start) { + return EmergencyRoomDirectionsResponse.Start.builder().location(start.location()).build(); + } +} diff --git a/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/Coordinate.java b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/Coordinate.java index 6437c3b..94e9536 100644 --- a/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/Coordinate.java +++ b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/Coordinate.java @@ -41,4 +41,8 @@ public double distanceTo(Coordinate targetCoordinate) { return Math.round(EARTH_RADIUS_KM * c * 100) / 100.0; } + + public String convertorLatitudeAndLongitude() { + return longitude + "," + latitude; + } } diff --git a/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomClient.java b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomClient.java index 8eec113..1f6dd23 100644 --- a/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomClient.java +++ b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomClient.java @@ -7,4 +7,6 @@ public interface EmergencyRoomClient { List getRealTimeInfo(Region region); List getEmergencyRoomInfoData(); + + EmergencyRoomDirectionsInfo directionsEmergencyRoom(String start, String end); } diff --git a/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomDirections.java b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomDirections.java new file mode 100644 index 0000000..7bba9f3 --- /dev/null +++ b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomDirections.java @@ -0,0 +1,17 @@ +package com.nbe2.domain.emergencyroom; + +import org.springframework.stereotype.Component; + +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Component +public class EmergencyRoomDirections { + + private final EmergencyRoomClient roomClient; + + public EmergencyRoomDirectionsInfo directionsEmergencyRoom( + String myLocation, String latitudeAndLongitude) { + return roomClient.directionsEmergencyRoom(myLocation, latitudeAndLongitude); + } +} diff --git a/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomDirectionsClient.java b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomDirectionsClient.java new file mode 100644 index 0000000..2a69548 --- /dev/null +++ b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomDirectionsClient.java @@ -0,0 +1,6 @@ +package com.nbe2.domain.emergencyroom; + +public interface EmergencyRoomDirectionsClient { + + EmergencyRoomDirectionsInfo searchNaverDirections(String start, String end); +} diff --git a/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomDirectionsInfo.java b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomDirectionsInfo.java new file mode 100644 index 0000000..3888787 --- /dev/null +++ b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomDirectionsInfo.java @@ -0,0 +1,61 @@ +package com.nbe2.domain.emergencyroom; + +import java.util.List; + +import lombok.Builder; + +import com.fasterxml.jackson.annotation.JsonProperty; + +@Builder +public record EmergencyRoomDirectionsInfo( + @JsonProperty("code") Integer code, + @JsonProperty("message") String message, + @JsonProperty("currentDateTime") String currentDateTime, + @JsonProperty("route") Route route) { + + @Builder + public record Route(@JsonProperty("traoptimal") List traoptimal) {} + + @Builder + public record Traoptimal( + @JsonProperty("summary") Summary summary, + @JsonProperty("path") List path, + @JsonProperty("section") List
section, + @JsonProperty("guide") List guide) {} + + @Builder + public record Summary( + @JsonProperty("start") Start start, + @JsonProperty("goal") Goal goal, + @JsonProperty("distance") Integer distance, + @JsonProperty("duration") Integer duration, + @JsonProperty("departureTime") String departureTime, + @JsonProperty("bbox") List> bbox, + @JsonProperty("tollFare") Integer tollFare, + @JsonProperty("taxiFare") Integer taxiFare, + @JsonProperty("fuelPrice") Integer fuelPrice) {} + + @Builder + public record Start(@JsonProperty("location") List location) {} + + @Builder + public record Goal( + @JsonProperty("location") List location, @JsonProperty("dir") Integer dir) {} + + @Builder + public record Section( + @JsonProperty("pointIndex") Integer pointIndex, + @JsonProperty("pointCount") Integer pointCount, + @JsonProperty("distance") Integer distance, + @JsonProperty("name") String name, + @JsonProperty("congestion") Integer congestion, + @JsonProperty("speed") Integer speed) {} + + @Builder + public record Guide( + @JsonProperty("pointIndex") Integer pointIndex, + @JsonProperty("type") Integer type, + @JsonProperty("instructions") String instructions, + @JsonProperty("distance") Integer distance, + @JsonProperty("duration") Integer duration) {} +} diff --git a/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomReader.java b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomReader.java index 0a5e371..2663ab1 100644 --- a/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomReader.java +++ b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomReader.java @@ -26,6 +26,13 @@ public List readByHospitalName(String hospitalName) { .toList(); } + public Coordinate findByHospitalName(String hospitalName) { + return emergencyRoomRepository + .findByHospitalName(hospitalName) + .map(EmergencyRoom::getLocation) + .orElseThrow(() -> EmergencyRoomNotFoundException.EXCEPTION); + } + public List read(Coordinate coordinate, double distance) { return emergencyRoomRepository.findByCoordinateAndDistance(coordinate, distance); } diff --git a/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomRepository.java b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomRepository.java index 832fab7..6dcfba1 100644 --- a/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomRepository.java +++ b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomRepository.java @@ -11,4 +11,6 @@ public interface EmergencyRoomRepository List findByHospitalNameContaining(String name); Optional findByHpId(String hpId); + + Optional findByHospitalName(String hospitalName); } diff --git a/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomService.java b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomService.java index eef3488..2c1fdb9 100644 --- a/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomService.java +++ b/ea-domain/src/main/java/com/nbe2/domain/emergencyroom/EmergencyRoomService.java @@ -16,6 +16,7 @@ public class EmergencyRoomService { private final DistanceCalculator distanceCalculator; private final EmergencyRoomInitializer emergencyRoomInitializer; private final EmergencyRoomReader emergencyRoomReader; + private final EmergencyRoomDirections emergencyRoomDirections; @Transactional public void init() { @@ -33,6 +34,13 @@ public List getEmergencyRoomListForName(String name) { return emergencyRoomReader.readByHospitalName(name); } + public EmergencyRoomDirectionsInfo directionsEmergencyRoom( + String myLocation, String hospitalName) { + Coordinate byHospitalLocation = emergencyRoomReader.findByHospitalName(hospitalName); + String latitudeAndLongitude = byHospitalLocation.convertorLatitudeAndLongitude(); + return emergencyRoomDirections.directionsEmergencyRoom(myLocation, latitudeAndLongitude); + } + public List getEmergencyRooms(Coordinate coordinate, double distance) { return emergencyRoomReader.read(coordinate, distance); } diff --git a/ea-infra/src/main/java/com/nbe2/infra/emergencyroom/client/EmergencyRoomApiClient.java b/ea-infra/src/main/java/com/nbe2/infra/emergencyroom/client/EmergencyRoomApiClient.java index 52d6249..65c3102 100644 --- a/ea-infra/src/main/java/com/nbe2/infra/emergencyroom/client/EmergencyRoomApiClient.java +++ b/ea-infra/src/main/java/com/nbe2/infra/emergencyroom/client/EmergencyRoomApiClient.java @@ -10,10 +10,9 @@ import lombok.RequiredArgsConstructor; -import com.nbe2.domain.emergencyroom.EmergencyRoomClient; -import com.nbe2.domain.emergencyroom.EmergencyRoomInfo; -import com.nbe2.domain.emergencyroom.RealTimeEmergencyRoomInfo; -import com.nbe2.domain.emergencyroom.Region; +import com.nbe2.domain.emergencyroom.*; +import com.nbe2.infra.naver.client.NaverApiClient; +import com.nbe2.infra.naver.dto.NaverDirectionsResponse; import com.nbe2.infra.openapi.client.OpenApiFeignClient; import com.nbe2.infra.openapi.dto.AllEmergencyRoomResponse; import com.nbe2.infra.openapi.dto.EmergencyRoomResponse; @@ -25,6 +24,7 @@ public class EmergencyRoomApiClient implements EmergencyRoomClient { private final OpenApiFeignClient openApiFeignClient; + private final NaverApiClient naverApiClient; @Override public List getRealTimeInfo(Region region) { @@ -42,6 +42,13 @@ public List getEmergencyRoomInfoData() { .collect(Collectors.toList()); } + @Override + public EmergencyRoomDirectionsInfo directionsEmergencyRoom(String start, String hospitalName) { + NaverDirectionsResponse realTimeEmergencyData = + naverApiClient.getEmergencyDirectionsData(start, hospitalName, "trafast"); + return NaverDirectionsResponse.to(realTimeEmergencyData); + } + private List getEmergencyData() { return getAllEmergencyRoomData().parallelStream() .map(ed -> openApiFeignClient.getEmergencyInfoData(ed.hpid(), 1, 1000).getItems()) diff --git a/ea-infra/src/main/java/com/nbe2/infra/naver/client/NaverApiClient.java b/ea-infra/src/main/java/com/nbe2/infra/naver/client/NaverApiClient.java new file mode 100644 index 0000000..f1d1e95 --- /dev/null +++ b/ea-infra/src/main/java/com/nbe2/infra/naver/client/NaverApiClient.java @@ -0,0 +1,19 @@ +package com.nbe2.infra.naver.client; + +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import com.nbe2.infra.naver.config.NaverApiClientConfiguration; +import com.nbe2.infra.naver.dto.NaverDirectionsResponse; + +@FeignClient( + name = "naverApiClient", + url = "https://naveropenapi.apigw.ntruss.com/map-direction/v1/", + configuration = NaverApiClientConfiguration.class) +public interface NaverApiClient { + + @GetMapping(value = "/driving") + NaverDirectionsResponse getEmergencyDirectionsData( + @RequestParam String goal, @RequestParam String start, @RequestParam String trafast); +} diff --git a/ea-infra/src/main/java/com/nbe2/infra/naver/config/NaverApiClientConfiguration.java b/ea-infra/src/main/java/com/nbe2/infra/naver/config/NaverApiClientConfiguration.java new file mode 100644 index 0000000..5958081 --- /dev/null +++ b/ea-infra/src/main/java/com/nbe2/infra/naver/config/NaverApiClientConfiguration.java @@ -0,0 +1,11 @@ +package com.nbe2.infra.naver.config; + +import org.springframework.context.annotation.Bean; + +public class NaverApiClientConfiguration { + + @Bean + public NaverRequestInterceptor naverRequestInterceptor() { + return new NaverRequestInterceptor(); + } +} diff --git a/ea-infra/src/main/java/com/nbe2/infra/naver/config/NaverRequestInterceptor.java b/ea-infra/src/main/java/com/nbe2/infra/naver/config/NaverRequestInterceptor.java new file mode 100644 index 0000000..cbe86af --- /dev/null +++ b/ea-infra/src/main/java/com/nbe2/infra/naver/config/NaverRequestInterceptor.java @@ -0,0 +1,22 @@ +package com.nbe2.infra.naver.config; + +import org.springframework.beans.factory.annotation.Value; + +import feign.RequestInterceptor; +import feign.RequestTemplate; + +public class NaverRequestInterceptor implements RequestInterceptor { + + @Value("${naver.directions-clinet-id}") + private String clientKey; + + @Value("${naver.directions-screat-key}") + private String serviceKey; + + @Override + public void apply(RequestTemplate template) { + template.header("Accept", "application/json"); // Accept 헤더 추가 + template.header("x-ncp-apigw-api-key-id", clientKey); // Accept 헤더 추가 + template.header("x-ncp-apigw-api-key", serviceKey); // Accept 헤더 추가 + } +} diff --git a/ea-infra/src/main/java/com/nbe2/infra/naver/dto/NaverDirectionsResponse.java b/ea-infra/src/main/java/com/nbe2/infra/naver/dto/NaverDirectionsResponse.java new file mode 100644 index 0000000..341a269 --- /dev/null +++ b/ea-infra/src/main/java/com/nbe2/infra/naver/dto/NaverDirectionsResponse.java @@ -0,0 +1,154 @@ +package com.nbe2.infra.naver.dto; + +import java.util.List; + +import lombok.Builder; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.nbe2.domain.emergencyroom.EmergencyRoomDirectionsInfo; + +@Builder +public record NaverDirectionsResponse( + @JsonProperty("code") Integer code, + @JsonProperty("message") String message, + @JsonProperty("currentDateTime") String currentDateTime, + @JsonProperty("route") Route route) { + + @Builder + public record Route(@JsonProperty("traoptimal") List traoptimal) {} + + @Builder + public record Traoptimal( + @JsonProperty("summary") Summary summary, + @JsonProperty("path") List path, + @JsonProperty("section") List
section, + @JsonProperty("guide") List guide) {} + + @Builder + public record Summary( + @JsonProperty("start") Start start, + @JsonProperty("goal") Goal goal, + @JsonProperty("distance") Integer distance, + @JsonProperty("duration") Integer duration, + @JsonProperty("departureTime") String departureTime, + @JsonProperty("bbox") List> bbox, + @JsonProperty("tollFare") Integer tollFare, + @JsonProperty("taxiFare") Integer taxiFare, + @JsonProperty("fuelPrice") Integer fuelPrice) {} + + @Builder + public record Start(@JsonProperty("location") List location) {} + + @Builder + public record Goal( + @JsonProperty("location") List location, @JsonProperty("dir") Integer dir) {} + + @Builder + public record Section( + @JsonProperty("pointIndex") Integer pointIndex, + @JsonProperty("pointCount") Integer pointCount, + @JsonProperty("distance") Integer distance, + @JsonProperty("name") String name, + @JsonProperty("congestion") Integer congestion, + @JsonProperty("speed") Integer speed) {} + + @Builder + public record Guide( + @JsonProperty("pointIndex") Integer pointIndex, + @JsonProperty("type") Integer type, + @JsonProperty("instructions") String instructions, + @JsonProperty("distance") Integer distance, + @JsonProperty("duration") Integer duration) {} + + public static EmergencyRoomDirectionsInfo to(NaverDirectionsResponse n) { + return EmergencyRoomDirectionsInfo.builder() + .code(n.code) + .message(n.message) + .currentDateTime(n.currentDateTime) + .route(convertorRoute(n.route)) + .build(); + } + + private static EmergencyRoomDirectionsInfo.Route convertorRoute( + NaverDirectionsResponse.Route route) { + List traoptimalList = + route.traoptimal.stream() + .map(NaverDirectionsResponse::convertorTraoptimal) + .toList(); + return EmergencyRoomDirectionsInfo.Route.builder().traoptimal(traoptimalList).build(); + } + + private static EmergencyRoomDirectionsInfo.Traoptimal convertorTraoptimal( + NaverDirectionsResponse.Traoptimal traoptimal) { + return EmergencyRoomDirectionsInfo.Traoptimal.builder() + .summary(convertoeSummary(traoptimal.summary)) + .path(traoptimal.path) + .section(convertorSections(traoptimal.section)) + .guide(convertorGuides(traoptimal.guide)) + .build(); + } + + private static EmergencyRoomDirectionsInfo.Summary convertoeSummary( + NaverDirectionsResponse.Summary summary) { + if (summary == null) { + return null; + } + + return EmergencyRoomDirectionsInfo.Summary.builder() + .start(convertorStart(summary.start)) + .goal(convertorGoal(summary.goal)) + .distance(summary.distance) + .duration(summary.duration) + .departureTime(summary.departureTime) + .bbox(summary.bbox) + .tollFare(summary.tollFare) + .taxiFare(summary.taxiFare) + .fuelPrice(summary.fuelPrice) + .build(); + } + + private static List convertorSections( + List section) { + return section.stream().map(NaverDirectionsResponse::convertorSection).toList(); + } + + private static EmergencyRoomDirectionsInfo.Section convertorSection( + NaverDirectionsResponse.Section section) { + return EmergencyRoomDirectionsInfo.Section.builder() + .pointIndex(section.pointIndex) + .pointCount(section.pointCount) + .distance(section.distance) + .name(section.name) + .congestion(section.congestion) + .speed(section.speed) + .build(); + } + + private static List convertorGuides( + List guide) { + return guide.stream().map(NaverDirectionsResponse::convertorGuide).toList(); + } + + private static EmergencyRoomDirectionsInfo.Guide convertorGuide( + NaverDirectionsResponse.Guide guide) { + return EmergencyRoomDirectionsInfo.Guide.builder() + .type(guide.type) + .instructions(guide.instructions) + .distance(guide.distance) + .duration(guide.duration) + .build(); + } + + private static EmergencyRoomDirectionsInfo.Goal convertorGoal( + NaverDirectionsResponse.Goal goal) { + return EmergencyRoomDirectionsInfo.Goal.builder() + .location(goal.location) + .dir(goal.dir) + .build(); + } + + private static EmergencyRoomDirectionsInfo.Start convertorStart( + NaverDirectionsResponse.Start start) { + return EmergencyRoomDirectionsInfo.Start.builder().location(start.location).build(); + } +} diff --git a/ea-infra/src/main/resources/application-infra.yml b/ea-infra/src/main/resources/application-infra.yml index 8dae360..2fab195 100644 --- a/ea-infra/src/main/resources/application-infra.yml +++ b/ea-infra/src/main/resources/application-infra.yml @@ -5,14 +5,16 @@ spring: openapi: service-key: ${OPENAPI_SERVICE_KEY} + + --- spring: config: activate: on-profile: local redis: - host: localhost - port: 6379 + host: ${REDIS_HOST} + port: ${REDIS_PORT} logging: level: org: @@ -26,6 +28,11 @@ logging: kakao: rest-api-key: ${KAKAO_REST_API_KEY} + +naver: + directions-clinet-id: ${NAVER_MAP_CLIENT_ID} + directions-screat-key: ${NAVER_MAP_SCREAT_KEY} + --- spring: config: