Skip to content

Commit de96e3d

Browse files
committed
feat: 경유하는 버스 이름 조회에 종류 필드 추가
1 parent d674294 commit de96e3d

3 files changed

Lines changed: 45 additions & 16 deletions

File tree

src/main/java/com/example/busnotice/domain/bus/BusController.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.example.busnotice.domain.bus;
22

33
import com.example.busnotice.domain.bus.res.BusArrInfosDto.Item;
4+
import com.example.busnotice.domain.bus.res.BusNameAndTypeResponse;
45
import com.example.busnotice.domain.busStop.CityCodeRepository;
56
import com.example.busnotice.global.code.StatusCode;
67
import com.example.busnotice.global.format.ApiResponse;
@@ -50,14 +51,14 @@ public Item getNodeSpecificArriveInfo(
5051
return item;
5152
}
5253

53-
@Operation(summary = "특정 노드를 경유하는 모든 버스들 이름 조회")
54+
@Operation(summary = "특정 노드를 경유하는 모든 버스들 이름과 종류 조회")
5455
@GetMapping("/nodes/bus-names/all")
55-
public List<String> getBusNamesOfNode(
56+
public List<BusNameAndTypeResponse> getBusNamesOfNode(
5657
@RequestParam("cityName") String cityName,
5758
@RequestParam("nodeId") String nodeId
5859
) throws UnsupportedEncodingException {
59-
List<String> busNames = busService.특정_노드_ID를_경유하는_모든_버스들_이름_조회(cityName, nodeId);
60-
return busNames;
60+
List<BusNameAndTypeResponse> busNameAndTypeList = busService.특정_노드_ID를_경유하는_모든_버스들_이름_조회(cityName, nodeId);
61+
return busNameAndTypeList;
6162
}
6263

6364
@Operation(summary = "특정 노드를 경유하는 버스들이 맞는지 확인")
@@ -67,8 +68,9 @@ public ApiResponse<String> getBusNamesOfNode(
6768
@RequestParam("nodeId") String nodeId,
6869
@RequestParam("routeNo") List<String> busList
6970
) throws UnsupportedEncodingException {
70-
List<String> allBusNames = busService.특정_노드_ID를_경유하는_모든_버스들_이름_조회(cityName, nodeId);
71-
boolean isValid = allBusNames.containsAll(busList.stream().map(String::trim).toList());
71+
List<BusNameAndTypeResponse> busNameAndTypeResponses = busService.특정_노드_ID를_경유하는_모든_버스들_이름_조회(cityName, nodeId);
72+
List<String> busNames = busNameAndTypeResponses.stream().map(bnt -> bnt.name()).toList();
73+
boolean isValid = busNames.containsAll(busList.stream().map(String::trim).toList());
7274
return isValid
7375
? ApiResponse.createSuccess("올바른 버스 목록입니다.")
7476
: ApiResponse.createFail(StatusCode.BAD_REQUEST, "해당 정류장에 속한 버스 노선이 아닙니다.");

src/main/java/com/example/busnotice/domain/bus/BusService.java

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.example.busnotice.domain.bus.res.BusArrInfosDto;
44
import com.example.busnotice.domain.bus.res.BusArrInfosDto.Item;
55
import com.example.busnotice.domain.bus.res.BusInfosDto;
6+
import com.example.busnotice.domain.bus.res.BusNameAndTypeResponse;
67
import com.example.busnotice.domain.bus.res.SeoulBusArrInfosDto;
78
import com.example.busnotice.domain.bus.res.SeoulBusInfosDto;
89
import com.example.busnotice.domain.bus.res.SeoulBusInfosDto.BusRoute;
@@ -122,8 +123,8 @@ public class BusService {
122123
return sortedItems.stream().limit(2).collect(Collectors.toList());
123124
}
124125

125-
@Cacheable(value = "busNames_through_stn", key = "#p0 + '_' + #p1")
126-
public List<String> 특정_노드_ID를_경유하는_모든_버스들_이름_조회(String cityName, String nodeId)
126+
// @Cacheable(value = "busNames_through_stn", key = "#p0 + '_' + #p1")
127+
public List<BusNameAndTypeResponse> 특정_노드_ID를_경유하는_모든_버스들_이름_조회(String cityName, String nodeId)
127128
throws UnsupportedEncodingException {
128129
log.info("{}_{} 를 경유하는 모든 버스들 이름 캐싱 실패, 메서드 실행", cityName, nodeId);
129130
String cityCode = busStopService.도시코드_DB_조회(cityName);
@@ -146,10 +147,26 @@ public class BusService {
146147
throw new BusStopException(StatusCode.NOT_FOUND,
147148
"해당 버스정류장을 경유하는 버스 노선이 존재하지 않습니다. 버스정류장 노드 ID 를 다시 확인해주세요.");
148149
}
149-
List<String> busNames = result.getMsgBody().getItemList().stream()
150-
.map(i -> i.getBusRouteNm()).toList();
151-
System.out.println("bus names: " + busNames);
152-
return busNames;
150+
List<BusNameAndTypeResponse> list = result.getMsgBody().getItemList().stream()
151+
.map(i -> {
152+
String routeType = "";
153+
switch (i.getBusRouteType()) {
154+
case 1: routeType = "공항"; break;
155+
case 2: routeType = "마을"; break;
156+
case 3: routeType = "간선"; break;
157+
case 4: routeType = "지선"; break;
158+
case 5: routeType = "순환"; break;
159+
case 6: routeType = "광역"; break;
160+
case 7: routeType = "인천"; break;
161+
case 8: routeType = "경기"; break;
162+
case 9: routeType = "폐지"; break;
163+
case 0: routeType = "공용"; break;
164+
default: routeType = "알수없음"; // 예외 처리
165+
}
166+
return new BusNameAndTypeResponse(i.getBusRouteNm(), routeType);
167+
}
168+
).toList();
169+
return list;
153170
}
154171

155172
String url = "http://apis.data.go.kr/1613000/BusSttnInfoInqireService/getSttnThrghRouteList";
@@ -173,10 +190,10 @@ public class BusService {
173190
}
174191

175192
// routeno 리스트 추출
176-
List<String> busNames = result.getResponse().getBody().getItems().getItem().stream()
177-
.map(BusInfosDto.Item::getRouteNo).toList();
178-
System.out.println("bus names: " + busNames);
179-
return busNames;
193+
List<BusNameAndTypeResponse> list = result.getResponse().getBody().getItems().getItem().stream()
194+
.map(i -> new BusNameAndTypeResponse(i.getRouteNo(),i.getRouteTp().substring(0, 2))
195+
).toList();
196+
return list;
180197
}
181198

182199
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.example.busnotice.domain.bus.res;
2+
3+
import java.io.Serializable;
4+
5+
public record BusNameAndTypeResponse(
6+
String name,
7+
String type
8+
) implements Serializable {
9+
10+
}

0 commit comments

Comments
 (0)