Skip to content

Commit adbb74c

Browse files
committed
feat : getSubwayRoute() 함수 구현
- 지하철 루트 좌표 받아오기 구현
1 parent fd3adbf commit adbb74c

File tree

9 files changed

+90
-28
lines changed

9 files changed

+90
-28
lines changed

data/src/main/java/com/stop/data/model/nearplace/Place.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ data class Place(
2121

2222
fun toNowStationLocationUseCaseModel() = NowStationLocationUseCaseItem(
2323
name = name,
24-
latitude = centerLat,
25-
longitude = centerLon
24+
latitude = centerLat.toString(),
25+
longitude = centerLon.toString()
2626
)
2727
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ internal class NearPlaceRepositoryImpl @Inject constructor(
4949
return places.first().toNowStationLocationUseCaseModel()
5050
}.onFailure {
5151
throw it
52-
}.getOrDefault(NowStationLocationUseCaseItem("", 0.0, 0.0)) as NowStationLocationUseCaseItem
52+
}.getOrDefault(NowStationLocationUseCaseItem("", "0", "0")) as NowStationLocationUseCaseItem
5353
}
5454

5555
}

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

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,25 @@ internal class RouteRepositoryImpl @Inject constructor(
5252
return remoteDataSource.getGyeonggiBusStationId(stationName)
5353
}
5454

55-
override suspend fun getSubwayRoute(routeRequest: RouteRequest): SubwayRouteLocationUseCaseItem {
56-
return remoteDataSource.getRoute(routeRequest).metaData.plan.itineraries.first().legs.first { it.mode != "WALK" }
57-
.toUseCaseModel()
55+
override suspend fun getSubwayRoute(
56+
routeRequest: RouteRequest,
57+
subwayLine: String,
58+
startSubwayStation: String,
59+
endSubwayStation: String
60+
): SubwayRouteLocationUseCaseItem {
61+
return remoteDataSource.getRoute(routeRequest).metaData.plan.itineraries.first {
62+
it.legs.any { leg ->
63+
leg.mode == "SUBWAY"
64+
&& leg.route?.contains(subwayLine) ?: false
65+
&& leg.start.name.contains(startSubwayStation)
66+
&& leg.end.name.contains(endSubwayStation)
67+
}
68+
}.legs.first { leg ->
69+
leg.mode == "SUBWAY"
70+
&& leg.route?.contains(subwayLine) ?: false
71+
&& leg.start.name.contains(startSubwayStation)
72+
&& leg.end.name.contains(endSubwayStation)
73+
}.toUseCaseModel()
5874
}
59-
}
75+
76+
}

domain/src/main/java/com/stop/domain/model/nowlocation/NowStationLocationUseCaseItem.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ package com.stop.domain.model.nowlocation
22

33
data class NowStationLocationUseCaseItem(
44
val name: String,
5-
val latitude: Double,
6-
val longitude: Double
5+
val latitude: String,
6+
val longitude: String
77
)

