Skip to content

Commit 6f18180

Browse files
committed
feat: 서울 버스 노선번호 구하기
1 parent 8c5cb8b commit 6f18180

File tree

11 files changed

+145
-20
lines changed

11 files changed

+145
-20
lines changed

data/src/main/java/com/stop/data/remote/network/WsBusApiService.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.stop.data.remote.network
22

33
import com.stop.data.remote.model.NetworkResult
4+
import com.stop.domain.model.route.seoul.bus.GetBusLineResponse
45
import com.stop.domain.model.route.seoul.bus.GetBusStationArsIdResponse
56
import retrofit2.http.GET
67
import retrofit2.http.Query
@@ -13,7 +14,13 @@ internal interface WsBusApiService {
1314
@Query("resultType") resultType: String = "json",
1415
): NetworkResult<GetBusStationArsIdResponse>
1516

17+
@GET(GET_BUS_LINE_URL)
18+
suspend fun getBusLine(
19+
@Query("arsId") stationId: String,
20+
): NetworkResult<GetBusLineResponse>
21+
1622
companion object {
1723
private const val GET_BUS_ARS_URL = "stationinfo/getStationByName"
24+
private const val GET_BUS_LINE_URL = "stationinfo/getRouteByStation"
1825
}
1926
}

data/src/main/java/com/stop/data/remote/source/route/RouteRemoteDataSource.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.stop.data.remote.source.route
22

33
import com.stop.domain.model.geoLocation.AddressType
44
import com.stop.domain.model.route.gyeonggi.GetGyeonggiBusStationIdResponse
5+
import com.stop.domain.model.route.seoul.bus.GetBusLineResponse
56
import com.stop.domain.model.route.seoul.bus.GetBusStationArsIdResponse
67
import com.stop.domain.model.route.tmap.RouteRequest
78
import com.stop.domain.model.route.tmap.custom.Coordinate
@@ -18,5 +19,7 @@ internal interface RouteRemoteDataSource {
1819

1920
suspend fun getSeoulBusStationArsId(stationName: String): GetBusStationArsIdResponse
2021

22+
suspend fun getSeoulBusLine(stationId: String): GetBusLineResponse
23+
2124
suspend fun getGyeonggiBusStationId(stationName: String): GetGyeonggiBusStationIdResponse
2225
}

data/src/main/java/com/stop/data/remote/source/route/RouteRemoteDataSourceImpl.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.stop.data.remote.network.TmapApiService
77
import com.stop.data.remote.network.WsBusApiService
88
import com.stop.domain.model.geoLocation.AddressType
99
import com.stop.domain.model.route.gyeonggi.GetGyeonggiBusStationIdResponse
10+
import com.stop.domain.model.route.seoul.bus.GetBusLineResponse
1011
import com.stop.domain.model.route.seoul.bus.GetBusStationArsIdResponse
1112
import com.stop.domain.model.route.seoul.subway.SubwayStationResponse
1213
import com.stop.domain.model.route.tmap.RouteRequest
@@ -77,6 +78,17 @@ internal class RouteRemoteDataSourceImpl @Inject constructor(
7778
}
7879
}
7980

