Skip to content

Commit 9780784

Browse files
committed
feat: add location description for mobility call
1 parent 6992352 commit 9780784

5 files changed

Lines changed: 55 additions & 16 deletions

File tree

src/main/java/backend/knowhow/domain/mobility/controller/MobilityController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class MobilityController {
1818
@PostMapping("/call")
1919
public ApiResponse<MobilityResponse> call(@Valid @RequestBody MobilityRequest request) {
2020

21-
String phoneNumber = mobilityService.getPhoneNumber(request.lat(), request.lon(), request.mobilityType());
22-
return ApiResponse.success(new MobilityResponse(phoneNumber));
21+
MobilityResponse mobilityResponse = mobilityService.getCallTaxiInfo(request.lat(), request.lon(), request.mobilityType());
22+
return ApiResponse.success(mobilityResponse);
2323
}
2424
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package backend.knowhow.domain.mobility.dto;
22

33
public record MobilityResponse(
4-
String phoneNumber
4+
String phoneNumber,
5+
String description
56
) {
67
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package backend.knowhow.domain.mobility.dto;
2+
3+
public record RegionInfo(
4+
String city,
5+
String district,
6+
String dong
7+
) {}

src/main/java/backend/knowhow/domain/mobility/service/MobilityService.java

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import backend.knowhow.domain.mobility.domain.MobilityType;
44
import backend.knowhow.domain.mobility.domain.RegionAreaCode;
5+
import backend.knowhow.domain.mobility.dto.MobilityResponse;
6+
import backend.knowhow.domain.mobility.dto.RegionInfo;
57
import lombok.RequiredArgsConstructor;
68
import org.springframework.stereotype.Service;
79

@@ -11,19 +13,43 @@ public class MobilityService {
1113

1214
private final ReverseGeoApiClient reverseGeoApiClient;
1315

14-
private static final String TAXI_UNITED_NUMBER = "1333";
16+
private static final String TAXI_UNITED_NUMBER = "114";
1517
private static final String SUBSTITUTE_NUMBER = "1588-0000";
1618

17-
public String getPhoneNumber(double lat, double lon, MobilityType type) {
19+
public MobilityResponse getCallTaxiInfo(double lat, double lon, MobilityType type) {
1820
if (type == MobilityType.SUBSTITUTE) {
19-
return SUBSTITUTE_NUMBER;
21+
return new MobilityResponse(
22+
SUBSTITUTE_NUMBER,
23+
"전국 어디서나 이용 가능한 대리운전 번호로 연결합니다."
24+
);
2025
}
2126
// 지역 조회나 매핑 실패 시 전국 공통 번호(1333) 반환
22-
String areaCode = reverseGeoApiClient.findRegionName(lat, lon)
23-
.flatMap(RegionAreaCode::findCodeByName)
24-
.orElse("");
27+
RegionInfo region = reverseGeoApiClient.findRegionInfo(lat, lon).orElse(null);
28+
String phoneNumber;
29+
String description;
2530

26-
return areaCode + TAXI_UNITED_NUMBER;
31+
if (region == null) {
32+
phoneNumber = TAXI_UNITED_NUMBER;
33+
description = "전국 어디서나 이용 가능한 콜택시 번호로 연결합니다.";
34+
} else {
35+
String areaCode = RegionAreaCode
36+
.findCodeByName(region.city())
37+
.orElse("");
2738

39+
phoneNumber = areaCode + TAXI_UNITED_NUMBER;
40+
41+
String locationText = region.city();
42+
if (region.district() != null && !region.district().isBlank()) {
43+
locationText += " " + region.district();
44+
}
45+
if (region.dong() != null && !region.dong().isBlank()) {
46+
locationText += " " + region.dong();
47+
}
48+
49+
description =
50+
locationText + "에서 부를 수 있는 콜택시 번호로 연결합니다.";
51+
}
52+
53+
return new MobilityResponse(phoneNumber, description);
2854
}
2955
}

src/main/java/backend/knowhow/domain/mobility/service/ReverseGeoApiClient.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package backend.knowhow.domain.mobility.service;
22

3+
import backend.knowhow.domain.mobility.dto.RegionInfo;
34
import lombok.RequiredArgsConstructor;
45
import lombok.extern.slf4j.Slf4j;
56
import org.springframework.beans.factory.annotation.Value;
@@ -31,7 +32,7 @@ public class ReverseGeoApiClient {
3132

3233
private static final String NAVER_GEOCODE_URL = "https://maps.apigw.ntruss.com/map-reversegeocode/v2/gc";
3334

34-
public Optional<String> findRegionName(double lat, double lon) {
35+
public Optional<RegionInfo> findRegionInfo(double lat, double lon) {
3536
HttpHeaders headers = new HttpHeaders();
3637
headers.set("X-NCP-APIGW-API-KEY-ID", clientId);
3738
headers.set("X-NCP-APIGW-API-KEY", clientSecret);
@@ -57,20 +58,24 @@ public Optional<String> findRegionName(double lat, double lon) {
5758
}
5859
Map<?, ?> firstResult = (Map<?, ?>) results.get(0);
5960
Map<?, ?> region = (Map<?, ?>) firstResult.get("region");
61+
6062
if (region == null) {
6163
return Optional.empty();
6264
}
6365

6466
Map<?, ?> area1 = (Map<?, ?>) region.get("area1");
67+
Map<?, ?> area2 = (Map<?, ?>) region.get("area2");
68+
Map<?, ?> area3 = (Map<?, ?>) region.get("area3");
6569
if (area1 == null) {
6670
return Optional.empty();
6771
}
68-
Object name = area1.get("name");
69-
if (!(name instanceof String) || ((String) name).isBlank()) {
70-
return Optional.empty();
71-
}
72+
String city = area1 != null ? (String) area1.get("name") : null;
73+
String district = area2 != null ? (String) area2.get("name") : null;
74+
String dong = area3 != null ? (String) area3.get("name") : null;
75+
76+
if (city == null) return Optional.empty();
7277

73-
return Optional.of((String) name);
78+
return Optional.of(new RegionInfo(city, district, dong));
7479

7580
} catch (HttpClientErrorException e) {
7681
log.error("[NaverMapClient] HTTP Error: status={}, body={}, lat={}, lon={}",

0 commit comments

Comments
 (0)