diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c2ef3504..0dc4668b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -76,12 +76,12 @@
android:screenOrientation="portrait" />
@@ -96,12 +96,12 @@
android:screenOrientation="portrait" />
@@ -126,7 +126,7 @@
android:screenOrientation="portrait" />
@@ -141,12 +141,12 @@
android:screenOrientation="portrait" />
diff --git a/app/src/main/java/com/going/doorip/di/DataSourceModule.kt b/app/src/main/java/com/going/doorip/di/DataSourceModule.kt
index 64a1ae84..3eed8192 100644
--- a/app/src/main/java/com/going/doorip/di/DataSourceModule.kt
+++ b/app/src/main/java/com/going/doorip/di/DataSourceModule.kt
@@ -6,6 +6,7 @@ import com.going.data.datasource.EnterTripDataSource
import com.going.data.datasource.MockDataSource
import com.going.data.datasource.ProfileDataSource
import com.going.data.datasource.SettingDataSource
+import com.going.data.datasource.StartInviteTripDataSource
import com.going.data.datasource.TendencyDataSource
import com.going.data.datasource.TodoDataSource
import com.going.data.datasourceImpl.AuthDataSourceImpl
@@ -14,6 +15,7 @@ import com.going.data.datasourceImpl.EnterTripDataSourceImpl
import com.going.data.datasourceImpl.MockDataSourceImpl
import com.going.data.datasourceImpl.ProfileDataSourceImpl
import com.going.data.datasourceImpl.SettingDataSourceImpl
+import com.going.data.datasourceImpl.StartInviteTripDataSourceImpl
import com.going.data.datasourceImpl.TendencyDataSourceImpl
import com.going.data.datasourceImpl.TodoDataSourceImpl
import dagger.Module
@@ -65,4 +67,9 @@ object DataSourceModule {
@Singleton
fun provideEnterTripDataSource(entertripDataSourceImpl: EnterTripDataSourceImpl): EnterTripDataSource =
entertripDataSourceImpl
+
+ @Provides
+ @Singleton
+ fun provideStartInviteTripDataSource(startInviteTripDataSourceImpl: StartInviteTripDataSourceImpl): StartInviteTripDataSource =
+ startInviteTripDataSourceImpl
}
diff --git a/app/src/main/java/com/going/doorip/di/RepositoryModule.kt b/app/src/main/java/com/going/doorip/di/RepositoryModule.kt
index bc50fae0..a41ae448 100644
--- a/app/src/main/java/com/going/doorip/di/RepositoryModule.kt
+++ b/app/src/main/java/com/going/doorip/di/RepositoryModule.kt
@@ -6,6 +6,7 @@ import com.going.data.repositoryImpl.EnterTripRepositoryImpl
import com.going.data.repositoryImpl.MockRepositoryImpl
import com.going.data.repositoryImpl.ProfileRepositoryImpl
import com.going.data.repositoryImpl.SettingRepositoryImpl
+import com.going.data.repositoryImpl.StartInviteTripRepositoryImpl
import com.going.data.repositoryImpl.TendencyRepositoryImpl
import com.going.data.repositoryImpl.TodoRepositoryImpl
import com.going.data.repositoryImpl.TokenRepositoryImpl
@@ -15,6 +16,7 @@ import com.going.domain.repository.EnterTripRepository
import com.going.domain.repository.MockRepository
import com.going.domain.repository.ProfileRepository
import com.going.domain.repository.SettingRepository
+import com.going.domain.repository.StartInviteTripRepository
import com.going.domain.repository.TendencyRepository
import com.going.domain.repository.TodoRepository
import com.going.domain.repository.TokenRepository
@@ -72,4 +74,9 @@ object RepositoryModule {
@Singleton
fun provideProfileRepository(profileRepositoryImpl: ProfileRepositoryImpl): ProfileRepository =
profileRepositoryImpl
+
+ @Provides
+ @Singleton
+ fun provideStartInviteTripRepository(startInviteTripRepositoryImpl: StartInviteTripRepositoryImpl): StartInviteTripRepository =
+ startInviteTripRepositoryImpl
}
diff --git a/app/src/main/java/com/going/doorip/di/ServiceModule.kt b/app/src/main/java/com/going/doorip/di/ServiceModule.kt
index 181d95a4..b53b0056 100644
--- a/app/src/main/java/com/going/doorip/di/ServiceModule.kt
+++ b/app/src/main/java/com/going/doorip/di/ServiceModule.kt
@@ -7,6 +7,7 @@ import com.going.data.service.EnterTripService
import com.going.data.service.MockService
import com.going.data.service.ProfileService
import com.going.data.service.SettingService
+import com.going.data.service.StartInviteTripService
import com.going.data.service.TendencyService
import com.going.data.service.TodoService
import dagger.Module
@@ -59,4 +60,9 @@ object ServiceModule {
@Singleton
fun provideProfileService(retrofit: Retrofit): ProfileService =
retrofit.create(ProfileService::class.java)
+
+ @Provides
+ @Singleton
+ fun provideStartInviteTripService(retrofit: Retrofit): StartInviteTripService =
+ retrofit.create(StartInviteTripService::class.java)
}
diff --git a/data/src/main/java/com/going/data/datasource/StartInviteTripDataSource.kt b/data/src/main/java/com/going/data/datasource/StartInviteTripDataSource.kt
new file mode 100644
index 00000000..66ede4e7
--- /dev/null
+++ b/data/src/main/java/com/going/data/datasource/StartInviteTripDataSource.kt
@@ -0,0 +1,15 @@
+package com.going.data.datasource
+
+import com.going.data.dto.BaseResponse
+import com.going.data.dto.request.StartInviteTripRequestDto
+import com.going.data.dto.response.StartInviteTripResponseDto
+import retrofit2.http.Body
+import retrofit2.http.Path
+
+interface StartInviteTripDataSource {
+
+ suspend fun postStartInviteTrip(
+ @Path("tripId") tripId: Long,
+ @Body request: StartInviteTripRequestDto,
+ ): BaseResponse
+}
diff --git a/data/src/main/java/com/going/data/datasourceImpl/StartInviteTripDataSourceImpl.kt b/data/src/main/java/com/going/data/datasourceImpl/StartInviteTripDataSourceImpl.kt
new file mode 100644
index 00000000..1966aafb
--- /dev/null
+++ b/data/src/main/java/com/going/data/datasourceImpl/StartInviteTripDataSourceImpl.kt
@@ -0,0 +1,19 @@
+package com.going.data.datasourceImpl
+
+import com.going.data.datasource.StartInviteTripDataSource
+import com.going.data.dto.BaseResponse
+import com.going.data.dto.request.StartInviteTripRequestDto
+import com.going.data.dto.response.StartInviteTripResponseDto
+import com.going.data.service.StartInviteTripService
+import javax.inject.Inject
+
+class StartInviteTripDataSourceImpl @Inject constructor(
+ private val startInviteTripService: StartInviteTripService,
+) : StartInviteTripDataSource {
+
+ override suspend fun postStartInviteTrip(
+ tripId: Long,
+ request: StartInviteTripRequestDto
+ ): BaseResponse =
+ startInviteTripService.postStartInviteTrip(tripId, request)
+}
diff --git a/data/src/main/java/com/going/data/dto/request/StartInviteTripRequestDto.kt b/data/src/main/java/com/going/data/dto/request/StartInviteTripRequestDto.kt
new file mode 100644
index 00000000..a6418404
--- /dev/null
+++ b/data/src/main/java/com/going/data/dto/request/StartInviteTripRequestDto.kt
@@ -0,0 +1,22 @@
+package com.going.data.dto.request
+
+import com.going.domain.entity.request.StartInviteTripRequestModel
+import kotlinx.serialization.SerialName
+import kotlinx.serialization.Serializable
+
+@Serializable
+class StartInviteTripRequestDto(
+ @SerialName("styleA")
+ val styleA: Int,
+ @SerialName("styleB")
+ val styleB: Int,
+ @SerialName("styleC")
+ val styleC: Int,
+ @SerialName("styleD")
+ val styleD: Int,
+ @SerialName("styleE")
+ val styleE: Int,
+)
+
+fun StartInviteTripRequestModel.toStartInviteTripRequestDto(): StartInviteTripRequestDto =
+ StartInviteTripRequestDto(styleA, styleB, styleC, styleD, styleE)
diff --git a/data/src/main/java/com/going/data/dto/response/StartInviteTripResponseDto.kt b/data/src/main/java/com/going/data/dto/response/StartInviteTripResponseDto.kt
new file mode 100644
index 00000000..fddefee0
--- /dev/null
+++ b/data/src/main/java/com/going/data/dto/response/StartInviteTripResponseDto.kt
@@ -0,0 +1,14 @@
+package com.going.data.dto.response
+
+import com.going.domain.entity.response.StartInviteTripModel
+import kotlinx.serialization.SerialName
+import kotlinx.serialization.Serializable
+
+@Serializable
+class StartInviteTripResponseDto (
+ @SerialName("tripId")
+ val tripId: Long,
+){
+ fun toStartInviteTripModel() =
+ StartInviteTripModel(tripId)
+}
diff --git a/data/src/main/java/com/going/data/interceptor/AuthInterceptor.kt b/data/src/main/java/com/going/data/interceptor/AuthInterceptor.kt
index da83d5e7..e64eb1b7 100644
--- a/data/src/main/java/com/going/data/interceptor/AuthInterceptor.kt
+++ b/data/src/main/java/com/going/data/interceptor/AuthInterceptor.kt
@@ -84,8 +84,8 @@ class AuthInterceptor @Inject constructor(
return response
}
- private fun Request.newAuthBuilder() =
- this.newBuilder().addHeader(AUTHORIZATION, "$BEARER ${dataStore.accessToken}")
+ private fun Request.newAuthBuilder() =
+ this.newBuilder().addHeader(AUTHORIZATION, "$BEARER ${dataStore.accessToken}")
companion object {
private const val CODE_TOKEN_EXPIRED = 401
diff --git a/data/src/main/java/com/going/data/repositoryImpl/StartInviteTripRepositoryImpl.kt b/data/src/main/java/com/going/data/repositoryImpl/StartInviteTripRepositoryImpl.kt
new file mode 100644
index 00000000..a10b523a
--- /dev/null
+++ b/data/src/main/java/com/going/data/repositoryImpl/StartInviteTripRepositoryImpl.kt
@@ -0,0 +1,24 @@
+package com.going.data.repositoryImpl
+
+import com.going.data.datasource.StartInviteTripDataSource
+import com.going.data.dto.request.toStartInviteTripRequestDto
+import com.going.domain.entity.request.StartInviteTripRequestModel
+import com.going.domain.entity.response.StartInviteTripModel
+import com.going.domain.repository.StartInviteTripRepository
+import javax.inject.Inject
+
+class StartInviteTripRepositoryImpl @Inject constructor(
+ private val startInviteTripDataSource: StartInviteTripDataSource
+) : StartInviteTripRepository {
+
+ override suspend fun postStartInviteTrip(
+ tripId: Long,
+ requestStartInviteTripModel: StartInviteTripRequestModel
+ ): Result =
+ runCatching {
+ startInviteTripDataSource.postStartInviteTrip(
+ tripId, requestStartInviteTripModel.toStartInviteTripRequestDto(),
+ ).data.toStartInviteTripModel()
+ }
+}
+
diff --git a/data/src/main/java/com/going/data/service/StartInviteTripService.kt b/data/src/main/java/com/going/data/service/StartInviteTripService.kt
new file mode 100644
index 00000000..32bfdf37
--- /dev/null
+++ b/data/src/main/java/com/going/data/service/StartInviteTripService.kt
@@ -0,0 +1,16 @@
+package com.going.data.service
+
+import com.going.data.dto.BaseResponse
+import com.going.data.dto.request.StartInviteTripRequestDto
+import com.going.data.dto.response.StartInviteTripResponseDto
+import retrofit2.http.Body
+import retrofit2.http.POST
+import retrofit2.http.Path
+
+interface StartInviteTripService {
+ @POST("/api/trips/{tripId}/entry")
+ suspend fun postStartInviteTrip(
+ @Path("tripId") tripId: Long,
+ @Body request: StartInviteTripRequestDto,
+ ): BaseResponse
+}
diff --git a/domain/src/main/kotlin/com/going/domain/entity/request/StartInviteTripRequestModel.kt b/domain/src/main/kotlin/com/going/domain/entity/request/StartInviteTripRequestModel.kt
new file mode 100644
index 00000000..78bdc277
--- /dev/null
+++ b/domain/src/main/kotlin/com/going/domain/entity/request/StartInviteTripRequestModel.kt
@@ -0,0 +1,9 @@
+package com.going.domain.entity.request
+
+data class StartInviteTripRequestModel(
+ val styleA: Int,
+ val styleB: Int,
+ val styleC: Int,
+ val styleD: Int,
+ val styleE: Int,
+)
diff --git a/domain/src/main/kotlin/com/going/domain/entity/response/StartInviteTripModel.kt b/domain/src/main/kotlin/com/going/domain/entity/response/StartInviteTripModel.kt
new file mode 100644
index 00000000..915e8807
--- /dev/null
+++ b/domain/src/main/kotlin/com/going/domain/entity/response/StartInviteTripModel.kt
@@ -0,0 +1,5 @@
+package com.going.domain.entity.response
+
+data class StartInviteTripModel(
+ val tripId: Long,
+)
diff --git a/domain/src/main/kotlin/com/going/domain/repository/StartInviteTripRepository.kt b/domain/src/main/kotlin/com/going/domain/repository/StartInviteTripRepository.kt
new file mode 100644
index 00000000..8a2ce44e
--- /dev/null
+++ b/domain/src/main/kotlin/com/going/domain/repository/StartInviteTripRepository.kt
@@ -0,0 +1,11 @@
+package com.going.domain.repository
+
+import com.going.domain.entity.request.StartInviteTripRequestModel
+import com.going.domain.entity.response.StartInviteTripModel
+
+interface StartInviteTripRepository {
+ suspend fun postStartInviteTrip(
+ tripId: Long,
+ requestStartInviteTripModel: StartInviteTripRequestModel
+ ): Result
+}
diff --git a/presentation/src/main/java/com/going/presentation/starttrip/StartTripSplashActivity.kt b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/StartTripSplashActivity.kt
similarity index 73%
rename from presentation/src/main/java/com/going/presentation/starttrip/StartTripSplashActivity.kt
rename to presentation/src/main/java/com/going/presentation/entertrip/starttrip/StartTripSplashActivity.kt
index 7e220671..5002b86f 100644
--- a/presentation/src/main/java/com/going/presentation/starttrip/StartTripSplashActivity.kt
+++ b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/StartTripSplashActivity.kt
@@ -1,10 +1,11 @@
-package com.going.presentation.starttrip
+package com.going.presentation.entertrip.starttrip
import android.content.Intent
import android.os.Bundle
import com.going.presentation.R
import com.going.presentation.databinding.ActivityStartTripSplashBinding
-import com.going.presentation.starttrip.createtrip.CreateTripActivity
+import com.going.presentation.entertrip.starttrip.createtrip.EnterTripActivity
+import com.going.presentation.entertrip.starttrip.invitetrip.CreateTripActivity
import com.going.ui.base.BaseActivity
import com.going.ui.extension.setOnSingleClickListener
@@ -28,7 +29,10 @@ class StartTripSplashActivity :
private fun initEnterTripBtnClickListener() {
binding.btnStartTripSplashEnterTrip.setOnSingleClickListener {
- //초대 코드 받아서 여행 입장하는 액티비티로 연결
+ Intent(this, EnterTripActivity::class.java).apply {
+ startActivity(this)
+ }
+ finish()
}
}
-}
\ No newline at end of file
+}
diff --git a/presentation/src/main/java/com/going/presentation/starttrip/createtrip/BottomSheetDateContentFragment.kt b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/BottomSheetDateContentFragment.kt
similarity index 91%
rename from presentation/src/main/java/com/going/presentation/starttrip/createtrip/BottomSheetDateContentFragment.kt
rename to presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/BottomSheetDateContentFragment.kt
index f32c99be..2383950f 100644
--- a/presentation/src/main/java/com/going/presentation/starttrip/createtrip/BottomSheetDateContentFragment.kt
+++ b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/BottomSheetDateContentFragment.kt
@@ -1,15 +1,16 @@
-package com.going.presentation.starttrip.createtrip
+package com.going.presentation.entertrip.starttrip.createtrip
import android.os.Bundle
import android.view.View
import com.going.presentation.R
import com.going.presentation.databinding.FragmentBottomSheetDateContentBinding
+import com.going.presentation.entertrip.starttrip.invitetrip.CreateTripViewModel
import com.going.ui.base.BaseBottomSheet
import com.going.ui.extension.setOnSingleClickListener
import com.going.ui.extension.toast
import java.util.Calendar
-class DateBottomSheet(val viewModel: CreateTripViewModel, val isStart: Boolean) :
+class BottomSheetDateContentFragment(val viewModel: CreateTripViewModel, val isStart: Boolean) :
BaseBottomSheet(R.layout.fragment_bottom_sheet_date_content) {
override fun onStart() {
@@ -62,4 +63,4 @@ class DateBottomSheet(val viewModel: CreateTripViewModel, val isStart: Boolean)
}
}
}
-}
\ No newline at end of file
+}
diff --git a/presentation/src/main/java/com/going/presentation/preferencetag/entertrip/EnterPreferenceActivity.kt b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/EnterPreferenceActivity.kt
similarity index 81%
rename from presentation/src/main/java/com/going/presentation/preferencetag/entertrip/EnterPreferenceActivity.kt
rename to presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/EnterPreferenceActivity.kt
index b212d458..9fe6e946 100644
--- a/presentation/src/main/java/com/going/presentation/preferencetag/entertrip/EnterPreferenceActivity.kt
+++ b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/EnterPreferenceActivity.kt
@@ -1,4 +1,4 @@
-package com.going.presentation.preferencetag.entertrip
+package com.going.presentation.entertrip.starttrip.createtrip
import android.os.Bundle
import androidx.activity.viewModels
@@ -9,13 +9,13 @@ import com.going.presentation.databinding.ActivityEnterPreferenceBinding
import com.going.presentation.preferencetag.PreferenceTagAdapter
import com.going.presentation.preferencetag.PreferenceTagDecoration
import com.going.presentation.preferencetag.PreferenceTagViewModel
-import com.going.presentation.starttrip.createtrip.CreateTripActivity.Companion.END_DAY
-import com.going.presentation.starttrip.createtrip.CreateTripActivity.Companion.END_MONTH
-import com.going.presentation.starttrip.createtrip.CreateTripActivity.Companion.END_YEAR
-import com.going.presentation.starttrip.createtrip.CreateTripActivity.Companion.NAME
-import com.going.presentation.starttrip.createtrip.CreateTripActivity.Companion.START_DAY
-import com.going.presentation.starttrip.createtrip.CreateTripActivity.Companion.START_MONTH
-import com.going.presentation.starttrip.createtrip.CreateTripActivity.Companion.START_YEAR
+import com.going.presentation.entertrip.starttrip.invitetrip.CreateTripActivity.Companion.END_DAY
+import com.going.presentation.entertrip.starttrip.invitetrip.CreateTripActivity.Companion.END_MONTH
+import com.going.presentation.entertrip.starttrip.invitetrip.CreateTripActivity.Companion.END_YEAR
+import com.going.presentation.entertrip.starttrip.invitetrip.CreateTripActivity.Companion.NAME
+import com.going.presentation.entertrip.starttrip.invitetrip.CreateTripActivity.Companion.START_DAY
+import com.going.presentation.entertrip.starttrip.invitetrip.CreateTripActivity.Companion.START_MONTH
+import com.going.presentation.entertrip.starttrip.invitetrip.CreateTripActivity.Companion.START_YEAR
import com.going.ui.base.BaseActivity
import com.going.ui.extension.setOnSingleClickListener
@@ -107,4 +107,4 @@ class EnterPreferenceActivity :
companion object {
const val SERVER_DATE = "%s.%s.%s"
}
-}
\ No newline at end of file
+}
diff --git a/presentation/src/main/java/com/going/presentation/enter/entertrip/EnterTripActivity.kt b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/EnterTripActivity.kt
similarity index 92%
rename from presentation/src/main/java/com/going/presentation/enter/entertrip/EnterTripActivity.kt
rename to presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/EnterTripActivity.kt
index 54940ff6..6f2c7ac4 100644
--- a/presentation/src/main/java/com/going/presentation/enter/entertrip/EnterTripActivity.kt
+++ b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/EnterTripActivity.kt
@@ -1,4 +1,4 @@
-package com.going.presentation.enter.entertrip
+package com.going.presentation.entertrip.starttrip.createtrip
import android.content.Intent
import android.os.Bundle
@@ -10,8 +10,8 @@ import androidx.lifecycle.lifecycleScope
import com.going.domain.entity.CodeState
import com.going.presentation.R
import com.going.presentation.databinding.ActivityEnterTripBinding
-import com.going.presentation.enter.invitefinish.InviteFinishActivity
-import com.going.presentation.starttrip.StartTripSplashActivity
+import com.going.presentation.entertrip.starttrip.invitetrip.InviteFinishActivity
+import com.going.presentation.entertrip.starttrip.StartTripSplashActivity
import com.going.ui.base.BaseActivity
import com.going.ui.extension.UiState
import com.going.ui.extension.setOnSingleClickListener
@@ -92,6 +92,7 @@ class EnterTripActivity : BaseActivity(R.layout.activi
is UiState.Success -> {
Intent(this, InviteFinishActivity::class.java).apply {
+ putExtra(TRIP_ID, state.data.tripId)
putExtra(TITLE, state.data.title)
putExtra(START, state.data.startDate)
putExtra(END, state.data.endDate)
@@ -118,6 +119,7 @@ class EnterTripActivity : BaseActivity(R.layout.activi
}
companion object {
+ const val TRIP_ID = "tripId"
const val TITLE = "title"
const val START = "start"
const val END = "end"
diff --git a/presentation/src/main/java/com/going/presentation/enter/entertrip/EnterTripViewModel.kt b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/EnterTripViewModel.kt
similarity index 94%
rename from presentation/src/main/java/com/going/presentation/enter/entertrip/EnterTripViewModel.kt
rename to presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/EnterTripViewModel.kt
index 975aaa15..9a5f5639 100644
--- a/presentation/src/main/java/com/going/presentation/enter/entertrip/EnterTripViewModel.kt
+++ b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/EnterTripViewModel.kt
@@ -1,4 +1,4 @@
-package com.going.presentation.enter.entertrip
+package com.going.presentation.entertrip.starttrip.createtrip
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
@@ -52,8 +52,8 @@ class EnterTripViewModel @Inject constructor(
viewModelScope.launch {
enterTripRepository.postEnterTrip(
EnterTripRequestModel(inviteCode.value ?: "")
- ).onSuccess { result ->
- _tripState.value = UiState.Success(result)
+ ).onSuccess {
+ _tripState.value = UiState.Success(it)
}.onFailure {
_tripState.value = UiState.Failure(it.message.orEmpty())
}
diff --git a/presentation/src/main/java/com/going/presentation/starttrip/finishtrip/FinishTripActivity.kt b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/FinishTripActivity.kt
similarity index 94%
rename from presentation/src/main/java/com/going/presentation/starttrip/finishtrip/FinishTripActivity.kt
rename to presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/FinishTripActivity.kt
index 6e11bf5c..e443b854 100644
--- a/presentation/src/main/java/com/going/presentation/starttrip/finishtrip/FinishTripActivity.kt
+++ b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/FinishTripActivity.kt
@@ -1,4 +1,4 @@
-package com.going.presentation.starttrip.finishtrip
+package com.going.presentation.entertrip.starttrip.createtrip
import android.content.ClipData
import android.content.ClipboardManager
@@ -8,7 +8,6 @@ import android.os.Bundle
import androidx.activity.viewModels
import com.going.presentation.R
import com.going.presentation.databinding.ActivityFinishTripBinding
-import com.going.presentation.preferencetag.entertrip.EnterPreferenceActivity
import com.going.ui.base.BaseActivity
import com.going.ui.extension.setOnSingleClickListener
diff --git a/presentation/src/main/java/com/going/presentation/starttrip/finishtrip/FinishTripViewModel.kt b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/FinishTripViewModel.kt
similarity index 64%
rename from presentation/src/main/java/com/going/presentation/starttrip/finishtrip/FinishTripViewModel.kt
rename to presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/FinishTripViewModel.kt
index c356ba8d..77c77819 100644
--- a/presentation/src/main/java/com/going/presentation/starttrip/finishtrip/FinishTripViewModel.kt
+++ b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/createtrip/FinishTripViewModel.kt
@@ -1,4 +1,4 @@
-package com.going.presentation.starttrip.finishtrip
+package com.going.presentation.entertrip.starttrip.createtrip
import androidx.lifecycle.ViewModel
diff --git a/presentation/src/main/java/com/going/presentation/starttrip/createtrip/CreateTripActivity.kt b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/invitetrip/CreateTripActivity.kt
similarity index 91%
rename from presentation/src/main/java/com/going/presentation/starttrip/createtrip/CreateTripActivity.kt
rename to presentation/src/main/java/com/going/presentation/entertrip/starttrip/invitetrip/CreateTripActivity.kt
index accfc4c7..e213ef53 100644
--- a/presentation/src/main/java/com/going/presentation/starttrip/createtrip/CreateTripActivity.kt
+++ b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/invitetrip/CreateTripActivity.kt
@@ -1,4 +1,4 @@
-package com.going.presentation.starttrip.createtrip
+package com.going.presentation.entertrip.starttrip.invitetrip
import android.content.Intent
import android.os.Bundle
@@ -8,8 +8,9 @@ import androidx.core.content.res.ResourcesCompat
import com.going.domain.entity.NameState
import com.going.presentation.R
import com.going.presentation.databinding.ActivityCreateTripBinding
-import com.going.presentation.preferencetag.entertrip.EnterPreferenceActivity
-import com.going.presentation.starttrip.StartTripSplashActivity
+import com.going.presentation.entertrip.starttrip.StartTripSplashActivity
+import com.going.presentation.entertrip.starttrip.createtrip.BottomSheetDateContentFragment
+import com.going.presentation.entertrip.starttrip.createtrip.EnterPreferenceActivity
import com.going.ui.base.BaseActivity
import com.going.ui.extension.setOnSingleClickListener
@@ -17,8 +18,8 @@ class CreateTripActivity :
BaseActivity(R.layout.activity_create_trip) {
private val viewModel by viewModels()
- private lateinit var startBottomSheetDialog: DateBottomSheet
- private lateinit var endBottomSheetDialog: DateBottomSheet
+ private lateinit var startBottomSheetDialog: BottomSheetDateContentFragment
+ private lateinit var endBottomSheetDialog: BottomSheetDateContentFragment
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -161,14 +162,14 @@ class CreateTripActivity :
private fun initStartDateClickListener() {
binding.tvCreateTripStartDate.setOnSingleClickListener {
- startBottomSheetDialog = DateBottomSheet(viewModel, true)
+ startBottomSheetDialog = BottomSheetDateContentFragment(viewModel, true)
startBottomSheetDialog.show(supportFragmentManager, startBottomSheetDialog.tag)
}
}
private fun initEndDateClickListener() {
binding.tvCreateTripEndDate.setOnSingleClickListener {
- endBottomSheetDialog = DateBottomSheet(viewModel, false)
+ endBottomSheetDialog = BottomSheetDateContentFragment(viewModel, false)
endBottomSheetDialog.show(supportFragmentManager, endBottomSheetDialog.tag)
}
}
diff --git a/presentation/src/main/java/com/going/presentation/starttrip/createtrip/CreateTripViewModel.kt b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/invitetrip/CreateTripViewModel.kt
similarity index 97%
rename from presentation/src/main/java/com/going/presentation/starttrip/createtrip/CreateTripViewModel.kt
rename to presentation/src/main/java/com/going/presentation/entertrip/starttrip/invitetrip/CreateTripViewModel.kt
index ec07838e..7052f6ef 100644
--- a/presentation/src/main/java/com/going/presentation/starttrip/createtrip/CreateTripViewModel.kt
+++ b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/invitetrip/CreateTripViewModel.kt
@@ -1,4 +1,4 @@
-package com.going.presentation.starttrip.createtrip
+package com.going.presentation.entertrip.starttrip.invitetrip
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
diff --git a/presentation/src/main/java/com/going/presentation/entertrip/starttrip/invitetrip/FinishPreferenceActivity.kt b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/invitetrip/FinishPreferenceActivity.kt
new file mode 100644
index 00000000..073c2080
--- /dev/null
+++ b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/invitetrip/FinishPreferenceActivity.kt
@@ -0,0 +1,127 @@
+package com.going.presentation.entertrip.starttrip.invitetrip
+
+import android.content.Intent
+import android.os.Bundle
+import androidx.activity.viewModels
+import androidx.core.content.ContextCompat
+import androidx.lifecycle.flowWithLifecycle
+import androidx.lifecycle.lifecycleScope
+import com.going.domain.entity.PreferenceData
+import com.going.presentation.R
+import com.going.presentation.dashboard.DashBoardActivity
+import com.going.presentation.databinding.ActivityFinishPreferenceBinding
+import com.going.presentation.preferencetag.PreferenceTagAdapter
+import com.going.presentation.preferencetag.PreferenceTagDecoration
+import com.going.ui.base.BaseActivity
+import com.going.ui.extension.UiState
+import com.going.ui.extension.setOnSingleClickListener
+import com.going.ui.extension.toast
+import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+
+@AndroidEntryPoint
+class FinishPreferenceActivity :
+ BaseActivity(R.layout.activity_finish_preference),
+ PreferenceTagAdapter.OnPreferenceSelectedListener {
+
+ private var _adapter: PreferenceTagAdapter? = null
+ private val adapter get() = requireNotNull(_adapter) { getString(R.string.adapter_not_initialized_error_msg) }
+
+ private val viewModel by viewModels()
+
+ private val preferenceAnswers = MutableList(5) { Int.MAX_VALUE }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ initAdapter()
+ initItemDecoration()
+ getTripId()
+ initBackClickListener()
+ initNextBtnClickListener()
+ sendStyleInfo()
+ observeFinishPreferenceState()
+ }
+
+ private fun initAdapter() {
+ _adapter = PreferenceTagAdapter(this, this)
+ binding.rvPreferenceTag.adapter = adapter
+ adapter.submitList(viewModel.preferenceTagList)
+ }
+
+ private fun initItemDecoration() {
+ val itemDeco = PreferenceTagDecoration(this)
+ binding.rvPreferenceTag.addItemDecoration(itemDeco)
+ }
+
+ private fun getTripId() {
+ val intent = getIntent()
+ viewModel.tripId.value = intent.getLongExtra("tripId", -1L)
+ }
+
+ private fun initBackClickListener() {
+ binding.btnPreferenceBack.setOnSingleClickListener {
+ Intent(this, InviteFinishActivity::class.java).apply {
+ startActivity(this)
+ }
+ finish()
+ }
+ }
+
+ private fun isButtonValid() {
+ val isValid = preferenceAnswers.all { it != Int.MAX_VALUE }
+
+ if (isValid) {
+ binding.btnPreferenceStart.isEnabled = isValid
+ binding.btnPreferenceStart.setTextColor(
+ ContextCompat.getColorStateList(this, R.color.white_000)
+ )
+ }
+ }
+
+ private fun observeFinishPreferenceState() {
+ viewModel.finishInviteState.flowWithLifecycle(lifecycle).onEach { state ->
+ when (state) {
+ is UiState.Success -> navigatetoDashBoard()
+ is UiState.Failure -> {
+ toast(getString(R.string.server_error))
+ }
+
+ is UiState.Loading -> return@onEach
+ is UiState.Empty -> return@onEach
+ }
+ }.launchIn(lifecycleScope)
+ }
+
+ private fun navigatetoDashBoard() {
+ Intent(this, DashBoardActivity::class.java).apply {
+ startActivity(this)
+ }
+ }
+
+ private fun initNextBtnClickListener() {
+ binding.btnPreferenceStart.setOnSingleClickListener {
+ viewModel.checkStyleFromServer(viewModel.tripId.value ?: 0)
+ }
+ }
+
+ private fun sendStyleInfo() {
+ viewModel.styleA.value = preferenceAnswers[0]
+ viewModel.styleB.value = preferenceAnswers[1]
+ viewModel.styleC.value = preferenceAnswers[2]
+ viewModel.styleD.value = preferenceAnswers[3]
+ viewModel.styleE.value = preferenceAnswers[4]
+ }
+
+ override fun onPreferenceSelected(item: PreferenceData, checkList: Int) {
+ preferenceAnswers[item.number.toInt() - 1] = checkList
+ isButtonValid()
+ sendStyleInfo()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ _adapter = null
+ }
+}
diff --git a/presentation/src/main/java/com/going/presentation/entertrip/starttrip/invitetrip/FinishPreferenceViewModel.kt b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/invitetrip/FinishPreferenceViewModel.kt
new file mode 100644
index 00000000..345de57f
--- /dev/null
+++ b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/invitetrip/FinishPreferenceViewModel.kt
@@ -0,0 +1,91 @@
+package com.going.presentation.entertrip.starttrip.invitetrip
+
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.going.domain.entity.PreferenceData
+import com.going.domain.entity.request.StartInviteTripRequestModel
+import com.going.domain.entity.response.StartInviteTripModel
+import com.going.domain.repository.StartInviteTripRepository
+import com.going.ui.extension.UiState
+import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.launch
+import javax.inject.Inject
+
+@HiltViewModel
+class FinishPreferenceViewModel @Inject constructor(
+ private val startInviteTripRepository: StartInviteTripRepository
+) : ViewModel() {
+
+ private val _finishInviteState =
+ MutableStateFlow>(UiState.Empty)
+ val finishInviteState: StateFlow> = _finishInviteState
+
+ var tripId = MutableLiveData()
+
+ val styleA = MutableLiveData(0)
+ val styleB = MutableLiveData(0)
+ val styleC = MutableLiveData(0)
+ val styleD = MutableLiveData(0)
+ val styleE = MutableLiveData(0)
+
+
+ fun checkStyleFromServer(tripId: Long) {
+ _finishInviteState.value = UiState.Loading
+ viewModelScope.launch {
+ startInviteTripRepository.postStartInviteTrip(
+ tripId,
+ StartInviteTripRequestModel(
+ styleA.value ?: 0,
+ styleB.value ?: 0,
+ styleC.value ?: 0,
+ styleD.value ?: 0,
+ styleE.value ?: 0
+ )
+ )
+ .onSuccess {
+ _finishInviteState.value = UiState.Success(it)
+ }.onFailure {
+ _finishInviteState.value = UiState.Failure(it.message.orEmpty())
+ }
+ }
+ }
+
+
+ val preferenceTagList = listOf(
+ PreferenceData(
+ number = "01",
+ question = "계획은 어느정도로 세울까요?",
+ leftPrefer = "철저하게",
+ rightPrefer = "즉흥으로"
+ ),
+ PreferenceData(
+ number = "02",
+ question = "장소선택의 기준은 무엇인가요?",
+ leftPrefer = "관광지",
+ rightPrefer = "로컬장소"
+ ),
+ PreferenceData(
+ number = "03",
+ question = "어느 식당을 갈까요?",
+ leftPrefer = "유명 맛집",
+ rightPrefer = "가까운 곳"
+ ),
+ PreferenceData(
+ number = "04",
+ question = "기억하고 싶은 순간에!",
+ leftPrefer = "사진 필수",
+ rightPrefer = "눈에 담기"
+ ),
+ PreferenceData(
+ number = "05",
+ question = "하루 일정을 어떻게 채우나요?",
+ leftPrefer = "알차게",
+ rightPrefer = "여유롭게"
+ ),
+ )
+
+}
+
diff --git a/presentation/src/main/java/com/going/presentation/enter/invitefinish/InviteFinishActivity.kt b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/invitetrip/InviteFinishActivity.kt
similarity index 69%
rename from presentation/src/main/java/com/going/presentation/enter/invitefinish/InviteFinishActivity.kt
rename to presentation/src/main/java/com/going/presentation/entertrip/starttrip/invitetrip/InviteFinishActivity.kt
index b7acc8aa..68599c16 100644
--- a/presentation/src/main/java/com/going/presentation/enter/invitefinish/InviteFinishActivity.kt
+++ b/presentation/src/main/java/com/going/presentation/entertrip/starttrip/invitetrip/InviteFinishActivity.kt
@@ -1,15 +1,15 @@
-package com.going.presentation.enter.invitefinish
+package com.going.presentation.entertrip.starttrip.invitetrip
import android.content.Intent
import android.os.Bundle
import com.going.presentation.R
import com.going.presentation.databinding.ActivityInviteFinishBinding
-import com.going.presentation.enter.entertrip.EnterTripActivity
-import com.going.presentation.enter.entertrip.EnterTripActivity.Companion.DAY
-import com.going.presentation.enter.entertrip.EnterTripActivity.Companion.END
-import com.going.presentation.enter.entertrip.EnterTripActivity.Companion.START
-import com.going.presentation.enter.entertrip.EnterTripActivity.Companion.TITLE
-import com.going.presentation.preferencetag.entertrip.EnterPreferenceActivity
+import com.going.presentation.entertrip.starttrip.createtrip.EnterTripActivity
+import com.going.presentation.entertrip.starttrip.createtrip.EnterTripActivity.Companion.DAY
+import com.going.presentation.entertrip.starttrip.createtrip.EnterTripActivity.Companion.END
+import com.going.presentation.entertrip.starttrip.createtrip.EnterTripActivity.Companion.START
+import com.going.presentation.entertrip.starttrip.createtrip.EnterTripActivity.Companion.TITLE
+import com.going.presentation.entertrip.starttrip.createtrip.EnterTripActivity.Companion.TRIP_ID
import com.going.ui.base.BaseActivity
import com.going.ui.extension.setOnSingleClickListener
import dagger.hilt.android.AndroidEntryPoint
@@ -19,6 +19,8 @@ import dagger.hilt.android.AndroidEntryPoint
class InviteFinishActivity :
BaseActivity(R.layout.activity_invite_finish) {
+ private var tripId: Long = -1L
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -32,6 +34,7 @@ class InviteFinishActivity :
val serverlist = getIntent()
if (serverlist != null) {
+ tripId = intent.getLongExtra(TRIP_ID, -1L)
val title = intent.getStringExtra(TITLE)
val start = intent.getStringExtra(START)
val end = intent.getStringExtra(END)
@@ -48,6 +51,7 @@ class InviteFinishActivity :
}
}
+
private fun initBackBtnClickListener() {
binding.btnInviteFinishBack.setOnSingleClickListener {
Intent(this, EnterTripActivity::class.java).apply {
@@ -58,7 +62,8 @@ class InviteFinishActivity :
private fun initEnterBtnClickListener() {
binding.btnInviteFinishEnter.setOnSingleClickListener {
- Intent(this, EnterPreferenceActivity::class.java).apply {
+ Intent(this, FinishPreferenceActivity::class.java).apply {
+ putExtra(TRIP_ID, tripId)
startActivity(this)
}
}
@@ -69,7 +74,5 @@ class InviteFinishActivity :
const val D_DAY_FORMAT = "D - %d"
const val TRIP_FORMAT = "여행중"
}
-
-
}
diff --git a/presentation/src/main/java/com/going/presentation/preferencetag/PreferenceTagViewModel.kt b/presentation/src/main/java/com/going/presentation/preferencetag/PreferenceTagViewModel.kt
index 158dab8e..b3fbe2ee 100644
--- a/presentation/src/main/java/com/going/presentation/preferencetag/PreferenceTagViewModel.kt
+++ b/presentation/src/main/java/com/going/presentation/preferencetag/PreferenceTagViewModel.kt
@@ -5,6 +5,7 @@ import com.going.domain.entity.PreferenceData
class PreferenceTagViewModel : ViewModel() {
+ // 추후 삭제할 예정
val preferenceTagList = listOf(
PreferenceData(
number = "01",
@@ -38,4 +39,4 @@ class PreferenceTagViewModel : ViewModel() {
),
)
-}
\ No newline at end of file
+}
diff --git a/presentation/src/main/java/com/going/presentation/preferencetag/invitefinish/FinishPreferenceActivity.kt b/presentation/src/main/java/com/going/presentation/preferencetag/invitefinish/FinishPreferenceActivity.kt
deleted file mode 100644
index b53f3e57..00000000
--- a/presentation/src/main/java/com/going/presentation/preferencetag/invitefinish/FinishPreferenceActivity.kt
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.going.presentation.preferencetag.invitefinish
-
-import android.os.Bundle
-import androidx.activity.viewModels
-import com.going.domain.entity.PreferenceData
-import com.going.presentation.R
-import com.going.presentation.databinding.ActivityFinishPreferenceBinding
-import com.going.presentation.preferencetag.PreferenceTagAdapter
-import com.going.presentation.preferencetag.PreferenceTagDecoration
-import com.going.presentation.preferencetag.PreferenceTagViewModel
-import com.going.ui.base.BaseActivity
-import com.going.ui.extension.setOnSingleClickListener
-
-class FinishPreferenceActivity :
- BaseActivity(R.layout.activity_finish_preference),
- PreferenceTagAdapter.OnPreferenceSelectedListener {
-
- private var _adapter: PreferenceTagAdapter? = null
- private val adapter get() = requireNotNull(_adapter) { getString(R.string.adapter_not_initialized_error_msg) }
-
- private val viewModel by viewModels()
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
-
- initAdapter()
- initItemDecoration()
- initBackClickListener()
-
- }
-
- private fun initAdapter() {
- _adapter = PreferenceTagAdapter(this, this)
- binding.rvPreferenceTag.adapter = adapter
- adapter.submitList(viewModel.preferenceTagList)
- }
-
- private fun initItemDecoration() {
- val itemDeco = PreferenceTagDecoration(this)
- binding.rvPreferenceTag.addItemDecoration(itemDeco)
- }
-
- private fun initBackClickListener() {
- binding.btnPreferenceBack.setOnSingleClickListener {
- finish()
- }
- }
-
- override fun onPreferenceSelected(item: PreferenceData, checkList: Int) {
-
- }
-
- override fun onDestroy() {
- super.onDestroy()
- _adapter = null
- }
-}
diff --git a/presentation/src/main/res/layout/activity_create_trip.xml b/presentation/src/main/res/layout/activity_create_trip.xml
index 8a09c453..03a5fed3 100644
--- a/presentation/src/main/res/layout/activity_create_trip.xml
+++ b/presentation/src/main/res/layout/activity_create_trip.xml
@@ -11,14 +11,14 @@
+ type="com.going.presentation.entertrip.starttrip.invitetrip.CreateTripViewModel" />
+ tools:context=".entertrip.starttrip.invitetrip.CreateTripActivity">
+ tools:context=".entertrip.starttrip.createtrip.EnterPreferenceActivity">
+ type="com.going.presentation.entertrip.starttrip.createtrip.EnterTripViewModel" />
+ tools:context=".entertrip.starttrip.invitetrip.CreateTripActivity">
+ tools:context=".entertrip.starttrip.invitetrip.FinishPreferenceActivity">
+ type="com.going.presentation.entertrip.starttrip.createtrip.FinishTripViewModel" />
+ tools:context=".entertrip.starttrip.createtrip.FinishTripActivity">
+ tools:context=".entertrip.starttrip.invitetrip.InviteFinishActivity">