81+
override suspend fun getSeoulBusLine(stationId: String): GetBusLineResponse {
82+
with(wsBusApiService.getBusLine(stationId)) {
83+
return when(this) {
84+
is NetworkResult.Success -> this.data
85+
is NetworkResult.Failure -> throw IllegalArgumentException(this.message)
86+
is NetworkResult.NetworkError -> throw this.exception
87+
is NetworkResult.Unexpected -> throw this.exception
88+
}
89+
}
90+
}
91+
8092
override suspend fun getGyeonggiBusStationId(stationName: String): GetGyeonggiBusStationIdResponse {
8193
with(apisDataService.getBusStationId(stationName)) {
8294
return when (this) {

data/src/main/java/com/stop/data/repository/RouteRepositoryImpl.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.stop.data.repository
33
import com.stop.data.remote.source.route.RouteRemoteDataSource
44
import com.stop.domain.model.geoLocation.AddressType
55
import com.stop.domain.model.route.gyeonggi.GetGyeonggiBusStationIdResponse
6+
import com.stop.domain.model.route.seoul.bus.GetBusLineResponse
67
import com.stop.domain.model.route.seoul.bus.GetBusStationArsIdResponse
78
import com.stop.domain.model.route.tmap.RouteRequest
89
import com.stop.domain.model.route.tmap.custom.Coordinate
@@ -31,6 +32,10 @@ internal class RouteRepositoryImpl @Inject constructor(
3132
return remoteDataSource.getSeoulBusStationArsId(stationName)
3233
}
3334

35+
override suspend fun getSeoulBusLine(stationId: String): GetBusLineResponse {
36+
return remoteDataSource.getSeoulBusLine(stationId)
37+
}
38+
3439
override suspend fun getGyeonggiBusStationId(stationName: String): GetGyeonggiBusStationIdResponse {
3540
return remoteDataSource.getGyeonggiBusStationId(stationName)
3641
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.stop.domain.model.route
2+
3+
enum class Area(val cityName: String) {
4+
SEOUL("서울특별시"), GYEONGGI("경기도"), UN_SUPPORT_AREA("Unknown");
5+
6+
companion object {
7+
fun getAreaByName(name: String): Area {
8+
return values().firstOrNull {
9+
it.cityName == name
10+
} ?: UN_SUPPORT_AREA
11+
}
12+
}
13+
}

domain/src/main/java/com/stop/domain/model/route/TransportIdRequest.kt

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,40 @@ import com.stop.domain.model.route.tmap.custom.Coordinate
44

55
data class TransportIdRequest(
66
val transportMoveType: TransportMoveType,
7-
val id: String,
7+
val stationId: String,
88
val stationName: String,
99
val coordinate: Coordinate,
1010
val stationType: Int,
11+
val area: Area,
12+
val lineId: String,
13+
val lineName: String,
14+
val term: Int, // 배차 간격, 서울 버스는 노선을 구하는 과정에서 얻을 수 있기 때문에 넣음
1115
) {
12-
fun changeId(newId: String): TransportIdRequest {
16+
fun changeStationId(newStationId: String): TransportIdRequest {
1317
return TransportIdRequest(
1418
transportMoveType = transportMoveType,
15-
id = newId,
19+
stationId = newStationId,
1620
stationName = stationName,
1721
coordinate = coordinate,
1822
stationType = stationType,
23+
area = area,
24+
lineId = lineId,
25+
lineName = lineName,
26+
term = term,
27+
)
28+
}
29+
30+
fun changeLineId(newLineId: String, newTerm: Int?): TransportIdRequest {
31+
return TransportIdRequest(
32+
transportMoveType = transportMoveType,
33+
stationId = stationId,
34+
stationName = stationName,
35+
coordinate = coordinate,
36+
stationType = stationType,
37+
area = area,
38+
lineId = newLineId,
39+
lineName = lineName,
40+
term = newTerm ?: term,
1941
)
2042
}
2143
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.stop.domain.model.route.seoul.bus
2+
3+
import com.squareup.moshi.Json
4+
import com.squareup.moshi.JsonClass
5+
6+
@JsonClass(generateAdapter = true)
7+
data class BusLineInfo(
8+
@Json(name = "busRouteNm")
9+
val busLineName: String,
10+
@Json(name = "busRouteId")
11+
val lineId: String,
12+
@Json(name = "term")
13+
val term: Int,
14+
)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.stop.domain.model.route.seoul.bus
2+
3+
import com.squareup.moshi.JsonClass
4+
5+
@JsonClass(generateAdapter = true)
6+
data class GetBusLineResponse(
7+
val lineIdMsgBody: LineIdMsgBody,
8+
)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.stop.domain.model.route.seoul.bus
2+
3+
import com.squareup.moshi.Json
4+
import com.squareup.moshi.JsonClass
5+
6+
@JsonClass(generateAdapter = true)
7+
data class LineIdMsgBody(
8+
@Json(name = "itemList")
9+
val busLines: List<BusLineInfo>
10+
)

domain/src/main/java/com/stop/domain/repository/RouteRepository.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.stop.domain.repository
22

33
import com.stop.domain.model.geoLocation.AddressType
44
import com.stop.domain.model.route.gyeonggi.GetGyeonggiBusStationIdResponse
5+
import com.stop.domain.model.route.seoul.bus.GetBusLineResponse
56
import com.stop.domain.model.route.seoul.bus.GetBusStationArsIdResponse
67
import com.stop.domain.model.route.tmap.RouteRequest
78
import com.stop.domain.model.route.tmap.custom.Coordinate
@@ -14,6 +15,9 @@ interface RouteRepository {
1415
suspend fun reverseGeocoding(coordinate: Coordinate, addressType: AddressType): ReverseGeocodingResponse
1516

1617
suspend fun getSubwayStationCd(stationId: String, stationName: String): String
18+
1719
suspend fun getSeoulBusStationArsId(stationName: String): GetBusStationArsIdResponse
20+
suspend fun getSeoulBusLine(stationId: String): GetBusLineResponse
21+
1822
suspend fun getGyeonggiBusStationId(stationName: String): GetGyeonggiBusStationIdResponse
1923
}

0 commit comments

Comments
 (0)