Skip to content

Commit b6b9304

Browse files
committed
feat: 경로 상에 있는 열차 중 탑승해야 하는 지하철 판별 로직 구현
1 parent 2c86a54 commit b6b9304

25 files changed

+330
-112
lines changed

data/src/main/java/com/stop/data/remote/model/nowlocation/subway/SubwayTrainNowLocationResponse.kt

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,9 @@ package com.stop.data.remote.model.nowlocation.subway
22

33
import com.squareup.moshi.Json
44
import com.squareup.moshi.JsonClass
5-
import com.stop.data.model.nowlocation.SubwayTrainRealTimePositionRepositoryItem
65

76
@JsonClass(generateAdapter = true)
87
data class SubwayTrainNowLocationResponse(
98
@Json(name = "realtimePositionList")
109
val realtimePositions: List<TrainLocationInfo>
11-
) {
12-
fun toRepositoryModel(trainNumber: String): SubwayTrainRealTimePositionRepositoryItem {
13-
return realtimePositions.first { it.trainNumber == trainNumber }.run {
14-
SubwayTrainRealTimePositionRepositoryItem(
15-
subwayId = subwayId,
16-
subwayName = stationName,
17-
stationId = stationId,
18-
stationName = stationName + STATION,
19-
trainNumber = this.trainNumber,
20-
trainStatus = trainStatus
21-
)
22-
}
23-
}
24-
25-
companion object {
26-
private const val STATION = ""
27-
}
28-
}
10+
)

data/src/main/java/com/stop/data/remote/model/nowlocation/subway/TrainLocationInfo.kt

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ package com.stop.data.remote.model.nowlocation.subway
22

33
import com.squareup.moshi.Json
44
import com.squareup.moshi.JsonClass
5+
import com.stop.domain.model.ApiChangedException
6+
import com.stop.domain.model.nowlocation.TrainLocationInfoDomain
7+
import com.stop.domain.model.route.seoul.subway.TransportDirectionType
58

69
@JsonClass(generateAdapter = true)
710
data class TrainLocationInfo(
@@ -11,9 +14,35 @@ data class TrainLocationInfo(
1114
@Json(name = "statnId")
1215
val stationId: String,
1316
@Json(name = "statnNm")
14-
val stationName: String,
17+
val currentStationName: String,
1518
@Json(name = "trainNo")
1619
val trainNumber: String,
1720
@Json(name = "trainSttus")
18-
val trainStatus: String // 0:진입 1:도착, 0,1외 나머지는:출발
19-
)
21+
val trainStatus: String, // 0:진입 1:도착, 0,1외 나머지는:출발
22+
@Json(name = "statnTnm")
23+
val destinationStationName: String,
24+
@Json(name = "updnLine")
25+
val subwayDirection: String,
26+
@Json(name = "lstcarAt")
27+
val isLastTrain: String, // (1:막차, 0:아님)
28+
) {
29+
fun toDomain() = TrainLocationInfoDomain(
30+
subwayId = subwayId,
31+
subwayName = subwayName,
32+
stationId = stationId,
33+
currentStationName = currentStationName,
34+
trainNumber = trainNumber,
35+
trainStatus = trainStatus,
36+
destinationStationName = destinationStationName,
37+
subwayDirection = when (subwayDirection) {
38+
"1" -> TransportDirectionType.INNER
39+
"0" -> TransportDirectionType.OUTER
40+
else -> throw ApiChangedException()
41+
},
42+
isLastTrain = when (isLastTrain) {
43+
"1" -> true
44+
"0" -> false
45+
else -> throw ApiChangedException()
46+
},
47+
)
48+
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package com.stop.data.remote.source.nowlocation
22

33
import com.stop.data.model.nowlocation.BusInfoRepositoryItem
4-
import com.stop.data.model.nowlocation.SubwayTrainRealTimePositionRepositoryItem
4+
import com.stop.data.remote.model.nowlocation.subway.TrainLocationInfo
55

66
interface NowLocationRemoteDataSource {
77

88
suspend fun getBusNowLocation(busRouteId: String, order: Int): BusInfoRepositoryItem
99

10-
suspend fun getSubwayTrainNowStation(trainNumber: String, subwayNumber: Int): SubwayTrainRealTimePositionRepositoryItem
10+
suspend fun getSubwayTrainNowStation(subwayNumber: Int): List<TrainLocationInfo>
1111
}

data/src/main/java/com/stop/data/remote/source/nowlocation/NowLocationRemoteDataSourceImpl.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package com.stop.data.remote.source.nowlocation
22

33
import com.stop.data.model.nowlocation.BusInfoRepositoryItem
4-
import com.stop.data.model.nowlocation.SubwayTrainRealTimePositionRepositoryItem
54
import com.stop.data.remote.model.NetworkResult
5+
import com.stop.data.remote.model.nowlocation.subway.TrainLocationInfo
66
import com.stop.data.remote.network.SwOpenApiSeoulService
77
import com.stop.data.remote.network.WsBusApiService
88
import javax.inject.Inject
@@ -23,10 +23,10 @@ internal class NowLocationRemoteDataSourceImpl @Inject constructor(
2323
}
2424
}
2525