domain/src/main/java/com/stop/domain/model/route/tmap/origin/Leg.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ data class Leg(
2020
) {
2121
fun toUseCaseModel(): SubwayRouteLocationUseCaseItem {
2222
val line = passShape?.linestring?.split(" ")?.map {
23-
val (lat, long) = it.split(",")
23+
val (long, lat) = it.split(",")
2424
Location(lat.toDouble(), long.toDouble())
2525
} ?: emptyList()
2626
return SubwayRouteLocationUseCaseItem(

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,10 @@ interface RouteRepository {
2323

2424
suspend fun getGyeonggiBusStationId(stationName: String): GetGyeonggiBusStationIdResponse
2525

26-
suspend fun getSubwayRoute(routeRequest: RouteRequest): SubwayRouteLocationUseCaseItem
26+
suspend fun getSubwayRoute(
27+
routeRequest: RouteRequest,
28+
subwayLine: String,
29+
startSubwayStation: String,
30+
endSubwayStation: String
31+
): SubwayRouteLocationUseCaseItem
2732
}

domain/src/main/java/com/stop/domain/usecase/nowlocation/GetSubwayRouteUseCase.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ import com.stop.domain.model.route.tmap.RouteRequest
55

66
interface GetSubwayRouteUseCase {
77

8-
suspend operator fun invoke(routeRequest: RouteRequest): SubwayRouteLocationUseCaseItem
8+
suspend operator fun invoke(
9+
routeRequest: RouteRequest,
10+
subwayLine: String,
11+
startSubwayStation: String,
12+
endSubwayStation: String
13+
): SubwayRouteLocationUseCaseItem
914

1015
}

domain/src/main/java/com/stop/domain/usecase/nowlocation/GetSubwayRouteUseCaseImpl.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,17 @@ class GetSubwayRouteUseCaseImpl @Inject constructor(
99
private val routeRepository: RouteRepository
1010
) : GetSubwayRouteUseCase {
1111

12-
override suspend fun invoke(routeRequest: RouteRequest): SubwayRouteLocationUseCaseItem {
13-
return routeRepository.getSubwayRoute(routeRequest)
12+
override suspend fun invoke(
13+
routeRequest: RouteRequest,
14+
subwayLine: String,
15+
startSubwayStation: String,
16+
endSubwayStation: String
17+
): SubwayRouteLocationUseCaseItem {
18+
return routeRepository.getSubwayRoute(
19+
routeRequest,
20+
subwayLine,
21+
startSubwayStation,
22+
endSubwayStation)
1423
}
1524

1625
}

presentation/src/main/java/com/stop/ui/mission/MissionViewModel.kt

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,18 @@ import android.util.Log
44
import androidx.lifecycle.*
55
import com.stop.data.BuildConfig
66
import com.stop.domain.model.nowlocation.BusInfoUseCaseItem
7-
import com.stop.domain.model.nowlocation.NowStationLocationUseCaseItem
7+
import com.stop.domain.model.nowlocation.SubwayRouteLocationUseCaseItem
8+
import com.stop.domain.model.route.tmap.RouteRequest
89
import com.stop.domain.usecase.nowlocation.GetBusNowLocationUseCase
910
import com.stop.domain.usecase.nowlocation.GetNowStationLocationUseCase
1011
import com.stop.domain.usecase.nowlocation.GetSubwayRouteUseCase
1112
import com.stop.domain.usecase.nowlocation.GetSubwayTrainNowStationUseCase
1213
import com.stop.model.Location
1314
import dagger.hilt.android.lifecycle.HiltViewModel
14-
import kotlinx.coroutines.*
15+
import kotlinx.coroutines.Dispatchers
16+
import kotlinx.coroutines.delay
17+
import kotlinx.coroutines.launch
18+
import kotlinx.coroutines.withContext
1519
import javax.inject.Inject
1620
import kotlin.random.Random
1721

@@ -52,15 +56,17 @@ class MissionViewModel @Inject constructor(
5256
private val _busNowLocationInfo = MutableLiveData<BusInfoUseCaseItem>()
5357
val busNowLocationInfo: LiveData<BusInfoUseCaseItem> = _busNowLocationInfo
5458

55-
private val _nowStationLocationInfo = MutableLiveData<NowStationLocationUseCaseItem>()
56-
val nowStationLocationInfo: LiveData<NowStationLocationUseCaseItem> = _nowStationLocationInfo
59+
private val _subwayRoute = MutableLiveData<SubwayRouteLocationUseCaseItem>()
60+
val subwayRoute: LiveData<SubwayRouteLocationUseCaseItem> = _subwayRoute
5761

5862
var personCurrentLocation = Location(37.553836, 126.969652)
5963
var busCurrentLocation = Location(37.553836, 126.969652)
6064

65+
lateinit var startSubwayStation: String
66+
6167
init {
6268
getBusNowLocation()
63-
getNowStationLocation()
69+
getSubwayRoute()
6470
}
6571

6672
fun setDestination(inputDestination: String) {
@@ -119,22 +125,36 @@ class MissionViewModel @Inject constructor(
119125
}
120126

121127

122-
suspend fun getNowStationLocation() = withContext(Dispatchers.Main) {
123-
val searchKeyword = getSubwayTrainNowLocation().stationName
128+
private suspend fun getNowStationLocation() = withContext(Dispatchers.Main) {
129+
startSubwayStation = getSubwayTrainNowLocation().stationName
124130
getNowStationLocationUseCase(
125131
TMAP_VERSION,
126-
searchKeyword,
132+
startSubwayStation,
127133
personCurrentLocation.longitude,
128134
personCurrentLocation.latitude,
129135
BuildConfig.T_MAP_APP_KEY
130136
)
131137
}
132138

133-
// private fun getSubwayRoute() {
134-
// viewModelScope.launch {
135-
// getSubwayRouteUseCase(RouteRequest())
136-
// }
137-
// }
139+
private fun getSubwayRoute() {
140+
viewModelScope.launch {
141+
val startLocation = getNowStationLocation()
142+
getSubwayRouteUseCase(
143+
RouteRequest(
144+
startLocation.longitude,
145+
startLocation.latitude,
146+
TEST_SUBWAY_LONG,
147+
TEST_SUBWAY_LAT
148+
),
149+
TEST_SUBWAY_NUMER.toString() + LINE,
150+
startSubwayStation.dropLast(1), //"역" 버리기
151+
TEST_END_SUBWAY_STATION
152+
).apply {
153+
_subwayRoute.value = this
154+
}
155+
Log.d("MissionFragment", "subwayRoute ${_subwayRoute.value}")
156+
}
157+
}
138158

139159
companion object {
140160
private const val DELAY_TIME = 1000L
@@ -149,9 +169,15 @@ class MissionViewModel @Inject constructor(
149169
private var TIME_TEST = 0
150170

151171
private const val TEST_SUBWAY_NUMER = 4
152-
private const val TEST_TRAIN_NUMBER = "4615"
172+
private const val LINE = "호선" //임시로.. 종성님이 어떻게 넘겨주시느냐에 따라 달림
173+
private const val TEST_TRAIN_NUMBER = "4645"
153174

154175
private const val TMAP_VERSION = 1
176+
177+
private const val TEST_SUBWAY_LAT = "37.30973177"
178+
private const val TEST_SUBWAY_LONG = "126.85359515"
179+
private const val TEST_END_SUBWAY_STATION = "한대앞"
180+
155181
}
156182

157183
}

0 commit comments

Comments
 (0)