diff --git a/feature/auth/.gitignore b/feature/auth/.gitignore
deleted file mode 100644
index 42afabfd..00000000
--- a/feature/auth/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/build
\ No newline at end of file
diff --git a/feature/auth/build.gradle.kts b/feature/auth/build.gradle.kts
deleted file mode 100644
index 9a255a00..00000000
--- a/feature/auth/build.gradle.kts
+++ /dev/null
@@ -1,11 +0,0 @@
-plugins {
- id("ndgl.feature")
-}
-
-android {
- namespace = "com.yapp.ndgl.feature.auth"
-}
-
-dependencies {
- implementation(project(":data:auth"))
-}
diff --git a/feature/auth/consumer-rules.pro b/feature/auth/consumer-rules.pro
deleted file mode 100644
index e69de29b..00000000
diff --git a/feature/auth/src/main/AndroidManifest.xml b/feature/auth/src/main/AndroidManifest.xml
deleted file mode 100644
index 8bdb7e14..00000000
--- a/feature/auth/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/feature/auth/src/main/java/com/yapp/ndgl/feature/auth/AuthScreen.kt b/feature/auth/src/main/java/com/yapp/ndgl/feature/auth/AuthScreen.kt
deleted file mode 100644
index 1dd4f994..00000000
--- a/feature/auth/src/main/java/com/yapp/ndgl/feature/auth/AuthScreen.kt
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.yapp.ndgl.feature.auth
-
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.lazy.LazyColumn
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
-
-@Composable
-fun AuthRoute(
- viewModel: AuthViewModel = hiltViewModel(),
-) {
- AuthScreen()
-}
-
-@Composable
-private fun AuthScreen() {
- LazyColumn(
- modifier = Modifier.fillMaxSize(),
- verticalArrangement = Arrangement.Center,
- horizontalAlignment = Alignment.CenterHorizontally,
- ) {
- item {
- Text(text = "Auth Screen")
- }
- }
-}
-
-@Preview(showBackground = true)
-@Composable
-private fun AuthScreenPreview() {
- AuthScreen()
-}
diff --git a/feature/auth/src/main/java/com/yapp/ndgl/feature/auth/AuthViewModel.kt b/feature/auth/src/main/java/com/yapp/ndgl/feature/auth/AuthViewModel.kt
deleted file mode 100644
index 06c610f6..00000000
--- a/feature/auth/src/main/java/com/yapp/ndgl/feature/auth/AuthViewModel.kt
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.yapp.ndgl.feature.auth
-
-import androidx.lifecycle.ViewModel
-import dagger.hilt.android.lifecycle.HiltViewModel
-import javax.inject.Inject
-
-@HiltViewModel
-class AuthViewModel @Inject constructor() : ViewModel()
diff --git a/feature/home/src/main/java/com/yapp/ndgl/feature/home/main/HomeContract.kt b/feature/home/src/main/java/com/yapp/ndgl/feature/home/main/HomeContract.kt
index 9de90b73..ab292400 100644
--- a/feature/home/src/main/java/com/yapp/ndgl/feature/home/main/HomeContract.kt
+++ b/feature/home/src/main/java/com/yapp/ndgl/feature/home/main/HomeContract.kt
@@ -74,7 +74,7 @@ sealed interface HomeIntent : UiIntent {
data class ClickTravel(val travelId: Long, val days: Int) : HomeIntent
data object ClickTravelMore : HomeIntent
data class ClickMyTravel(val travelId: Long, val days: Int) : HomeIntent
- data class ClickMyTravelPlace(val placeId: String) : HomeIntent
+ data class ClickMyTravelPlace(val googlePlaceId: String) : HomeIntent
}
sealed interface HomeSideEffect : UiSideEffect {
@@ -83,5 +83,5 @@ sealed interface HomeSideEffect : UiSideEffect {
data class NavigateToFollowTravel(val travelId: Long, val days: Int) : HomeSideEffect
data object NavigateToTravelMore : HomeSideEffect
data class NavigateToTravelDetail(val travelId: Long, val days: Int) : HomeSideEffect
- data class NavigateToPlaceDetail(val placeId: String) : HomeSideEffect
+ data class NavigateToPlaceDetail(val googlePlaceId: String) : HomeSideEffect
}
diff --git a/feature/home/src/main/java/com/yapp/ndgl/feature/home/main/HomeScreen.kt b/feature/home/src/main/java/com/yapp/ndgl/feature/home/main/HomeScreen.kt
index ca91c9eb..373f840f 100644
--- a/feature/home/src/main/java/com/yapp/ndgl/feature/home/main/HomeScreen.kt
+++ b/feature/home/src/main/java/com/yapp/ndgl/feature/home/main/HomeScreen.kt
@@ -77,7 +77,7 @@ internal fun HomeRoute(
sideEffect.days,
)
- is HomeSideEffect.NavigateToPlaceDetail -> navigateToPlaceDetail(sideEffect.placeId)
+ is HomeSideEffect.NavigateToPlaceDetail -> navigateToPlaceDetail(sideEffect.googlePlaceId)
}
}
}
diff --git a/feature/home/src/main/java/com/yapp/ndgl/feature/home/main/HomeViewModel.kt b/feature/home/src/main/java/com/yapp/ndgl/feature/home/main/HomeViewModel.kt
index 50f7d033..5984d7d6 100644
--- a/feature/home/src/main/java/com/yapp/ndgl/feature/home/main/HomeViewModel.kt
+++ b/feature/home/src/main/java/com/yapp/ndgl/feature/home/main/HomeViewModel.kt
@@ -204,7 +204,7 @@ class HomeViewModel @Inject constructor(
is HomeIntent.ClickTravel -> postNavigateToTravelTemplate(travelId = intent.travelId, days = intent.days)
HomeIntent.ClickTravelMore -> postNavigateToTravelMore()
is HomeIntent.ClickMyTravel -> postNavigateToTravelDetail(travelId = intent.travelId, days = intent.days)
- is HomeIntent.ClickMyTravelPlace -> postNavigateToPlaceDetail(placeId = intent.placeId)
+ is HomeIntent.ClickMyTravelPlace -> postNavigateToPlaceDetail(googlePlaceId = intent.googlePlaceId)
}
}
@@ -228,8 +228,8 @@ class HomeViewModel @Inject constructor(
postSideEffect(HomeSideEffect.NavigateToTravelDetail(travelId = travelId, days = days))
}
- private fun postNavigateToPlaceDetail(placeId: String) {
- postSideEffect(HomeSideEffect.NavigateToPlaceDetail(placeId))
+ private fun postNavigateToPlaceDetail(googlePlaceId: String) {
+ postSideEffect(HomeSideEffect.NavigateToPlaceDetail(googlePlaceId))
}
companion object {
diff --git a/feature/home/src/main/java/com/yapp/ndgl/feature/home/navigation/HomeEntry.kt b/feature/home/src/main/java/com/yapp/ndgl/feature/home/navigation/HomeEntry.kt
index fc2b8270..fabe4119 100644
--- a/feature/home/src/main/java/com/yapp/ndgl/feature/home/navigation/HomeEntry.kt
+++ b/feature/home/src/main/java/com/yapp/ndgl/feature/home/navigation/HomeEntry.kt
@@ -29,8 +29,8 @@ fun EntryProviderScope.homeEntry(
navigateToTravelDetail = { travelId, days ->
navigator.navigate(Route.TravelDetail(travelId = travelId, days = days))
},
- navigateToPlaceDetail = { placeId ->
- navigator.navigate(Route.PlaceDetail(googlePlaceId = placeId))
+ navigateToPlaceDetail = { googlePlaceId ->
+ navigator.navigate(Route.PlaceDetail(googlePlaceId = googlePlaceId))
},
)
}
diff --git a/feature/splash/src/main/java/com/yapp/ndgl/feature/splash/SplashScreen.kt b/feature/splash/src/main/java/com/yapp/ndgl/feature/splash/SplashScreen.kt
index c264a7bc..5a50bfe5 100644
--- a/feature/splash/src/main/java/com/yapp/ndgl/feature/splash/SplashScreen.kt
+++ b/feature/splash/src/main/java/com/yapp/ndgl/feature/splash/SplashScreen.kt
@@ -37,16 +37,7 @@ fun SplashRoute(
)
onDispose {
- activity?.enableEdgeToEdge(
- statusBarStyle = SystemBarStyle.auto(
- android.graphics.Color.TRANSPARENT,
- android.graphics.Color.TRANSPARENT,
- ),
- navigationBarStyle = SystemBarStyle.auto(
- android.graphics.Color.TRANSPARENT,
- android.graphics.Color.TRANSPARENT,
- ),
- )
+ activity?.enableEdgeToEdge()
}
}
diff --git a/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/main/TravelHelperContract.kt b/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/main/TravelHelperContract.kt
index 71bf4ac5..e50ec536 100644
--- a/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/main/TravelHelperContract.kt
+++ b/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/main/TravelHelperContract.kt
@@ -102,12 +102,12 @@ sealed interface TravelHelperIntent : UiIntent {
data object SwapCurrency : TravelHelperIntent
data class SelectCurrency(val currencyCode: String) : TravelHelperIntent
data class ClickTravelCard(val travelId: Long, val days: Int) : TravelHelperIntent
- data class ClickPlace(val placeId: String) : TravelHelperIntent
+ data class ClickPlace(val googlePlaceId: String) : TravelHelperIntent
}
sealed interface TravelHelperSideEffect : UiSideEffect {
data object NavigateToSearch : TravelHelperSideEffect
data object ShowExchangeRateError : TravelHelperSideEffect
data class NavigateToTravelDetail(val travelId: Long, val days: Int) : TravelHelperSideEffect
- data class NavigateToPlaceDetail(val placeId: String) : TravelHelperSideEffect
+ data class NavigateToPlaceDetail(val googlePlaceId: String) : TravelHelperSideEffect
}
diff --git a/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/main/TravelHelperScreen.kt b/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/main/TravelHelperScreen.kt
index c723eca4..16db2d05 100644
--- a/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/main/TravelHelperScreen.kt
+++ b/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/main/TravelHelperScreen.kt
@@ -89,7 +89,7 @@ internal fun TravelHelperRoute(
}
}
- is TravelHelperSideEffect.NavigateToPlaceDetail -> navigateToPlaceDetail(sideEffect.placeId)
+ is TravelHelperSideEffect.NavigateToPlaceDetail -> navigateToPlaceDetail(sideEffect.googlePlaceId)
}
}
}
diff --git a/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/main/TravelHelperViewModel.kt b/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/main/TravelHelperViewModel.kt
index d7bfa220..4e00ad6b 100644
--- a/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/main/TravelHelperViewModel.kt
+++ b/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/main/TravelHelperViewModel.kt
@@ -283,7 +283,7 @@ class TravelHelperViewModel @Inject constructor(
}
is TravelHelperIntent.ClickPlace -> {
- postSideEffect(TravelHelperSideEffect.NavigateToPlaceDetail(intent.placeId))
+ postSideEffect(TravelHelperSideEffect.NavigateToPlaceDetail(intent.googlePlaceId))
}
}
}
diff --git a/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/navigation/TravelHelperEntry.kt b/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/navigation/TravelHelperEntry.kt
index 07338c2e..062b5830 100644
--- a/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/navigation/TravelHelperEntry.kt
+++ b/feature/travel-helper/src/main/java/com/yapp/ndgl/feature/travelhelper/navigation/TravelHelperEntry.kt
@@ -14,7 +14,7 @@ fun EntryProviderScope.travelHelperEntry(navigator: Navigator) {
navigator.navigate(Route.TravelDetail(travelId, days))
},
navigateToPopularTravelList = { navigator.navigate(Route.PopularTravelList) },
- navigateToPlaceDetail = { placeId -> navigator.navigate(Route.PlaceDetail(placeId)) },
+ navigateToPlaceDetail = { googlePlaceId -> navigator.navigate(Route.PlaceDetail(googlePlaceId)) },
)
}
}
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/additinerary/AddItineraryContract.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/additinerary/AddItineraryContract.kt
index 5cf6389f..4e4f71c8 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/additinerary/AddItineraryContract.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/additinerary/AddItineraryContract.kt
@@ -82,12 +82,12 @@ sealed interface AddItineraryIntent : UiIntent {
data object ClickAddItinerary : AddItineraryIntent
data object ClickAddress : AddItineraryIntent
data object ClickMenu : AddItineraryIntent
- data class BookMarkPlace(val placeId: String) : AddItineraryIntent
+ data class BookMarkPlace(val googlePlaceId: String) : AddItineraryIntent
data class ClickSelectablePlace(val googlePlaceId: String) : AddItineraryIntent
}
sealed interface AddItinerarySideEffect : UiSideEffect {
data object NavigateBack : AddItinerarySideEffect
data class NavigateToBrowser(val url: String) : AddItinerarySideEffect
- data class NavigateToAddPlace(val placeId: String) : AddItinerarySideEffect
+ data class NavigateToAddPlace(val googlePlaceId: String) : AddItinerarySideEffect
}
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/additinerary/AddItineraryScreen.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/additinerary/AddItineraryScreen.kt
index b0b68301..d3645ea1 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/additinerary/AddItineraryScreen.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/additinerary/AddItineraryScreen.kt
@@ -45,7 +45,7 @@ internal fun AddItineraryRoute(
when (sideEffect) {
is AddItinerarySideEffect.NavigateBack -> navigateBack()
is AddItinerarySideEffect.NavigateToBrowser -> context.launchBrowser(sideEffect.url)
- is AddItinerarySideEffect.NavigateToAddPlace -> navigateToAddPlace(sideEffect.placeId)
+ is AddItinerarySideEffect.NavigateToAddPlace -> navigateToAddPlace(sideEffect.googlePlaceId)
}
}
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/additinerary/AddItineraryViewModel.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/additinerary/AddItineraryViewModel.kt
index e8cb1490..7f1c2751 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/additinerary/AddItineraryViewModel.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/additinerary/AddItineraryViewModel.kt
@@ -119,7 +119,7 @@ class AddItineraryViewModel @AssistedInject constructor(
is AddItineraryIntent.ClickAddItinerary -> clickAddItinerary()
is AddItineraryIntent.ClickAddress -> clickAddress()
is AddItineraryIntent.ClickMenu -> clickMenu()
- is AddItineraryIntent.BookMarkPlace -> bookmarkPlace(intent.placeId)
+ is AddItineraryIntent.BookMarkPlace -> bookmarkPlace(intent.googlePlaceId)
is AddItineraryIntent.ClickSelectablePlace -> clickSelectablePlace(intent.googlePlaceId)
}
}
@@ -217,11 +217,11 @@ class AddItineraryViewModel @AssistedInject constructor(
}
}
- private fun loadPlaceDetail(placeId: String) = viewModelScope.launch {
+ private fun loadPlaceDetail(googlePlaceId: String) = viewModelScope.launch {
suspendRunCatching {
- placeRepository.getPlace(placeId)
+ placeRepository.getPlace(googlePlaceId)
}.onSuccess { response ->
- loadPlacePhotos(placeId)
+ loadPlacePhotos(googlePlaceId)
reduce {
val currentDetail = selectedPlaceDetail ?: SelectedPlaceDetail()
copy(
@@ -235,10 +235,10 @@ class AddItineraryViewModel @AssistedInject constructor(
}
}
- private fun loadPlacePhotos(placeId: String) = viewModelScope.launch {
+ private fun loadPlacePhotos(googlePlaceId: String) = viewModelScope.launch {
repeat(3) {
delay(1000)
- val result = suspendRunCatching { placeRepository.getPlacePhotos(placeId) }
+ val result = suspendRunCatching { placeRepository.getPlacePhotos(googlePlaceId) }
val photos = result.getOrNull()?.photos
if (!photos.isNullOrEmpty()) {
reduce {
@@ -346,15 +346,15 @@ class AddItineraryViewModel @AssistedInject constructor(
postSideEffect(AddItinerarySideEffect.NavigateToBrowser(url))
}
- private fun bookmarkPlace(placeId: String) = viewModelScope.launch {
+ private fun bookmarkPlace(googlePlaceId: String) = viewModelScope.launch {
val currentPlaceDetail = state.value.selectedPlaceDetail
val isBookmarked = currentPlaceDetail?.placeInfo?.isBookMarked ?: false
suspendRunCatching {
if (isBookmarked) {
- placeRepository.unBookmarkPlace(placeId)
+ placeRepository.unBookmarkPlace(googlePlaceId)
} else {
- placeRepository.bookmarkPlace(placeId)
+ placeRepository.bookmarkPlace(googlePlaceId)
}
}.onSuccess {
currentPlaceDetail?.let { detail ->
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/addplace/AddPlaceViewModel.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/addplace/AddPlaceViewModel.kt
index 2ef75fb9..739cfb65 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/addplace/AddPlaceViewModel.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/addplace/AddPlaceViewModel.kt
@@ -16,7 +16,7 @@ import kotlinx.coroutines.launch
@HiltViewModel(assistedFactory = AddPlaceViewModel.Factory::class)
class AddPlaceViewModel @AssistedInject constructor(
- @Assisted private val placeId: String,
+ @Assisted private val googlePlaceId: String,
private val placeRepository: PlaceRepository,
) : BaseViewModel(
initialState = AddPlaceState(),
@@ -27,7 +27,7 @@ class AddPlaceViewModel @AssistedInject constructor(
private fun loadPlaceDetail() = viewModelScope.launch {
suspendRunCatching {
- placeRepository.getPlace(placeId)
+ placeRepository.getPlace(googlePlaceId)
}.onSuccess { response ->
loadPlacePhotos()
reduce {
@@ -41,7 +41,7 @@ class AddPlaceViewModel @AssistedInject constructor(
private fun loadPlacePhotos() = viewModelScope.launch {
repeat(3) {
delay(1000)
- val result = suspendRunCatching { placeRepository.getPlacePhotos(placeId) }
+ val result = suspendRunCatching { placeRepository.getPlacePhotos(googlePlaceId) }
val photos = result.getOrNull()?.photos
if (!photos.isNullOrEmpty()) {
@@ -91,6 +91,6 @@ class AddPlaceViewModel @AssistedInject constructor(
@AssistedFactory
interface Factory {
- fun create(placeId: String): AddPlaceViewModel
+ fun create(googlePlaceId: String): AddPlaceViewModel
}
}
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/component/PlaceInfoTab.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/component/PlaceInfoTab.kt
index ed6c2fec..fdc7e637 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/component/PlaceInfoTab.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/component/PlaceInfoTab.kt
@@ -39,7 +39,7 @@ internal fun PlaceInfoTab(
onAddressClick: () -> Unit = {},
onMenuClick: () -> Unit = {},
onAlternativePlaceClick: (String) -> Unit = {},
- onChangePlaceClick: (AlternativePlace) -> Unit = {},
+ onChangePlaceClick: ((AlternativePlace) -> Unit)? = null,
) {
Column(
modifier = Modifier.fillMaxSize(),
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/FollowTravelContract.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/FollowTravelContract.kt
index 86fc3007..abc25da3 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/FollowTravelContract.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/FollowTravelContract.kt
@@ -38,7 +38,7 @@ sealed interface FollowTravelIntent : UiIntent {
sealed interface FollowTravelSideEffect : UiSideEffect {
data class NavigateToFollowPlaceDetail(
- val placeId: String,
+ val googlePlaceId: String,
val tipContent: TipContent?,
val alternativePlaces: List?,
) :
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/FollowTravelScreen.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/FollowTravelScreen.kt
index 55cf9a10..991cb318 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/FollowTravelScreen.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/FollowTravelScreen.kt
@@ -59,7 +59,7 @@ internal fun FollowTravelRoute(
viewModel.collectSideEffect { sideEffect ->
when (sideEffect) {
is FollowTravelSideEffect.NavigateToFollowPlaceDetail ->
- navigateToFollowPlaceDetail(sideEffect.placeId, sideEffect.tipContent, sideEffect.alternativePlaces)
+ navigateToFollowPlaceDetail(sideEffect.googlePlaceId, sideEffect.tipContent, sideEffect.alternativePlaces)
}
}
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/FollowTravelViewModel.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/FollowTravelViewModel.kt
index f42fef5d..d51e4ee9 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/FollowTravelViewModel.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/FollowTravelViewModel.kt
@@ -83,7 +83,7 @@ class FollowTravelViewModel @AssistedInject constructor(
is FollowTravelIntent.ClickPlaceItem -> {
postSideEffect(
FollowTravelSideEffect.NavigateToFollowPlaceDetail(
- placeId = intent.place.placeInfo.googlePlaceId,
+ googlePlaceId = intent.place.placeInfo.googlePlaceId,
tipContent = intent.place.placeInfo.tipContent?.let {
TipContent(creatorName = state.value.creatorName, tips = it.tips)
},
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/component/TravelMap.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/component/TravelMap.kt
index 6a5e7e84..3072cf8e 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/component/TravelMap.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/followtravel/component/TravelMap.kt
@@ -42,6 +42,8 @@ internal fun TravelMap(
places: List,
onScrollEnabledChange: (Boolean) -> Unit,
) {
+ require(places.isNotEmpty()) { "TravelMap requires at least one place" }
+
val routePoints = remember(places) {
places.map { place ->
LatLng(place.placeInfo.latitude, place.placeInfo.longitude)
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/MyTravelContract.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/MyTravelContract.kt
index 29262ac1..f4a6c5db 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/MyTravelContract.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/MyTravelContract.kt
@@ -47,7 +47,7 @@ data class MyTravelState(
@Immutable
data class TravelPlace(
- val placeId: String,
+ val googlePlaceId: String,
val category: PlaceCategory,
val estimatedDuration: Int,
val name: String,
@@ -83,7 +83,7 @@ sealed interface MyTravelIntent : UiIntent {
data object ClickSettings : MyTravelIntent
data class ClickTravel(val travelId: Long, val days: Int) : MyTravelIntent
data class ClickTravelDetail(val travelId: Long, val days: Int) : MyTravelIntent
- data class ClickPlaceDetail(val placeId: String) : MyTravelIntent
+ data class ClickPlaceDetail(val googlePlaceId: String) : MyTravelIntent
data object ClickFindNewTravel : MyTravelIntent
}
@@ -92,6 +92,6 @@ sealed interface MyTravelSideEffect : UiSideEffect {
data object NavigateToSettings : MyTravelSideEffect
data class NavigateToFollowTravel(val travelId: Long, val days: Int) : MyTravelSideEffect
data class NavigateToTravelDetail(val travelId: Long, val days: Int) : MyTravelSideEffect
- data class NavigateToTravelPlace(val placeId: String) : MyTravelSideEffect
+ data class NavigateToTravelPlace(val googlePlaceId: String) : MyTravelSideEffect
data object NavigateToPopularTravelList : MyTravelSideEffect
}
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/MyTravelScreen.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/MyTravelScreen.kt
index 952f7eb2..ee286f07 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/MyTravelScreen.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/MyTravelScreen.kt
@@ -45,8 +45,8 @@ internal fun MyTravelRoute(
onTravelClick = { travelId, days ->
viewModel.onIntent(MyTravelIntent.ClickTravelDetail(travelId = travelId, days = days))
},
- onPlaceClick = { placeId ->
- viewModel.onIntent(MyTravelIntent.ClickPlaceDetail(placeId = placeId))
+ onPlaceClick = { googlePlaceId ->
+ viewModel.onIntent(MyTravelIntent.ClickPlaceDetail(googlePlaceId = googlePlaceId))
},
onNewTravelFindClick = {
viewModel.onIntent(MyTravelIntent.ClickFindNewTravel)
@@ -73,7 +73,7 @@ internal fun MyTravelRoute(
)
is MyTravelSideEffect.NavigateToTravelPlace -> navigateToTravelPlace(
- sideEffect.placeId,
+ sideEffect.googlePlaceId,
)
MyTravelSideEffect.NavigateToPopularTravelList -> navigateToPopularTravelList()
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/MyTravelViewModel.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/MyTravelViewModel.kt
index c5872caf..57ae711f 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/MyTravelViewModel.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/MyTravelViewModel.kt
@@ -77,7 +77,7 @@ class MyTravelViewModel @Inject constructor(
dayCount = dayCount,
currentPlace = upcomingPlace?.place?.let { place ->
MyTravelState.TravelPlace(
- placeId = place.googlePlaceId,
+ googlePlaceId = place.googlePlaceId,
category = place.category,
estimatedDuration = upcomingPlace.estimatedDuration,
name = place.name,
@@ -159,7 +159,7 @@ class MyTravelViewModel @Inject constructor(
MyTravelIntent.ClickSettings -> postNavigateToSettings()
is MyTravelIntent.ClickTravel -> postNavigateToFollowTravel(travelId = intent.travelId, days = intent.days)
is MyTravelIntent.ClickTravelDetail -> postNavigateToTravelDetail(travelId = intent.travelId, days = intent.days)
- is MyTravelIntent.ClickPlaceDetail -> postNavigateToPlaceDetail(placeId = intent.placeId)
+ is MyTravelIntent.ClickPlaceDetail -> postNavigateToPlaceDetail(googlePlaceId = intent.googlePlaceId)
MyTravelIntent.ClickFindNewTravel -> postNavigateToPopularTravelList()
}
}
@@ -180,8 +180,8 @@ class MyTravelViewModel @Inject constructor(
postSideEffect(MyTravelSideEffect.NavigateToTravelDetail(travelId = travelId, days = days))
}
- private fun postNavigateToPlaceDetail(placeId: String) {
- postSideEffect(MyTravelSideEffect.NavigateToTravelPlace(placeId = placeId))
+ private fun postNavigateToPlaceDetail(googlePlaceId: String) {
+ postSideEffect(MyTravelSideEffect.NavigateToTravelPlace(googlePlaceId = googlePlaceId))
}
private fun postNavigateToPopularTravelList() {
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/UpcomingTravelCardSection.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/UpcomingTravelCardSection.kt
index 653c232d..f4fd271a 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/UpcomingTravelCardSection.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/mytravel/UpcomingTravelCardSection.kt
@@ -220,7 +220,7 @@ private fun InProgressTravelCard(
if (travel.currentPlace != null) {
PlaceInfoCard(
place = travel.currentPlace,
- onPlaceClick = { onPlaceClick(travel.currentPlace.placeId) },
+ onPlaceClick = { onPlaceClick(travel.currentPlace.googlePlaceId) },
)
}
}
@@ -346,7 +346,7 @@ private fun InProgressTravelCardPreview() {
endDate = LocalDate.of(2025, 2, 10),
dayCount = 3,
currentPlace = TravelPlace(
- placeId = "place1",
+ googlePlaceId = "",
category = PlaceCategory.ATTRACTION,
estimatedDuration = 60,
name = "인도 국제 공항",
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/navigation/TravelEntry.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/navigation/TravelEntry.kt
index ca001dee..100201de 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/navigation/TravelEntry.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/navigation/TravelEntry.kt
@@ -39,8 +39,8 @@ fun EntryProviderScope.travelEntry(navigator: Navigator) {
navigateToTravelDetail = { travelId, days ->
navigator.navigate(Route.TravelDetail(travelId, days))
},
- navigateToTravelPlace = { placeId ->
- navigator.navigate(Route.PlaceDetail(placeId))
+ navigateToTravelPlace = { googlePlaceId ->
+ navigator.navigate(Route.PlaceDetail(googlePlaceId))
},
navigateToPopularTravelList = {
navigator.navigate(Route.PopularTravelList)
@@ -171,13 +171,13 @@ fun EntryProviderScope.travelEntry(navigator: Navigator) {
AddItineraryRoute(
viewModel = viewModel,
navigateBack = { navigator.goBack() },
- navigateToAddPlace = { placeId -> navigator.navigate(Route.AddPlace(placeId)) },
+ navigateToAddPlace = { googlePlaceId -> navigator.navigate(Route.AddPlace(googlePlaceId)) },
)
}
entry { route ->
val viewModel =
hiltViewModel { factory ->
- factory.create(placeId = route.placeId)
+ factory.create(googlePlaceId = route.googlePlaceId)
}
AddPlaceRoute(
viewModel = viewModel,
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/traveldetail/TravelDetailContract.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/traveldetail/TravelDetailContract.kt
index b96a27cd..06b1dbb1 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/traveldetail/TravelDetailContract.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/traveldetail/TravelDetailContract.kt
@@ -129,7 +129,7 @@ sealed interface TravelDetailIntent : UiIntent {
data class ClickAddMemo(val placeId: Long) : TravelDetailIntent
data class ClickFindRoute(val googleMapsUri: String) : TravelDetailIntent
data object DismissPlaceBottomSheet : TravelDetailIntent
- data class NavigateToTravelPlaceDetail(val placeId: String) : TravelDetailIntent
+ data class NavigateToTravelPlaceDetail(val googlePlaceId: String) : TravelDetailIntent
data object DismissTimeBottomSheet : TravelDetailIntent
data class ConfirmDuration(val duration: Duration) : TravelDetailIntent
data object DismissCostModal : TravelDetailIntent
diff --git a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/traveldetail/TravelDetailViewModel.kt b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/traveldetail/TravelDetailViewModel.kt
index ed92fc4a..e8894201 100644
--- a/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/traveldetail/TravelDetailViewModel.kt
+++ b/feature/travel/src/main/java/com/yapp/ndgl/feature/travel/traveldetail/TravelDetailViewModel.kt
@@ -114,6 +114,72 @@ class TravelDetailViewModel @AssistedInject constructor(
}
private suspend fun handleAddPlace(event: AddPlaceEvent) {
+ if (state.value.isEditMode) {
+ handleAddPlaceInEditMode(event)
+ } else {
+ handleAddPlaceNormally(event)
+ }
+ }
+
+ private fun handleAddPlaceInEditMode(event: AddPlaceEvent) = viewModelScope.launch {
+ val dayIndex = event.day - 1
+ val currentItinerary = state.value.tempItineraries.getOrNull(dayIndex) ?: return@launch
+ val newSequence = currentItinerary.places.size + 1
+
+ suspendRunCatching {
+ userTravelRepository.addItinerary(
+ travelId = travelId,
+ googlePlaceId = event.googlePlaceId,
+ day = event.day,
+ sequence = newSequence,
+ startTime = null,
+ estimatedDuration = 60,
+ cost = null,
+ memo = null,
+ distanceKm = null,
+ transportation = null,
+ )
+ }.onSuccess { response ->
+ val newPlace = TravelPlace(
+ id = response.id,
+ placeInfo = PlaceInfo(
+ googlePlaceId = response.place.googlePlaceId,
+ name = response.place.name,
+ placeType = response.place.category.toPlaceType(),
+ day = response.day,
+ sequence = response.sequence,
+ thumbnail = response.place.thumbnail,
+ latitude = response.place.latitude,
+ longitude = response.place.longitude,
+ googleMapsUri = response.place.googleMapsUri,
+ estimatedDuration = response.estimatedDuration.minutes,
+ ),
+ regularOpeningHours = response.place.regularOpeningHours,
+ userData = TravelPlace.UserData(
+ estimatedDuration = response.estimatedDuration.minutes,
+ ),
+ startTime = 0.hours,
+ transportToNext = null,
+ )
+
+ reduce {
+ val updatedItineraries = tempItineraries.mapIndexed { index, itinerary ->
+ if (index == dayIndex) {
+ itinerary.copy(places = itinerary.places + newPlace)
+ } else {
+ itinerary
+ }
+ }
+ copy(tempItineraries = updatedItineraries)
+ }
+
+ postSideEffect(TravelDetailSideEffect.ScrollToPlace(newPlace.id))
+ }.onFailure {
+ // TODO: Handle API failure
+ }
+ }
+
+ private suspend fun handleAddPlaceNormally(event: AddPlaceEvent) {
val dayIndex = event.day - 1
val currentItinerary = state.value.itineraries.getOrNull(dayIndex) ?: return
val newSequence = currentItinerary.places.size + 1
@@ -133,8 +199,8 @@ class TravelDetailViewModel @AssistedInject constructor(
null
}
- val (distanceKm, transportation) = if (currentItinerary.places.isNotEmpty()) {
- newTransportSegment?.distanceKm to listOfNotNull(newTransportSegment?.toTransportationItem())
+ val (distanceKm, transportation) = if (currentItinerary.places.isNotEmpty() && newTransportSegment != null) {
+ newTransportSegment.distanceKm to listOf(newTransportSegment.toTransportationItem())
} else {
null to null
}
@@ -384,6 +450,7 @@ class TravelDetailViewModel @AssistedInject constructor(
copy(
isEditMode = true,
selectedPlaceIds = emptySet(),
+ tempItineraries = itineraries,
)
}
}
@@ -468,7 +535,7 @@ class TravelDetailViewModel @AssistedInject constructor(
}
private fun confirmEditMode() = viewModelScope.launch {
- // 일차별로 변경 사항 감지, 교통수단 재계산 및 시간 재계산
+ // 교통수단 재계산 및 시간 재계산
val updatedItineraries = state.value.tempItineraries.mapIndexed { dayIndex, tempItinerary ->
val originalItinerary = state.value.itineraries.getOrNull(dayIndex)
val hasChanges = originalItinerary == null || tempItinerary.places.map { it.id } != originalItinerary.places.map { it.id }
@@ -484,6 +551,7 @@ class TravelDetailViewModel @AssistedInject constructor(
}
}
+ // updateItinerary API로 순서 및 교통수단 업데이트
updateItinerary(updatedItineraries).onSuccess {
reduce {
copy(
@@ -797,11 +865,12 @@ class TravelDetailViewModel @AssistedInject constructor(
travelMode = mode,
)
}.getOrNull()?.let { routeInfo ->
- if (routeInfo.distanceMeters > 0) {
+ val durationSeconds = routeInfo.duration.removeSuffix("s").toLongOrNull()?.seconds
+ if (routeInfo.distanceMeters > 0 && durationSeconds != null) {
TransportSegment(
googlePlaceId = to.placeInfo.googlePlaceId,
type = mode.toTransportTypeFromMode(),
- duration = routeInfo.duration.removeSuffix("s").toInt().seconds,
+ duration = durationSeconds,
distance = routeInfo.distanceMeters,
)
} else {
@@ -831,11 +900,12 @@ class TravelDetailViewModel @AssistedInject constructor(
travelMode = travelMode,
)
}.getOrNull()?.let { routeInfo ->
- if (routeInfo.distanceMeters > 0) {
+ val durationSeconds = routeInfo.duration.removeSuffix("s").toLongOrNull()?.seconds
+ if (routeInfo.distanceMeters > 0 && durationSeconds != null) {
TransportSegment(
googlePlaceId = newGooglePlaceId,
type = travelMode.toTransportType(),
- duration = routeInfo.duration.removeSuffix("s").toLong().seconds,
+ duration = durationSeconds,
distance = routeInfo.distanceMeters,
)
} else {
@@ -1024,7 +1094,7 @@ class TravelDetailViewModel @AssistedInject constructor(
is TravelDetailIntent.ConfirmChangeTransportSegment -> confirmChangeTransportSegment(intent.segment)
is TravelDetailIntent.ClickPlaceItem -> clickPlaceItem(intent.place)
is TravelDetailIntent.DismissPlaceBottomSheet -> dismissPlaceBottomSheet()
- is TravelDetailIntent.NavigateToTravelPlaceDetail -> navigateToPlaceDetail(intent.placeId)
+ is TravelDetailIntent.NavigateToTravelPlaceDetail -> navigateToPlaceDetail(intent.googlePlaceId)
is TravelDetailIntent.ClickAddTime -> clickAddTime()
is TravelDetailIntent.ClickAddCost -> clickAddCost()
is TravelDetailIntent.ClickAddMemo -> clickAddMemo()
diff --git a/navigation/src/main/java/com/yapp/ndgl/navigation/Route.kt b/navigation/src/main/java/com/yapp/ndgl/navigation/Route.kt
index 22fe6a01..6c2d7cee 100644
--- a/navigation/src/main/java/com/yapp/ndgl/navigation/Route.kt
+++ b/navigation/src/main/java/com/yapp/ndgl/navigation/Route.kt
@@ -61,7 +61,7 @@ sealed interface Route : NavKey {
) : Route
@Serializable
- data class AddPlace(val placeId: String) : Route
+ data class AddPlace(val googlePlaceId: String) : Route
@Serializable
data object TravelHelper : Route