26-
override suspend fun getSubwayTrainNowStation(trainNumber: String, subwayNumber: Int): SubwayTrainRealTimePositionRepositoryItem {
26+
override suspend fun getSubwayTrainNowStation(subwayNumber: Int): List<TrainLocationInfo> {
2727
with(swOpenApiSeoulService.getSubwayTrainNowStationInfo(stationName = subwayNumber.toString() + LINE)) {
2828
return when (this) {
29-
is NetworkResult.Success -> data.toRepositoryModel(trainNumber)
29+
is NetworkResult.Success -> data.realtimePositions
3030
is NetworkResult.Failure -> throw IllegalArgumentException(message)
3131
is NetworkResult.NetworkError -> throw exception
3232
is NetworkResult.Unexpected -> throw exception

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import com.stop.domain.model.route.seoul.bus.BusStationInfo
77
import com.stop.domain.model.route.seoul.bus.LastTimeInfo
88
import com.stop.domain.model.route.seoul.subway.Station
99
import com.stop.domain.model.route.seoul.subway.StationLastTime
10-
import com.stop.domain.model.route.seoul.subway.SubwayCircleType
10+
import com.stop.domain.model.route.seoul.subway.TransportDirectionType
1111
import com.stop.domain.model.route.seoul.subway.WeekType
1212
import com.stop.domain.model.route.tmap.RouteRequest
1313
import com.stop.domain.model.route.tmap.custom.Coordinate
@@ -23,7 +23,7 @@ internal interface RouteRemoteDataSource {
2323
suspend fun getSubwayStations(lineName: String): List<Station>
2424
suspend fun getSubwayStationLastTime(
2525
stationId: String,
26-
subwayCircleType: SubwayCircleType,
26+
transportDirectionType: TransportDirectionType,
2727
weekType: WeekType,
2828
): List<StationLastTime>
2929

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,15 +100,15 @@ internal class RouteRemoteDataSourceImpl @Inject constructor(
100100

101101
override suspend fun getSubwayStationLastTime(
102102
stationId: String,
103-
subwayCircleType: SubwayCircleType,
103+
transportDirectionType: TransportDirectionType,
104104
weekType: WeekType,
105105
): List<StationLastTime> {
106106
with(
107107
openApiSeoulService.getSubwayLastTime(
108108
serviceName = "SearchLastTrainTimeByIDService",
109109
stationId = stationId,
110110
weekTag = weekType.divisionValue,
111-
inOutTag = subwayCircleType.divisionValue,
111+
inOutTag = transportDirectionType.divisionValue,
112112
)
113113
) {
114114
return when (this) {

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@ package com.stop.data.repository
22

33
import com.stop.data.remote.source.nowlocation.NowLocationRemoteDataSource
44
import com.stop.domain.model.nowlocation.BusInfoUseCaseItem
5-
import com.stop.domain.model.nowlocation.SubwayTrainRealTimePositionUseCaseItem
5+
import com.stop.domain.model.nowlocation.TrainLocationInfoDomain
66
import com.stop.domain.repository.NowLocationRepository
77
import javax.inject.Inject
88

99
class NowLocationRepositoryImpl @Inject constructor(
1010
private val nowLocationRemoteDataSource: NowLocationRemoteDataSource,
11-
) : NowLocationRepository{
11+
) : NowLocationRepository {
1212

1313
override suspend fun getBusNowLocation(busRouteId: String, order: Int): BusInfoUseCaseItem {
1414
return nowLocationRemoteDataSource.getBusNowLocation(busRouteId, order).toUseCaseModel()
1515
}
1616

17-
override suspend fun getSubwayTrainNowStation(trainNumber: String, subwayNumber: Int): SubwayTrainRealTimePositionUseCaseItem {
18-
return nowLocationRemoteDataSource.getSubwayTrainNowStation(trainNumber, subwayNumber).toUseCaseModel()
17+
override suspend fun getSubwayTrains(subwayNumber: Int): List<TrainLocationInfoDomain> {
18+
return nowLocationRemoteDataSource.getSubwayTrainNowStation(subwayNumber)
19+
.map { it.toDomain() }
1920
}
20-
2121
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import com.stop.domain.model.route.gyeonggi.*
88
import com.stop.domain.model.route.seoul.bus.*
99
import com.stop.domain.model.route.seoul.subway.Station
1010
import com.stop.domain.model.route.seoul.subway.StationLastTime
11-
import com.stop.domain.model.route.seoul.subway.SubwayCircleType
11+
import com.stop.domain.model.route.seoul.subway.TransportDirectionType
1212
import com.stop.domain.model.route.seoul.subway.WeekType
1313
import com.stop.domain.model.route.tmap.RouteRequest
1414
import com.stop.domain.model.route.tmap.custom.Coordinate
@@ -46,10 +46,10 @@ internal class RouteRepositoryImpl @Inject constructor(
4646

4747
override suspend fun getSubwayStationLastTime(
4848
stationId: String,
49-
subwayCircleType: SubwayCircleType,
49+
transportDirectionType: TransportDirectionType,
5050
weekType: WeekType,
5151
): List<StationLastTime> {
52-
return remoteDataSource.getSubwayStationLastTime(stationId, subwayCircleType, weekType)
52+
return remoteDataSource.getSubwayStationLastTime(stationId, transportDirectionType, weekType)
5353
}
5454

5555
override suspend fun getSubwayRoute(
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package com.stop.domain.model
2+
3+
class AvailableTrainNoExistException: Exception()
4+
class ApiChangedException: Exception()
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.stop.domain.model.nowlocation
2+
3+
import com.stop.domain.model.route.seoul.subway.TransportDirectionType
4+
5+
data class TrainLocationInfoDomain(
6+
val subwayId: String,
7+
val subwayName: String,
8+
val stationId: String,
9+
val currentStationName: String,
10+
val trainNumber: String,
11+
val trainStatus: String,
12+
val destinationStationName: String,
13+
val subwayDirection: TransportDirectionType,
14+
val isLastTrain: Boolean,
15+
)

0 commit comments

Comments
 (0)