Skip to content
Merged
Show file tree
Hide file tree
Changes from 11 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/main/java/com/wayble/server/ServerApplication.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.wayble.server;

import com.wayble.server.direction.external.tmap.TMapProperties;
import com.wayble.server.direction.external.kric.KricProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.elasticsearch.ReactiveElasticsearchRepositoriesAutoConfiguration;
Expand All @@ -16,7 +17,7 @@
@EnableJpaAuditing
@EnableScheduling
@EnableElasticsearchRepositories(basePackages = "com.wayble.server.explore.repository")
@EnableConfigurationProperties(TMapProperties.class)
@EnableConfigurationProperties({TMapProperties.class, KricProperties.class})
@EntityScan(basePackages = "com.wayble.server")
public class ServerApplication {

Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
"/api/v1/users/reissue",
"/api/v1/users/logout",
"/api/v1/auth/**",
"/api/v1/directions/**",
"/swagger-ui/**",
"/v3/api-docs/**",
"/",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.wayble.server.common.config;

import com.wayble.server.direction.external.tmap.TMapProperties;
import com.wayble.server.direction.external.kric.KricProperties;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
Expand All @@ -11,6 +12,7 @@
public class WebClientConfig {

private final TMapProperties tMapProperties;
private final KricProperties kricProperties;

@Bean
public WebClient webClient() {
Expand All @@ -24,4 +26,11 @@ public WebClient tMapWebClient() {
.baseUrl(tMapProperties.baseUrl())
.build();
}

@Bean
public WebClient kricWebClient() {
return WebClient.builder()
.baseUrl(kricProperties.baseUrl())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
Expand Down Expand Up @@ -51,8 +51,8 @@ public class TransportationController {
)
}
)
@GetMapping("/")
public CommonResponse<TransportationResponseDto> getDirections(
@PostMapping("/")
public CommonResponse<TransportationResponseDto> findDirections(
@RequestBody TransportationRequestDto request
){
TransportationResponseDto data = transportationService.findRoutes(request);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.wayble.server.direction.dto;

import com.wayble.server.direction.entity.DirectionType;
import io.micrometer.common.lang.Nullable;
import org.springframework.lang.Nullable;
import io.swagger.v3.oas.annotations.media.Schema;

import java.time.ZonedDateTime;
import java.util.List;

@Schema(description = "대중교통 길찾기 응답 DTO")
Expand All @@ -14,8 +13,8 @@ public record TransportationResponseDto(
) {
public record Step(
DirectionType mode, // 예: START, WALK, SUBWAY, BUS, FINISH
String routeName,// mode에 따라 null일 수 있음
NodeInfo information, // mode에 따라 null일 수 있음
@Nullable String routeName,
@Nullable NodeInfo information,
String from,
String to
) {}
Expand All @@ -33,6 +32,6 @@ public record NodeInfo(

public record LocationInfo(
Double latitude,
Double Longtitude
Double Longitude
) {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

@Entity
@Getter
@Builder(access = AccessLevel.PUBLIC)
@Builder(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name = "edge")
Expand All @@ -34,4 +34,14 @@ public class Edge {
@ManyToOne
@JoinColumn(name = "route_id")
private Route route;

public static Edge createEdge(Long id, Node startNode, Node endNode, DirectionType edgeType) {
return Edge.builder()
.id(id)
.edgeType(edgeType)
.startNode(startNode)
.endNode(endNode)
.route(null)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,10 @@ public class Node {
@OneToOne(mappedBy = "node")
private Facility facility_id;

public Node(Long id, String stationName, double latitude, double longitude) {
public Node(Long id, String stationName, DirectionType nodeType, double latitude, double longitude) {
this.id = id;
this.stationName = stationName;
this.nodeType = nodeType;
this.latitude = latitude;
this.longitude = longitude;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
public enum DirectionErrorCase implements ErrorCase {

HISTORY_NOT_FOUND(400, 4004, "검색 기록이 없습니다."),
DISTANCE_TOO_FAR(400, 4002, "거리가 30km 이상입니다."),
PATH_NOT_FOUND(400, 4001, "해당하는 경로를 찾을 수 없습니다.");

private final Integer httpStatusCode;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.wayble.server.direction.external.kric;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "kric.api")
public record KricProperties(
String key,
String baseUrl
) {
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.wayble.server.direction.dto.toilet;
package com.wayble.server.direction.external.kric.dto;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.wayble.server.direction.dto.toilet;
package com.wayble.server.direction.external.kric.dto;

import lombok.Getter;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.wayble.server.direction.dto.toilet;
package com.wayble.server.direction.external.kric.dto;

import java.util.List;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package com.wayble.server.direction.repository;

import com.wayble.server.direction.entity.transportation.Facility;
import org.springframework.data.jpa.repository.JpaRepository;

public interface FacilityRepository extends JpaRepository<Facility, Long> {
import java.util.List;
import java.util.Optional;

import org.springframework.data.jpa.repository.JpaRepository;

public interface FacilityRepository extends JpaRepository<Facility, Long> {
Optional<Facility> findByNodeId(Long nodeId);
}
21 changes: 0 additions & 21 deletions src/main/java/com/wayble/server/direction/service/EdgeService.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,36 +1,35 @@
package com.wayble.server.direction.service;

import com.wayble.server.direction.dto.TransportationResponseDto;
import com.wayble.server.direction.dto.toilet.KricToiletRawItem;
import com.wayble.server.direction.dto.toilet.KricToiletRawResponse;
import com.wayble.server.direction.entity.transportation.Facility;
import com.wayble.server.direction.external.kric.dto.KricToiletRawItem;
import com.wayble.server.direction.external.kric.dto.KricToiletRawResponse;
import com.wayble.server.direction.repository.FacilityRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import lombok.extern.slf4j.Slf4j;

import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.reactive.function.client.WebClient;
import org.springframework.web.util.UriComponentsBuilder;
import com.wayble.server.direction.external.kric.KricProperties;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;


@Service
@Slf4j
@RequiredArgsConstructor
public class FacilityService {
private final FacilityRepository facilityRepository;
private final RestTemplate restTemplate;
private final WebClient kricWebClient;
private final KricProperties kricProperties;

@Value("${kric.api.key}")
private String kricApiKey;

public TransportationResponseDto.NodeInfo getNodeInfo(Long NodeId){
Facility facility = facilityRepository.findById(NodeId).orElse(null);
public TransportationResponseDto.NodeInfo getNodeInfo(Long nodeId){
Facility facility = facilityRepository.findByNodeId(nodeId).orElse(null);
List<TransportationResponseDto.LocationInfo> wheelchair = new ArrayList<>();
List<TransportationResponseDto.LocationInfo> elevator = new ArrayList<>();
Boolean accessibleRestroom = false;
Expand Down Expand Up @@ -68,21 +67,29 @@ public TransportationResponseDto.NodeInfo getNodeInfo(Long NodeId){
}

private Map<String, Boolean> getToiletInfo(Facility facility){
String url = UriComponentsBuilder.fromHttpUrl("https://data.kric.go.kr/api/vulnerableUserInfo/stationDisabledToilet")
.queryParam("serviceKey", kricApiKey)
String uri = UriComponentsBuilder.fromPath("/api/vulnerableUserInfo/stationDisabledToilet")
.queryParam("serviceKey", kricProperties.key())
.queryParam("format", "json")
.queryParam("railOprIsttCd", facility.getRailOprLsttCd())
.queryParam("railOprLsttCd", facility.getRailOprLsttCd())
.queryParam("lnCd", facility.getLnCd())
.queryParam("stinCd", facility.getStinCd())
.toUriString();
ResponseEntity<KricToiletRawResponse> response = restTemplate.exchange(
url,
HttpMethod.GET,
null,
new ParameterizedTypeReference<KricToiletRawResponse>() {}
);

List<KricToiletRawItem> items;
try{
KricToiletRawResponse response = kricWebClient
.get()
.uri(uri)
.retrieve()
.bodyToMono(KricToiletRawResponse.class)
.block();

List<KricToiletRawItem> items = response.getBody().body().item();
items = response.body().item();

} catch(Exception e){
log.info("역사 화장실 api 호출 중 에러 발생: {}: {}", uri, e.getCause());
return new HashMap<>();
}

// 역별로 화장실 존재 여부 추출 (중복 제거)
Map<String, Boolean> stationToiletMap = new HashMap<>();
Expand All @@ -91,7 +98,9 @@ private Map<String, Boolean> getToiletInfo(Facility facility){
int toiletCount = 0;
try {
toiletCount = Integer.parseInt(item.toltNum());
} catch (NumberFormatException ignored) {}
} catch (NumberFormatException e) {
log.debug("지하철 역에 대해 잘못된 숫자 형식. 지하철역 번호 {}: {}", stinCd, item.toltNum());
}
stationToiletMap.put(stinCd, stationToiletMap.getOrDefault(stinCd, false) || toiletCount > 0);
}

Expand Down
Loading