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">