From a5d69c95c1cc1b677f6e81412447b2ce047bf278 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Thu, 11 Jan 2024 18:19:08 +0900 Subject: [PATCH 01/12] =?UTF-8?q?[FEAT/#73]=20DTO=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=EC=BD=94=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 4 +- .../data/dto/response/DashBoardResponseDto.kt | 28 ++++++ .../DashBoardActivity.kt} | 4 +- .../dashboard/DashBoardViewModel.kt | 94 ++++++++++++++++++ .../DashBoardViewPagerAdapter.kt | 6 +- .../triplist/CompletedAdapter.kt | 2 +- .../triplist/CompletedTripFragment.kt | 6 +- .../triplist/CompletedViewHolder.kt | 2 +- .../triplist/DashBoardDecoration.kt | 2 +- .../triplist/OngoingAdapter.kt | 2 +- .../triplist/OngoingTripFragment.kt | 6 +- .../triplist/OngoingViewHolder.kt | 2 +- .../presentation/setting/SettingActivity.kt | 10 +- .../tripdashboard/TripDashBoardViewModel.kt | 94 ------------------ .../drawable/img_trip_dash_board_empty.png | Bin 0 -> 31166 bytes .../src/main/res/layout/activity_setting.xml | 32 +++--- .../res/layout/activity_trip_dash_board.xml | 2 +- presentation/src/main/res/values/strings.xml | 2 +- 18 files changed, 163 insertions(+), 135 deletions(-) create mode 100644 data/src/main/java/com/going/data/dto/response/DashBoardResponseDto.kt rename presentation/src/main/java/com/going/presentation/{tripdashboard/TripDashBoardActivity.kt => dashboard/DashBoardActivity.kt} (93%) create mode 100644 presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt rename presentation/src/main/java/com/going/presentation/{tripdashboard => dashboard}/DashBoardViewPagerAdapter.kt (70%) rename presentation/src/main/java/com/going/presentation/{tripdashboard => dashboard}/triplist/CompletedAdapter.kt (96%) rename presentation/src/main/java/com/going/presentation/{tripdashboard => dashboard}/triplist/CompletedTripFragment.kt (88%) rename presentation/src/main/java/com/going/presentation/{tripdashboard => dashboard}/triplist/CompletedViewHolder.kt (93%) rename presentation/src/main/java/com/going/presentation/{tripdashboard => dashboard}/triplist/DashBoardDecoration.kt (91%) rename presentation/src/main/java/com/going/presentation/{tripdashboard => dashboard}/triplist/OngoingAdapter.kt (95%) rename presentation/src/main/java/com/going/presentation/{tripdashboard => dashboard}/triplist/OngoingTripFragment.kt (87%) rename presentation/src/main/java/com/going/presentation/{tripdashboard => dashboard}/triplist/OngoingViewHolder.kt (95%) delete mode 100644 presentation/src/main/java/com/going/presentation/tripdashboard/TripDashBoardViewModel.kt create mode 100644 presentation/src/main/res/drawable/img_trip_dash_board_empty.png diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5ca009dc..e44aa1f8 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -80,8 +80,8 @@ android:screenOrientation="portrait" /> + +) { + @Serializable + data class TripsResponseDto( + @SerialName("tripId") + val tripId: Int, + @SerialName("title") + val title: String, + @SerialName("startDate") + val startDate: String, + @SerialName("endDate") + val endDate: String, + @SerialName("day") + val day: Int + ) +} + diff --git a/presentation/src/main/java/com/going/presentation/tripdashboard/TripDashBoardActivity.kt b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt similarity index 93% rename from presentation/src/main/java/com/going/presentation/tripdashboard/TripDashBoardActivity.kt rename to presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt index 658a1cf3..3fd563d3 100644 --- a/presentation/src/main/java/com/going/presentation/tripdashboard/TripDashBoardActivity.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt @@ -1,4 +1,4 @@ -package com.going.presentation.tripdashboard +package com.going.presentation.dashboard import android.os.Bundle import com.going.presentation.R @@ -6,7 +6,7 @@ import com.going.presentation.databinding.ActivityTripDashBoardBinding import com.going.ui.base.BaseActivity import com.google.android.material.tabs.TabLayoutMediator -class TripDashBoardActivity : +class DashBoardActivity : BaseActivity(R.layout.activity_trip_dash_board) { private val tabTextList = listOf(TAB_ONGOING, TAB_COMPLETED) diff --git a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt new file mode 100644 index 00000000..d990c3c6 --- /dev/null +++ b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt @@ -0,0 +1,94 @@ +package com.going.presentation.dashboard + +import androidx.lifecycle.ViewModel +import com.going.domain.entity.response.CompletedListModel +import com.going.domain.entity.response.OngoingListModel + +class DashBoardViewModel : ViewModel() { + +// val mockOngoingList: List = listOf( +// OngoingListModel( +// title = "굉굉이랑 합숙", +// startDate = "2024.01.01", +// endDate = "2024.01.21", +// day = 16 +// ), +// OngoingListModel( +// title = "여행 제목 자리", +// startDate = "2002.09.22", +// endDate = "2005.03.31", +// day = -10 +// ), +// OngoingListModel( +// title = "상호랑 제주도 여행", +// startDate = "2025.03.24", +// endDate = "2025.03.31", +// day = 100 +// ), +// OngoingListModel( +// title = "동민이랑 서울 구경", +// startDate = "2026.03.24", +// endDate = "2026.03.31", +// day = 200 +// ), +// OngoingListModel( +// title = "유빈이랑 부산 여행", +// startDate = "2027.03.24", +// endDate = "2027.03.31", +// day = 300 +// ), +// OngoingListModel( +// title = "세연이랑 바다 구경", +// startDate = "2028.03.24", +// endDate = "2028.03.31", +// day = 400 +// ), +// OngoingListModel( +// title = "솝트랑 MT", +// startDate = "2021.03.24", +// endDate = "2021.03.31", +// day = 0 +// ), +// OngoingListModel( +// title = "굉굉 신년회", +// startDate = "2024.01.02", +// endDate = "2024.01.32", +// day = 0 +// ), +// OngoingListModel( +// title = "안드 단체 여행", +// startDate = "2020.03.24", +// endDate = "2021.03.31", +// day = 100 +// ), +// OngoingListModel( +// title = "두릅", +// startDate = "2003.03.24", +// endDate = "2004.03.31", +// day = 1000 +// ) +// ) +// +// val mockCompletedList: List = listOf( +// CompletedListModel( +// title = "유빈이 생일 파티", +// startDate = "2022.09.22", +// endDate = "2022.09.23" +// ), +// CompletedListModel( +// title = "굉굉이랑 만화 카페", +// startDate = "2024.01.13", +// endDate = "2024.01.23", +// ), +// CompletedListModel( +// title = "굉굉이랑 파스타 먹기", +// startDate = "2024.01.09", +// endDate = "2024.01.09", +// ), +// CompletedListModel( +// title = "굉굉이랑 고기 구워 먹기", +// startDate = "2020.04.10", +// endDate = "2020.04.22", +// ) +// ) +} \ No newline at end of file diff --git a/presentation/src/main/java/com/going/presentation/tripdashboard/DashBoardViewPagerAdapter.kt b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewPagerAdapter.kt similarity index 70% rename from presentation/src/main/java/com/going/presentation/tripdashboard/DashBoardViewPagerAdapter.kt rename to presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewPagerAdapter.kt index 9f121083..a0baf469 100644 --- a/presentation/src/main/java/com/going/presentation/tripdashboard/DashBoardViewPagerAdapter.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewPagerAdapter.kt @@ -1,10 +1,10 @@ -package com.going.presentation.tripdashboard +package com.going.presentation.dashboard import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity import androidx.viewpager2.adapter.FragmentStateAdapter -import com.going.presentation.tripdashboard.triplist.CompletedTripFragment -import com.going.presentation.tripdashboard.triplist.OngoingTripFragment +import com.going.presentation.dashboard.triplist.CompletedTripFragment +import com.going.presentation.dashboard.triplist.OngoingTripFragment class DashBoardViewPagerAdapter(fragment: FragmentActivity) : FragmentStateAdapter(fragment) { override fun getItemCount(): Int = 2 diff --git a/presentation/src/main/java/com/going/presentation/tripdashboard/triplist/CompletedAdapter.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedAdapter.kt similarity index 96% rename from presentation/src/main/java/com/going/presentation/tripdashboard/triplist/CompletedAdapter.kt rename to presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedAdapter.kt index 333c39a9..88cb17f0 100644 --- a/presentation/src/main/java/com/going/presentation/tripdashboard/triplist/CompletedAdapter.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedAdapter.kt @@ -1,4 +1,4 @@ -package com.going.presentation.tripdashboard.triplist +package com.going.presentation.dashboard.triplist import android.view.LayoutInflater import android.view.ViewGroup diff --git a/presentation/src/main/java/com/going/presentation/tripdashboard/triplist/CompletedTripFragment.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt similarity index 88% rename from presentation/src/main/java/com/going/presentation/tripdashboard/triplist/CompletedTripFragment.kt rename to presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt index aa068dc0..8d631e77 100644 --- a/presentation/src/main/java/com/going/presentation/tripdashboard/triplist/CompletedTripFragment.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt @@ -1,4 +1,4 @@ -package com.going.presentation.tripdashboard.triplist +package com.going.presentation.dashboard.triplist import android.os.Bundle import android.view.View @@ -6,14 +6,14 @@ import androidx.fragment.app.activityViewModels import com.going.domain.entity.response.CompletedListModel import com.going.presentation.R import com.going.presentation.databinding.FragmentCompletedTripBinding -import com.going.presentation.tripdashboard.TripDashBoardViewModel +import com.going.presentation.dashboard.DashBoardViewModel import com.going.ui.base.BaseFragment class CompletedTripFragment : BaseFragment(R.layout.fragment_completed_trip), CompletedAdapter.OnDashBoardSelectedListener { - private val viewModel by activityViewModels() + private val viewModel by activityViewModels() private var _adapter: CompletedAdapter? = null private val adapter get() = requireNotNull(_adapter) { getString(R.string.adapter_not_initialized_error_msg) } diff --git a/presentation/src/main/java/com/going/presentation/tripdashboard/triplist/CompletedViewHolder.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedViewHolder.kt similarity index 93% rename from presentation/src/main/java/com/going/presentation/tripdashboard/triplist/CompletedViewHolder.kt rename to presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedViewHolder.kt index 8d38ed17..ada45b91 100644 --- a/presentation/src/main/java/com/going/presentation/tripdashboard/triplist/CompletedViewHolder.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedViewHolder.kt @@ -1,4 +1,4 @@ -package com.going.presentation.tripdashboard.triplist +package com.going.presentation.dashboard.triplist import androidx.recyclerview.widget.RecyclerView import com.going.domain.entity.response.CompletedListModel diff --git a/presentation/src/main/java/com/going/presentation/tripdashboard/triplist/DashBoardDecoration.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/DashBoardDecoration.kt similarity index 91% rename from presentation/src/main/java/com/going/presentation/tripdashboard/triplist/DashBoardDecoration.kt rename to presentation/src/main/java/com/going/presentation/dashboard/triplist/DashBoardDecoration.kt index 7679064a..a119978a 100644 --- a/presentation/src/main/java/com/going/presentation/tripdashboard/triplist/DashBoardDecoration.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/DashBoardDecoration.kt @@ -1,4 +1,4 @@ -package com.going.presentation.tripdashboard.triplist +package com.going.presentation.dashboard.triplist import android.content.Context import android.graphics.Rect diff --git a/presentation/src/main/java/com/going/presentation/tripdashboard/triplist/OngoingAdapter.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingAdapter.kt similarity index 95% rename from presentation/src/main/java/com/going/presentation/tripdashboard/triplist/OngoingAdapter.kt rename to presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingAdapter.kt index f08cb98d..d3dc4a2f 100644 --- a/presentation/src/main/java/com/going/presentation/tripdashboard/triplist/OngoingAdapter.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingAdapter.kt @@ -1,4 +1,4 @@ -package com.going.presentation.tripdashboard.triplist +package com.going.presentation.dashboard.triplist import android.view.LayoutInflater import android.view.ViewGroup diff --git a/presentation/src/main/java/com/going/presentation/tripdashboard/triplist/OngoingTripFragment.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt similarity index 87% rename from presentation/src/main/java/com/going/presentation/tripdashboard/triplist/OngoingTripFragment.kt rename to presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt index 053bc6d5..188e6162 100644 --- a/presentation/src/main/java/com/going/presentation/tripdashboard/triplist/OngoingTripFragment.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt @@ -1,4 +1,4 @@ -package com.going.presentation.tripdashboard.triplist +package com.going.presentation.dashboard.triplist import android.os.Bundle import android.view.View @@ -6,14 +6,14 @@ import androidx.fragment.app.activityViewModels import com.going.domain.entity.response.OngoingListModel import com.going.presentation.R import com.going.presentation.databinding.FragmentOngoingTripBinding -import com.going.presentation.tripdashboard.TripDashBoardViewModel +import com.going.presentation.dashboard.DashBoardViewModel import com.going.ui.base.BaseFragment class OngoingTripFragment : BaseFragment(R.layout.fragment_ongoing_trip), OngoingAdapter.OnDashBoardSelectedListener { - private val viewModel by activityViewModels() + private val viewModel by activityViewModels() private var _adapter: OngoingAdapter? = null private val adapter get() = requireNotNull(_adapter) { getString(R.string.adapter_not_initialized_error_msg) } diff --git a/presentation/src/main/java/com/going/presentation/tripdashboard/triplist/OngoingViewHolder.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingViewHolder.kt similarity index 95% rename from presentation/src/main/java/com/going/presentation/tripdashboard/triplist/OngoingViewHolder.kt rename to presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingViewHolder.kt index c83928dd..18c933f3 100644 --- a/presentation/src/main/java/com/going/presentation/tripdashboard/triplist/OngoingViewHolder.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingViewHolder.kt @@ -1,4 +1,4 @@ -package com.going.presentation.tripdashboard.triplist +package com.going.presentation.dashboard.triplist import androidx.recyclerview.widget.RecyclerView import com.going.domain.entity.response.OngoingListModel diff --git a/presentation/src/main/java/com/going/presentation/setting/SettingActivity.kt b/presentation/src/main/java/com/going/presentation/setting/SettingActivity.kt index 2e4ca739..f64dac23 100644 --- a/presentation/src/main/java/com/going/presentation/setting/SettingActivity.kt +++ b/presentation/src/main/java/com/going/presentation/setting/SettingActivity.kt @@ -25,31 +25,31 @@ class SettingActivity : BaseActivity(R.layout.activity_s } private fun initProfileClickListener() { - binding.layoutSettingProfile.setOnSingleClickListener { + binding.btnSettingProfile.setOnSingleClickListener { } } private fun initInquireClickListener() { - binding.layoutSettingInquire.setOnSingleClickListener { + binding.btnSettingInquire.setOnSingleClickListener { } } private fun initPolicyClickListener() { - binding.layoutSettingPolicy.setOnSingleClickListener { + binding.btnSettingPolicy.setOnSingleClickListener { } } private fun initAboutDooripClickListener() { - binding.layoutSettingAboutDoorip.setOnSingleClickListener { + binding.btnSettingAboutDoorip.setOnSingleClickListener { } } private fun initLogoutClickListener() { - binding.layoutSettingLogout.setOnSingleClickListener { + binding.btnSettingLogout.setOnSingleClickListener { showLogoutAlertDialog() } } diff --git a/presentation/src/main/java/com/going/presentation/tripdashboard/TripDashBoardViewModel.kt b/presentation/src/main/java/com/going/presentation/tripdashboard/TripDashBoardViewModel.kt deleted file mode 100644 index 996c1103..00000000 --- a/presentation/src/main/java/com/going/presentation/tripdashboard/TripDashBoardViewModel.kt +++ /dev/null @@ -1,94 +0,0 @@ -package com.going.presentation.tripdashboard - -import androidx.lifecycle.ViewModel -import com.going.domain.entity.response.CompletedListModel -import com.going.domain.entity.response.OngoingListModel - -class TripDashBoardViewModel : ViewModel() { - - val mockOngoingList: List = listOf( - OngoingListModel( - title = "굉굉이랑 합숙", - startDate = "2024.01.01", - endDate = "2024.01.21", - day = 16 - ), - OngoingListModel( - title = "여행 제목 자리", - startDate = "2002.09.22", - endDate = "2005.03.31", - day = -10 - ), - OngoingListModel( - title = "상호랑 제주도 여행", - startDate = "2025.03.24", - endDate = "2025.03.31", - day = 100 - ), - OngoingListModel( - title = "동민이랑 서울 구경", - startDate = "2026.03.24", - endDate = "2026.03.31", - day = 200 - ), - OngoingListModel( - title = "유빈이랑 부산 여행", - startDate = "2027.03.24", - endDate = "2027.03.31", - day = 300 - ), - OngoingListModel( - title = "세연이랑 바다 구경", - startDate = "2028.03.24", - endDate = "2028.03.31", - day = 400 - ), - OngoingListModel( - title = "솝트랑 MT", - startDate = "2021.03.24", - endDate = "2021.03.31", - day = 0 - ), - OngoingListModel( - title = "굉굉 신년회", - startDate = "2024.01.02", - endDate = "2024.01.32", - day = 0 - ), - OngoingListModel( - title = "안드 단체 여행", - startDate = "2020.03.24", - endDate = "2021.03.31", - day = 100 - ), - OngoingListModel( - title = "두릅", - startDate = "2003.03.24", - endDate = "2004.03.31", - day = 1000 - ) - ) - - val mockCompletedList: List = listOf( - CompletedListModel( - title = "유빈이 생일 파티", - startDate = "2022.09.22", - endDate = "2022.09.23" - ), - CompletedListModel( - title = "굉굉이랑 만화 카페", - startDate = "2024.01.13", - endDate = "2024.01.23", - ), - CompletedListModel( - title = "굉굉이랑 파스타 먹기", - startDate = "2024.01.09", - endDate = "2024.01.09", - ), - CompletedListModel( - title = "굉굉이랑 고기 구워 먹기", - startDate = "2020.04.10", - endDate = "2020.04.22", - ) - ) -} \ No newline at end of file diff --git a/presentation/src/main/res/drawable/img_trip_dash_board_empty.png b/presentation/src/main/res/drawable/img_trip_dash_board_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..9328d8483ca763abf7768eb6e64b79db6285ba27 GIT binary patch literal 31166 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 + app:layout_constraintTop_toBottomOf="@id/btn_setting_profile"> + app:layout_constraintTop_toBottomOf="@id/btn_setting_inquire"> + app:layout_constraintTop_toBottomOf="@id/btn_setting_service_version"> + app:layout_constraintTop_toBottomOf="@id/btn_setting_policy"> + app:layout_constraintTop_toBottomOf="@id/btn_setting_about_doorip"> + tools:context=".dashboard.DashBoardActivity"> %s님의 여행 - 생성된 여행이 없어요. + 새로운 여행을 시작해 보세요 여행 생성하기 여행종료 - From 12bc5f6a66630a75c34dbdd802c6b46508520ab0 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Thu, 11 Jan 2024 21:16:00 +0900 Subject: [PATCH 02/12] =?UTF-8?q?[MOD/#73]=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/dto/response/DashBoardResponseDto.kt | 7 +- .../entity/response/DashBoardNameModel.kt | 6 + .../dashboard/DashBoardActivity.kt | 1 + .../dashboard/DashBoardViewModel.kt | 170 +++++++++--------- 4 files changed, 97 insertions(+), 87 deletions(-) create mode 100644 domain/src/main/kotlin/com/going/domain/entity/response/DashBoardNameModel.kt diff --git a/data/src/main/java/com/going/data/dto/response/DashBoardResponseDto.kt b/data/src/main/java/com/going/data/dto/response/DashBoardResponseDto.kt index 9f10da26..08ec9ff8 100644 --- a/data/src/main/java/com/going/data/dto/response/DashBoardResponseDto.kt +++ b/data/src/main/java/com/going/data/dto/response/DashBoardResponseDto.kt @@ -14,7 +14,7 @@ data class DashBoardResponseDto( @Serializable data class TripsResponseDto( @SerialName("tripId") - val tripId: Int, + val tripId: Long, @SerialName("title") val title: String, @SerialName("startDate") @@ -24,5 +24,8 @@ data class DashBoardResponseDto( @SerialName("day") val day: Int ) -} + fun toNameEntity(){ + + } +} diff --git a/domain/src/main/kotlin/com/going/domain/entity/response/DashBoardNameModel.kt b/domain/src/main/kotlin/com/going/domain/entity/response/DashBoardNameModel.kt new file mode 100644 index 00000000..ce8dbe7e --- /dev/null +++ b/domain/src/main/kotlin/com/going/domain/entity/response/DashBoardNameModel.kt @@ -0,0 +1,6 @@ +package com.going.domain.entity.response + +data class DashBoardNameModel( + val name : String, + +) \ No newline at end of file diff --git a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt index 3fd563d3..fb710cb5 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt @@ -31,6 +31,7 @@ class DashBoardActivity : private fun setViewPager() { binding.vpDashboard.adapter = DashBoardViewPagerAdapter(this) + binding.vpDashboard.isUserInputEnabled = false TabLayoutMediator(binding.tabDashboard, binding.vpDashboard) { tab, pos -> tab.text = tabTextList[pos] }.attach() diff --git a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt index d990c3c6..7873351c 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt @@ -6,89 +6,89 @@ import com.going.domain.entity.response.OngoingListModel class DashBoardViewModel : ViewModel() { -// val mockOngoingList: List = listOf( -// OngoingListModel( -// title = "굉굉이랑 합숙", -// startDate = "2024.01.01", -// endDate = "2024.01.21", -// day = 16 -// ), -// OngoingListModel( -// title = "여행 제목 자리", -// startDate = "2002.09.22", -// endDate = "2005.03.31", -// day = -10 -// ), -// OngoingListModel( -// title = "상호랑 제주도 여행", -// startDate = "2025.03.24", -// endDate = "2025.03.31", -// day = 100 -// ), -// OngoingListModel( -// title = "동민이랑 서울 구경", -// startDate = "2026.03.24", -// endDate = "2026.03.31", -// day = 200 -// ), -// OngoingListModel( -// title = "유빈이랑 부산 여행", -// startDate = "2027.03.24", -// endDate = "2027.03.31", -// day = 300 -// ), -// OngoingListModel( -// title = "세연이랑 바다 구경", -// startDate = "2028.03.24", -// endDate = "2028.03.31", -// day = 400 -// ), -// OngoingListModel( -// title = "솝트랑 MT", -// startDate = "2021.03.24", -// endDate = "2021.03.31", -// day = 0 -// ), -// OngoingListModel( -// title = "굉굉 신년회", -// startDate = "2024.01.02", -// endDate = "2024.01.32", -// day = 0 -// ), -// OngoingListModel( -// title = "안드 단체 여행", -// startDate = "2020.03.24", -// endDate = "2021.03.31", -// day = 100 -// ), -// OngoingListModel( -// title = "두릅", -// startDate = "2003.03.24", -// endDate = "2004.03.31", -// day = 1000 -// ) -// ) -// -// val mockCompletedList: List = listOf( -// CompletedListModel( -// title = "유빈이 생일 파티", -// startDate = "2022.09.22", -// endDate = "2022.09.23" -// ), -// CompletedListModel( -// title = "굉굉이랑 만화 카페", -// startDate = "2024.01.13", -// endDate = "2024.01.23", -// ), -// CompletedListModel( -// title = "굉굉이랑 파스타 먹기", -// startDate = "2024.01.09", -// endDate = "2024.01.09", -// ), -// CompletedListModel( -// title = "굉굉이랑 고기 구워 먹기", -// startDate = "2020.04.10", -// endDate = "2020.04.22", -// ) -// ) + val mockOngoingList: List = listOf( + OngoingListModel( + title = "굉굉이랑 합숙", + startDate = "2024.01.01", + endDate = "2024.01.21", + day = 16 + ), + OngoingListModel( + title = "여행 제목 자리", + startDate = "2002.09.22", + endDate = "2005.03.31", + day = -10 + ), + OngoingListModel( + title = "상호랑 제주도 여행", + startDate = "2025.03.24", + endDate = "2025.03.31", + day = 100 + ), + OngoingListModel( + title = "동민이랑 서울 구경", + startDate = "2026.03.24", + endDate = "2026.03.31", + day = 200 + ), + OngoingListModel( + title = "유빈이랑 부산 여행", + startDate = "2027.03.24", + endDate = "2027.03.31", + day = 300 + ), + OngoingListModel( + title = "세연이랑 바다 구경", + startDate = "2028.03.24", + endDate = "2028.03.31", + day = 400 + ), + OngoingListModel( + title = "솝트랑 MT", + startDate = "2021.03.24", + endDate = "2021.03.31", + day = 0 + ), + OngoingListModel( + title = "굉굉 신년회", + startDate = "2024.01.02", + endDate = "2024.01.32", + day = 0 + ), + OngoingListModel( + title = "안드 단체 여행", + startDate = "2020.03.24", + endDate = "2021.03.31", + day = 100 + ), + OngoingListModel( + title = "두릅", + startDate = "2003.03.24", + endDate = "2004.03.31", + day = 1000 + ) + ) + + val mockCompletedList: List = listOf( + CompletedListModel( + title = "유빈이 생일 파티", + startDate = "2022.09.22", + endDate = "2022.09.23" + ), + CompletedListModel( + title = "굉굉이랑 만화 카페", + startDate = "2024.01.13", + endDate = "2024.01.23", + ), + CompletedListModel( + title = "굉굉이랑 파스타 먹기", + startDate = "2024.01.09", + endDate = "2024.01.09", + ), + CompletedListModel( + title = "굉굉이랑 고기 구워 먹기", + startDate = "2020.04.10", + endDate = "2020.04.22", + ) + ) } \ No newline at end of file From 832cd4b56845c17a2991985f2e2ffb2da063146f Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Fri, 12 Jan 2024 00:23:54 +0900 Subject: [PATCH 03/12] =?UTF-8?q?[MOD/#73]=20=EC=84=9C=EB=B2=84=ED=86=B5?= =?UTF-8?q?=EC=8B=A0=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/going/doorip/di/RepositoryModule.kt | 7 ++ .../data/datasource/DashBoardDataSource.kt | 10 +++ .../datasourceImpl/DashBoardDataSourceImpl.kt | 14 +++ .../data/dto/response/DashBoardResponseDto.kt | 14 ++- .../repositoryImpl/DashBoardRepositoryImpl.kt | 19 ++++ .../going/data/service/DashBoardService.kt | 13 +++ .../domain/entity/response/DashBoardModel.kt | 14 +++ .../entity/response/DashBoardNameModel.kt | 6 -- .../domain/repository/DashBoardRepository.kt | 9 ++ .../dashboard/DashBoardActivity.kt | 2 + .../dashboard/DashBoardViewModel.kt | 87 +------------------ .../triplist/CompletedTripFragment.kt | 4 +- .../dashboard/triplist/OngoingTripFragment.kt | 4 +- 13 files changed, 106 insertions(+), 97 deletions(-) create mode 100644 data/src/main/java/com/going/data/datasource/DashBoardDataSource.kt create mode 100644 data/src/main/java/com/going/data/datasourceImpl/DashBoardDataSourceImpl.kt create mode 100644 data/src/main/java/com/going/data/repositoryImpl/DashBoardRepositoryImpl.kt create mode 100644 data/src/main/java/com/going/data/service/DashBoardService.kt create mode 100644 domain/src/main/kotlin/com/going/domain/entity/response/DashBoardModel.kt delete mode 100644 domain/src/main/kotlin/com/going/domain/entity/response/DashBoardNameModel.kt create mode 100644 domain/src/main/kotlin/com/going/domain/repository/DashBoardRepository.kt 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 08aae754..f9a2606d 100644 --- a/app/src/main/java/com/going/doorip/di/RepositoryModule.kt +++ b/app/src/main/java/com/going/doorip/di/RepositoryModule.kt @@ -1,11 +1,13 @@ package com.going.doorip.di +import com.going.data.datasourceImpl.DashBoardDataSourceImpl import com.going.data.repositoryImpl.AuthRepositoryImpl import com.going.data.repositoryImpl.MockRepositoryImpl import com.going.data.repositoryImpl.SettingRepositoryImpl import com.going.data.repositoryImpl.TodoRepositoryImpl import com.going.data.repositoryImpl.TokenRepositoryImpl import com.going.domain.repository.AuthRepository +import com.going.domain.repository.DashBoardRepository import com.going.domain.repository.MockRepository import com.going.domain.repository.SettingRepository import com.going.domain.repository.TodoRepository @@ -45,4 +47,9 @@ object RepositoryModule { fun provideTodoRepository(todoRepositoryImpl: TodoRepositoryImpl): TodoRepository = todoRepositoryImpl + @Provides + @Singleton + fun providesDashBoardRepository(dashBoardDataSourceImpl: DashBoardDataSourceImpl): DashBoardRepository = + dashBoardDataSourceImpl + } diff --git a/data/src/main/java/com/going/data/datasource/DashBoardDataSource.kt b/data/src/main/java/com/going/data/datasource/DashBoardDataSource.kt new file mode 100644 index 00000000..0ace2896 --- /dev/null +++ b/data/src/main/java/com/going/data/datasource/DashBoardDataSource.kt @@ -0,0 +1,10 @@ +package com.going.data.datasource + +import com.going.data.dto.BaseResponse +import com.going.data.dto.response.DashBoardResponseDto + +interface DashBoardDataSource { + suspend fun getTripList( + progress: String + ): BaseResponse> +} \ No newline at end of file diff --git a/data/src/main/java/com/going/data/datasourceImpl/DashBoardDataSourceImpl.kt b/data/src/main/java/com/going/data/datasourceImpl/DashBoardDataSourceImpl.kt new file mode 100644 index 00000000..6fc50b0c --- /dev/null +++ b/data/src/main/java/com/going/data/datasourceImpl/DashBoardDataSourceImpl.kt @@ -0,0 +1,14 @@ +package com.going.data.datasourceImpl + +import com.going.data.datasource.DashBoardDataSource +import com.going.data.dto.BaseResponse +import com.going.data.dto.response.DashBoardResponseDto +import com.going.data.service.DashBoardService +import javax.inject.Inject + +class DashBoardDataSourceImpl @Inject constructor( + private val dashBoardService: DashBoardService +) : DashBoardDataSource { + override suspend fun getTripList(progress: String): BaseResponse> = + dashBoardService.getTripList(progress) +} \ No newline at end of file diff --git a/data/src/main/java/com/going/data/dto/response/DashBoardResponseDto.kt b/data/src/main/java/com/going/data/dto/response/DashBoardResponseDto.kt index 08ec9ff8..43c4f1d6 100644 --- a/data/src/main/java/com/going/data/dto/response/DashBoardResponseDto.kt +++ b/data/src/main/java/com/going/data/dto/response/DashBoardResponseDto.kt @@ -1,5 +1,6 @@ package com.going.data.dto.response +import com.going.domain.entity.response.DashBoardModel import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @@ -23,9 +24,14 @@ data class DashBoardResponseDto( val endDate: String, @SerialName("day") val day: Int - ) - - fun toNameEntity(){ - + ) { + fun toTripsModel() = + DashBoardModel.TripsModel(tripId, title, startDate, endDate, day) } + + fun toDashBoardEntity() = + DashBoardModel(name, trips.map { + it.toTripsModel() + }) } + diff --git a/data/src/main/java/com/going/data/repositoryImpl/DashBoardRepositoryImpl.kt b/data/src/main/java/com/going/data/repositoryImpl/DashBoardRepositoryImpl.kt new file mode 100644 index 00000000..94ffe15d --- /dev/null +++ b/data/src/main/java/com/going/data/repositoryImpl/DashBoardRepositoryImpl.kt @@ -0,0 +1,19 @@ +package com.going.data.repositoryImpl + +import com.going.data.datasource.DashBoardDataSource +import com.going.domain.entity.response.DashBoardModel +import com.going.domain.repository.DashBoardRepository +import javax.inject.Inject + +class DashBoardRepositoryImpl @Inject constructor( + private val dashBoardSource: DashBoardDataSource +) : DashBoardRepository { + override suspend fun getDashBoardList( + progress: String + ): Result> = + runCatching { + dashBoardSource.getTripList(progress).data.map { + it.toDashBoardEntity() + } + } +} \ No newline at end of file diff --git a/data/src/main/java/com/going/data/service/DashBoardService.kt b/data/src/main/java/com/going/data/service/DashBoardService.kt new file mode 100644 index 00000000..f75a3c33 --- /dev/null +++ b/data/src/main/java/com/going/data/service/DashBoardService.kt @@ -0,0 +1,13 @@ +package com.going.data.service + +import com.going.data.dto.BaseResponse +import com.going.data.dto.response.DashBoardResponseDto +import retrofit2.http.GET +import retrofit2.http.Query + +interface DashBoardService { + @GET("api/trips") + suspend fun getTripList( + @Query("progress") progress: String + ) : BaseResponse> +} \ No newline at end of file diff --git a/domain/src/main/kotlin/com/going/domain/entity/response/DashBoardModel.kt b/domain/src/main/kotlin/com/going/domain/entity/response/DashBoardModel.kt new file mode 100644 index 00000000..fb9342ad --- /dev/null +++ b/domain/src/main/kotlin/com/going/domain/entity/response/DashBoardModel.kt @@ -0,0 +1,14 @@ +package com.going.domain.entity.response + +data class DashBoardModel( + val name : String, + val trips : List +){ + data class TripsModel( + val tripId : Long, + val title : String, + val startDate : String, + val endDate : String, + val day : Int + ) +} \ No newline at end of file diff --git a/domain/src/main/kotlin/com/going/domain/entity/response/DashBoardNameModel.kt b/domain/src/main/kotlin/com/going/domain/entity/response/DashBoardNameModel.kt deleted file mode 100644 index ce8dbe7e..00000000 --- a/domain/src/main/kotlin/com/going/domain/entity/response/DashBoardNameModel.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.going.domain.entity.response - -data class DashBoardNameModel( - val name : String, - -) \ No newline at end of file diff --git a/domain/src/main/kotlin/com/going/domain/repository/DashBoardRepository.kt b/domain/src/main/kotlin/com/going/domain/repository/DashBoardRepository.kt new file mode 100644 index 00000000..2ac0ceca --- /dev/null +++ b/domain/src/main/kotlin/com/going/domain/repository/DashBoardRepository.kt @@ -0,0 +1,9 @@ +package com.going.domain.repository + +import com.going.domain.entity.response.DashBoardModel + +interface DashBoardRepository { + suspend fun getDashBoardList( + name : String, + ) : Result> +} \ No newline at end of file diff --git a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt index fb710cb5..f9f79d26 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt @@ -5,7 +5,9 @@ import com.going.presentation.R import com.going.presentation.databinding.ActivityTripDashBoardBinding import com.going.ui.base.BaseActivity import com.google.android.material.tabs.TabLayoutMediator +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class DashBoardActivity : BaseActivity(R.layout.activity_trip_dash_board) { diff --git a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt index 7873351c..6893c317 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt @@ -3,92 +3,9 @@ package com.going.presentation.dashboard import androidx.lifecycle.ViewModel import com.going.domain.entity.response.CompletedListModel import com.going.domain.entity.response.OngoingListModel +import dagger.hilt.android.lifecycle.HiltViewModel +@HiltViewModel class DashBoardViewModel : ViewModel() { - val mockOngoingList: List = listOf( - OngoingListModel( - title = "굉굉이랑 합숙", - startDate = "2024.01.01", - endDate = "2024.01.21", - day = 16 - ), - OngoingListModel( - title = "여행 제목 자리", - startDate = "2002.09.22", - endDate = "2005.03.31", - day = -10 - ), - OngoingListModel( - title = "상호랑 제주도 여행", - startDate = "2025.03.24", - endDate = "2025.03.31", - day = 100 - ), - OngoingListModel( - title = "동민이랑 서울 구경", - startDate = "2026.03.24", - endDate = "2026.03.31", - day = 200 - ), - OngoingListModel( - title = "유빈이랑 부산 여행", - startDate = "2027.03.24", - endDate = "2027.03.31", - day = 300 - ), - OngoingListModel( - title = "세연이랑 바다 구경", - startDate = "2028.03.24", - endDate = "2028.03.31", - day = 400 - ), - OngoingListModel( - title = "솝트랑 MT", - startDate = "2021.03.24", - endDate = "2021.03.31", - day = 0 - ), - OngoingListModel( - title = "굉굉 신년회", - startDate = "2024.01.02", - endDate = "2024.01.32", - day = 0 - ), - OngoingListModel( - title = "안드 단체 여행", - startDate = "2020.03.24", - endDate = "2021.03.31", - day = 100 - ), - OngoingListModel( - title = "두릅", - startDate = "2003.03.24", - endDate = "2004.03.31", - day = 1000 - ) - ) - - val mockCompletedList: List = listOf( - CompletedListModel( - title = "유빈이 생일 파티", - startDate = "2022.09.22", - endDate = "2022.09.23" - ), - CompletedListModel( - title = "굉굉이랑 만화 카페", - startDate = "2024.01.13", - endDate = "2024.01.23", - ), - CompletedListModel( - title = "굉굉이랑 파스타 먹기", - startDate = "2024.01.09", - endDate = "2024.01.09", - ), - CompletedListModel( - title = "굉굉이랑 고기 구워 먹기", - startDate = "2020.04.10", - endDate = "2020.04.22", - ) - ) } \ No newline at end of file diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt index 8d631e77..226e5c60 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt @@ -8,7 +8,9 @@ import com.going.presentation.R import com.going.presentation.databinding.FragmentCompletedTripBinding import com.going.presentation.dashboard.DashBoardViewModel import com.going.ui.base.BaseFragment +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class CompletedTripFragment : BaseFragment(R.layout.fragment_completed_trip), CompletedAdapter.OnDashBoardSelectedListener { @@ -33,7 +35,7 @@ class CompletedTripFragment : private fun setRecyclerView() { _adapter = CompletedAdapter(this) binding.rvDashboardCompletedTrip.adapter = adapter - adapter.submitList(viewModel.mockCompletedList) +// adapter.submitList(viewModel.mockCompletedList) } private fun initItemDecoration() { diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt index 188e6162..2af0bcfb 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt @@ -8,7 +8,9 @@ import com.going.presentation.R import com.going.presentation.databinding.FragmentOngoingTripBinding import com.going.presentation.dashboard.DashBoardViewModel import com.going.ui.base.BaseFragment +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class OngoingTripFragment : BaseFragment(R.layout.fragment_ongoing_trip), OngoingAdapter.OnDashBoardSelectedListener { @@ -33,7 +35,7 @@ class OngoingTripFragment : private fun setRecyclerView() { _adapter = OngoingAdapter(this) binding.rvDashboardOngoingTrip.adapter = adapter - adapter.submitList(viewModel.mockOngoingList) +// adapter.submitList(viewModel.mockOngoingList) } private fun initItemDecoration() { From 140478d1a01790f2b3b7edaaa9816db98ea28fdc Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Fri, 12 Jan 2024 01:39:45 +0900 Subject: [PATCH 04/12] =?UTF-8?q?[MOD/#73]=20=EC=97=AC=ED=96=89=20?= =?UTF-8?q?=EB=8C=80=EC=8B=9C=20=EB=B3=B4=EB=93=9C=20ViewModel=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dashboard/DashBoardViewModel.kt | 46 +++++++++++++++++-- .../dashboard/triplist/OngoingTripFragment.kt | 4 ++ 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt index 6893c317..d664c76e 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt @@ -1,11 +1,51 @@ package com.going.presentation.dashboard import androidx.lifecycle.ViewModel -import com.going.domain.entity.response.CompletedListModel -import com.going.domain.entity.response.OngoingListModel +import androidx.lifecycle.viewModelScope +import com.going.domain.entity.response.DashBoardModel +import com.going.domain.repository.DashBoardRepository +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 DashBoardViewModel : ViewModel() { +class DashBoardViewModel @Inject constructor( + private val dashBoardRepository: DashBoardRepository +) : ViewModel() { + private val _dashBoardOngoingListState = + MutableStateFlow>>(UiState.Empty) + val dashBoardOngoingListState: StateFlow>> get() = _dashBoardOngoingListState + + private val _dashBoardCompletedListState = + MutableStateFlow>>(UiState.Empty) + val dashBoardCompletedListState: StateFlow>> get() = _dashBoardCompletedListState + fun getTripListFromServer( + progress: String + ) { + val dashBoardListState = if (progress == ONGOING) { + _dashBoardOngoingListState + } else { + _dashBoardCompletedListState + } + dashBoardListState.value = UiState.Loading + viewModelScope.launch { + dashBoardRepository.getDashBoardList(progress) + .onSuccess { + dashBoardListState.value = UiState.Success(it) + } + .onFailure { + dashBoardListState.value = UiState.Failure(it.message.orEmpty()) + } + } + } + + + companion object { + const val ONGOING = "incomplete" + const val COMPLETED = "complete" + } } \ No newline at end of file diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt index 2af0bcfb..a5400810 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt @@ -25,6 +25,7 @@ class OngoingTripFragment : setRecyclerView() initItemDecoration() + setTripList() } @@ -43,6 +44,9 @@ class OngoingTripFragment : binding.rvDashboardOngoingTrip.addItemDecoration(itemDeco) } + private fun setTripList(){ + + } override fun onDestroyView() { super.onDestroyView() _adapter = null From f633066655ea12f20083eb515024f8d909b5f48f Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Fri, 12 Jan 2024 08:26:44 +0900 Subject: [PATCH 05/12] =?UTF-8?q?[FEAT/#73]=20=EC=A7=80=EB=82=98=EA=B0=84?= =?UTF-8?q?=20=EC=97=AC=ED=96=89=20=EC=84=9C=EB=B2=84=ED=86=B5=EC=8B=A0=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/response/CompletedListModel.kt | 7 ---- .../entity/response/DashBoardTripModel.kt | 9 ---- .../dashboard/DashBoardActivity.kt | 2 +- .../dashboard/triplist/CompletedAdapter.kt | 8 ++-- .../triplist/CompletedTripFragment.kt | 41 +++++++++++++++---- .../dashboard/triplist/CompletedViewHolder.kt | 4 +- .../dashboard/triplist/OngoingTripFragment.kt | 2 - 7 files changed, 41 insertions(+), 32 deletions(-) delete mode 100644 domain/src/main/kotlin/com/going/domain/entity/response/CompletedListModel.kt delete mode 100644 domain/src/main/kotlin/com/going/domain/entity/response/DashBoardTripModel.kt diff --git a/domain/src/main/kotlin/com/going/domain/entity/response/CompletedListModel.kt b/domain/src/main/kotlin/com/going/domain/entity/response/CompletedListModel.kt deleted file mode 100644 index b0c99d80..00000000 --- a/domain/src/main/kotlin/com/going/domain/entity/response/CompletedListModel.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.going.domain.entity.response - -data class CompletedListModel( - val title: String, - val startDate: String, - val endDate: String -) \ No newline at end of file diff --git a/domain/src/main/kotlin/com/going/domain/entity/response/DashBoardTripModel.kt b/domain/src/main/kotlin/com/going/domain/entity/response/DashBoardTripModel.kt deleted file mode 100644 index 5e2250b8..00000000 --- a/domain/src/main/kotlin/com/going/domain/entity/response/DashBoardTripModel.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.going.domain.entity.response - -//data class DashBoardTripModel( -// val tripId: Long, -// val title: String, -// val startDate: String, -// val endDate: String, -// val day: Int -//) \ No newline at end of file diff --git a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt index 091e6ab4..2832905d 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt @@ -49,7 +49,7 @@ class DashBoardActivity : // } companion object { const val TAB_ONGOING = "진행중인 여행" - const val TAB_COMPLETED = "완료된 여행" + const val TAB_COMPLETED = "지나간 여행" } } \ No newline at end of file diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedAdapter.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedAdapter.kt index 88cb17f0..e10c8ef3 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedAdapter.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedAdapter.kt @@ -3,16 +3,16 @@ package com.going.presentation.dashboard.triplist import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.ListAdapter -import com.going.domain.entity.response.CompletedListModel +import com.going.domain.entity.response.DashBoardModel import com.going.presentation.databinding.ItemDashBoardCompletedBinding import com.going.ui.extension.ItemDiffCallback class CompletedAdapter( private val listener: OnDashBoardSelectedListener -) : ListAdapter(diffUtil) { +) : ListAdapter(diffUtil) { interface OnDashBoardSelectedListener { - fun onDashBoardSelectedListener(tripCreate: CompletedListModel) + fun onDashBoardSelectedListener(tripCreate: DashBoardModel.DashBoardTripModel) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CompletedViewHolder { @@ -30,7 +30,7 @@ class CompletedAdapter( } companion object { - private val diffUtil = ItemDiffCallback( + private val diffUtil = ItemDiffCallback( onItemsTheSame = { old, new -> old.title == new.title }, onContentsTheSame = { old, new -> old == new }, ) diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt index 226e5c60..8943c055 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt @@ -3,12 +3,18 @@ package com.going.presentation.dashboard.triplist import android.os.Bundle import android.view.View import androidx.fragment.app.activityViewModels -import com.going.domain.entity.response.CompletedListModel +import androidx.lifecycle.flowWithLifecycle +import androidx.lifecycle.lifecycleScope +import com.going.domain.entity.response.DashBoardModel import com.going.presentation.R -import com.going.presentation.databinding.FragmentCompletedTripBinding import com.going.presentation.dashboard.DashBoardViewModel +import com.going.presentation.databinding.FragmentCompletedTripBinding import com.going.ui.base.BaseFragment +import com.going.ui.extension.UiState +import com.going.ui.extension.toast import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach @AndroidEntryPoint class CompletedTripFragment : @@ -25,17 +31,14 @@ class CompletedTripFragment : setRecyclerView() initItemDecoration() + setTripList() + observeDashBoardListState() } - override fun onDashBoardSelectedListener(tripCreate: CompletedListModel) { - // 여행 생성 레이아웃 클릭 시 처리 - } - private fun setRecyclerView() { _adapter = CompletedAdapter(this) binding.rvDashboardCompletedTrip.adapter = adapter -// adapter.submitList(viewModel.mockCompletedList) } private fun initItemDecoration() { @@ -43,9 +46,33 @@ class CompletedTripFragment : binding.rvDashboardCompletedTrip.addItemDecoration(itemDeco) } + private fun setTripList() { + val progress = "complete" + viewModel.getTripListFromServer(progress) + } + + private fun observeDashBoardListState() { + viewModel.dashBoardOngoingListState.flowWithLifecycle(lifecycle).onEach { state -> + when (state) { + is UiState.Success -> adapter.submitList(state.data.trips) + + is UiState.Failure -> toast(getString(R.string.server_error)) + + is UiState.Loading -> return@onEach + + is UiState.Empty -> return@onEach + } + }.launchIn(lifecycleScope) + } + + override fun onDestroyView() { super.onDestroyView() _adapter = null } + override fun onDashBoardSelectedListener(tripCreate: DashBoardModel.DashBoardTripModel) { + + } + } \ No newline at end of file diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedViewHolder.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedViewHolder.kt index ada45b91..21f00699 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedViewHolder.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedViewHolder.kt @@ -1,7 +1,7 @@ package com.going.presentation.dashboard.triplist import androidx.recyclerview.widget.RecyclerView -import com.going.domain.entity.response.CompletedListModel +import com.going.domain.entity.response.DashBoardModel import com.going.presentation.databinding.ItemDashBoardCompletedBinding import com.going.ui.extension.setOnSingleClickListener @@ -10,7 +10,7 @@ class CompletedViewHolder( private val listener: CompletedAdapter.OnDashBoardSelectedListener ) : RecyclerView.ViewHolder(binding.root) { - fun onBind(item: CompletedListModel) { + fun onBind(item: DashBoardModel.DashBoardTripModel) { binding.run { tvDashboardTripTitle.text = item.title diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt index d709ddd3..6fa993ca 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt @@ -37,11 +37,9 @@ class OngoingTripFragment : } - private fun setRecyclerView() { _adapter = OngoingAdapter(this) binding.rvDashboardOngoingTrip.adapter = adapter -// adapter.submitList(viewModel.mockOngoingList) } private fun initItemDecoration() { From 83338770e4d18e0151ea867eb5e357dad1831212 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Fri, 12 Jan 2024 08:38:19 +0900 Subject: [PATCH 06/12] =?UTF-8?q?[FEAT/#73]=20=EC=A7=80=EB=82=98=EA=B0=84?= =?UTF-8?q?=20=EC=97=AC=ED=96=89=20=EC=84=9C=EB=B2=84=ED=86=B5=EC=8B=A0=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/dashboard/triplist/CompletedTripFragment.kt | 2 +- .../presentation/dashboard/triplist/CompletedViewHolder.kt | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt index 8943c055..28fb51bf 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt @@ -52,7 +52,7 @@ class CompletedTripFragment : } private fun observeDashBoardListState() { - viewModel.dashBoardOngoingListState.flowWithLifecycle(lifecycle).onEach { state -> + viewModel.dashBoardCompletedListState.flowWithLifecycle(lifecycle).onEach { state -> when (state) { is UiState.Success -> adapter.submitList(state.data.trips) diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedViewHolder.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedViewHolder.kt index 21f00699..47de56e4 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedViewHolder.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedViewHolder.kt @@ -2,6 +2,7 @@ package com.going.presentation.dashboard.triplist import androidx.recyclerview.widget.RecyclerView import com.going.domain.entity.response.DashBoardModel +import com.going.presentation.R import com.going.presentation.databinding.ItemDashBoardCompletedBinding import com.going.ui.extension.setOnSingleClickListener @@ -16,6 +17,8 @@ class CompletedViewHolder( tvDashboardTripTitle.text = item.title tvDashboardDateStart.text = item.startDate tvDashboardDateEnd.text = item.endDate + tvDashboardDeadlineCompleted.text = + itemView.context.getString(R.string.dashboard_tv_completed_trip) layoutDashboard.setOnSingleClickListener { listener.onDashBoardSelectedListener(item) From b2c86da6550896ed90299249086c6098c5e6937d Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Fri, 12 Jan 2024 08:56:36 +0900 Subject: [PATCH 07/12] =?UTF-8?q?[FEAT/#73]=20=EC=97=AC=ED=96=89=EC=9E=90?= =?UTF-8?q?=20=EC=9D=B4=EB=A6=84=20=EC=84=9C=EB=B9=84=ED=86=B5=EC=8B=A0=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../com/going/doorip/di/DataSourceModule.kt | 2 +- .../com/going/doorip/di/RepositoryModule.kt | 1 - .../data/datasource/DashBoardDataSource.kt | 1 - .../dashboard/DashBoardActivity.kt | 18 ++++++---- .../dashboard/DashBoardViewModel.kt | 33 +++++++++---------- 6 files changed, 29 insertions(+), 28 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7f417c29..7a7ea562 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -81,7 +81,7 @@ () + + var name: String? = null + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setTabLayout() setViewPager() -// setTravelerName() + setTravelerName() } @@ -43,10 +45,14 @@ class DashBoardActivity : }.attach() } -// private fun setTravelerName(){ -// val progress = "incomplete" -// viewModel.getTravelerNameFromServer(progress) -// } + private fun setTravelerName() { + val progress = "incomplete" + viewModel.getTravelerNameFromServer(progress) + viewModel.name.observe(this) { travelerName -> + binding.tvDashboardTitle.text = getString(R.string.dashboard_tv_title, travelerName) + } + } + companion object { const val TAB_ONGOING = "진행중인 여행" const val TAB_COMPLETED = "지나간 여행" diff --git a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt index 70dbd1f6..993f7ab9 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt @@ -1,5 +1,6 @@ package com.going.presentation.dashboard +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.going.domain.entity.response.DashBoardModel @@ -21,16 +22,11 @@ class DashBoardViewModel @Inject constructor( private val _dashBoardCompletedListState = MutableStateFlow>(UiState.Empty) -// -// private val _dashBoardOngoingNameState = MutableStateFlow>>(UiState.Empty) -// val dashBoardOngoingNameState : StateFlow>> get() = _dashBoardOngoingNameState -// -// -// -// private val _dashBoardCompletedNameState = MutableStateFlow>>(UiState.Empty) -// val dashBoardCompletedNameState : StateFlow>> get() = _dashBoardCompletedNameState + + val name = MutableLiveData() val dashBoardCompletedListState: StateFlow> get() = _dashBoardCompletedListState + fun getTripListFromServer( progress: String ) { @@ -51,16 +47,17 @@ class DashBoardViewModel @Inject constructor( } } -// fun getTravelerNameFromServer( -// progress: String -// ) { -// viewModelScope.launch { -// dashBoardRepository.getDashBoardList(progress) -// .onSuccess { -// dashBoardOngoingNameState.value = UiState.Success(it.) -// } -// } -// } + fun getTravelerNameFromServer(progress: String) { + viewModelScope.launch { + dashBoardRepository.getDashBoardList(progress) + .onSuccess { + name.value = it.name + } + .onFailure { + name.value = null + } + } + } companion object { From 48e7291581f50b0837782240b99919ed7e28251e Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Fri, 12 Jan 2024 09:49:29 +0900 Subject: [PATCH 08/12] =?UTF-8?q?[FEAT/#73]=20UiState=EA=B0=80=20Empty?= =?UTF-8?q?=EC=9D=BC=20=EB=95=8C=EC=9D=98=20=EC=83=81=ED=83=9C=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../triplist/CompletedTripFragment.kt | 13 ++- .../dashboard/triplist/OngoingTripFragment.kt | 16 +++- .../drawable/ic_empty_dashboard_doorip.xml | 82 ++++++++++++++++++ .../drawable/img_trip_dash_board_empty.png | Bin 31166 -> 0 bytes .../res/layout/fragment_completed_trip.xml | 34 ++++++++ .../main/res/layout/fragment_ongoing_trip.xml | 35 ++++++++ 6 files changed, 174 insertions(+), 6 deletions(-) create mode 100644 presentation/src/main/res/drawable/ic_empty_dashboard_doorip.xml delete mode 100644 presentation/src/main/res/drawable/img_trip_dash_board_empty.png diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt index 28fb51bf..03d08f54 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt @@ -2,6 +2,7 @@ package com.going.presentation.dashboard.triplist import android.os.Bundle import android.view.View +import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope @@ -54,17 +55,25 @@ class CompletedTripFragment : private fun observeDashBoardListState() { viewModel.dashBoardCompletedListState.flowWithLifecycle(lifecycle).onEach { state -> when (state) { - is UiState.Success -> adapter.submitList(state.data.trips) + is UiState.Success -> { + setEmptyView(false) + adapter.submitList(state.data.trips) + } is UiState.Failure -> toast(getString(R.string.server_error)) is UiState.Loading -> return@onEach - is UiState.Empty -> return@onEach + is UiState.Empty -> setEmptyView(true) } }.launchIn(lifecycleScope) } + private fun setEmptyView(isEmpty: Boolean) { + binding.rvDashboardCompletedTrip.isVisible = !isEmpty + binding.layoutDashboardEmpty.isVisible = isEmpty + } + override fun onDestroyView() { super.onDestroyView() diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt index 6fa993ca..2dcb925e 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt @@ -2,6 +2,7 @@ package com.going.presentation.dashboard.triplist import android.os.Bundle import android.view.View +import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope @@ -55,25 +56,32 @@ class OngoingTripFragment : private fun observeDashBoardListState() { viewModel.dashBoardOngoingListState.flowWithLifecycle(lifecycle).onEach { state -> when (state) { - is UiState.Success -> adapter.submitList(state.data.trips) + is UiState.Success -> { + setEmptyView(false) + adapter.submitList(state.data.trips) + } is UiState.Failure -> toast(getString(R.string.server_error)) is UiState.Loading -> return@onEach - is UiState.Empty -> return@onEach + is UiState.Empty -> setEmptyView(true) } }.launchIn(lifecycleScope) } + private fun setEmptyView(isEmpty: Boolean) { + binding.rvDashboardOngoingTrip.isVisible = !isEmpty + binding.layoutDashboardEmpty.isVisible = isEmpty + } + override fun onDestroyView() { super.onDestroyView() _adapter = null } override fun onDashBoardSelectedListener(tripCreate: DashBoardModel.DashBoardTripModel) { - TODO("Not yet implemented") - } + } } \ No newline at end of file diff --git a/presentation/src/main/res/drawable/ic_empty_dashboard_doorip.xml b/presentation/src/main/res/drawable/ic_empty_dashboard_doorip.xml new file mode 100644 index 00000000..efe2f074 --- /dev/null +++ b/presentation/src/main/res/drawable/ic_empty_dashboard_doorip.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/presentation/src/main/res/drawable/img_trip_dash_board_empty.png b/presentation/src/main/res/drawable/img_trip_dash_board_empty.png deleted file mode 100644 index 9328d8483ca763abf7768eb6e64b79db6285ba27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31166 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 + + + + + + + + diff --git a/presentation/src/main/res/layout/fragment_ongoing_trip.xml b/presentation/src/main/res/layout/fragment_ongoing_trip.xml index e94898a9..b72a9fa7 100644 --- a/presentation/src/main/res/layout/fragment_ongoing_trip.xml +++ b/presentation/src/main/res/layout/fragment_ongoing_trip.xml @@ -18,12 +18,47 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:orientation="vertical" + android:visibility="visible" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:listitem="@layout/item_dash_board_ongoing" /> + + + + + + + + From 1c629508583e0323679253352fc19ee5ed6bd8ab Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Fri, 12 Jan 2024 09:55:10 +0900 Subject: [PATCH 09/12] =?UTF-8?q?[MOD/#73]=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../going/data/interceptor/AuthInterceptor.kt | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) 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 2597f571..5655dbad 100644 --- a/data/src/main/java/com/going/data/interceptor/AuthInterceptor.kt +++ b/data/src/main/java/com/going/data/interceptor/AuthInterceptor.kt @@ -23,13 +23,12 @@ class AuthInterceptor @Inject constructor( Timber.d("GET ACCESS TOKEN : ${dataStore.accessToken}") -// val authRequest = if (dataStore.accessToken.isNotBlank()) { -// originalRequest.newAuthBuilder().build() -// } else { -// originalRequest -// } + val authRequest = if (dataStore.accessToken.isNotBlank()) { + originalRequest.newAuthBuilder().build() + } else { + originalRequest + } - val authRequest = originalRequest.newAuthBuilder().build() val response = chain.proceed(authRequest) when (response.code) { @@ -85,12 +84,10 @@ 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 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiI2IiwiaWF0IjoxNzA0ODk1NDE4LCJleHAiOjE3MDU1MDAyMTh9.FWPJhGl9amOs1Aog1snD2O1ayVm6lRYBJgHOndyWdMQ") + private fun Request.newAuthBuilder() = + this.newBuilder().addHeader(AUTHORIZATION, "$BEARER ${dataStore.accessToken}") + companion object { private const val CODE_TOKEN_EXPIRED = 401 private const val BEARER = "Bearer" From 0348fe8c2f40b4fb8c04e0b03bb1055948a53753 Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Fri, 12 Jan 2024 18:40:40 +0900 Subject: [PATCH 10/12] =?UTF-8?q?[FIX/#73]=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../going/data/datasource/DashBoardDataSource.kt | 2 ++ .../datasourceImpl/DashBoardDataSourceImpl.kt | 2 ++ .../data/dto/response/DashBoardResponseDto.kt | 2 +- .../repositoryImpl/DashBoardRepositoryImpl.kt | 4 +++- .../com/going/data/service/DashBoardService.kt | 2 ++ .../presentation/dashboard/DashBoardActivity.kt | 5 ++--- .../presentation/dashboard/DashBoardViewModel.kt | 2 +- .../dashboard/triplist/CompletedAdapter.kt | 8 ++++---- .../dashboard/triplist/CompletedTripFragment.kt | 8 ++++---- .../dashboard/triplist/CompletedViewHolder.kt | 4 ++-- .../dashboard/triplist/OngoingAdapter.kt | 8 ++++---- .../dashboard/triplist/OngoingTripFragment.kt | 8 ++++---- .../dashboard/triplist/OngoingViewHolder.kt | 4 ++-- .../main/res/layout/fragment_completed_trip.xml | 15 +++++++++------ .../src/main/res/layout/fragment_ongoing_trip.xml | 13 +++++++------ 16 files changed, 50 insertions(+), 39 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7a7ea562..7f417c29 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -81,7 +81,7 @@ + } \ No newline at end of file diff --git a/data/src/main/java/com/going/data/datasourceImpl/DashBoardDataSourceImpl.kt b/data/src/main/java/com/going/data/datasourceImpl/DashBoardDataSourceImpl.kt index cc3ebb34..6bafedb2 100644 --- a/data/src/main/java/com/going/data/datasourceImpl/DashBoardDataSourceImpl.kt +++ b/data/src/main/java/com/going/data/datasourceImpl/DashBoardDataSourceImpl.kt @@ -9,6 +9,8 @@ import javax.inject.Inject class DashBoardDataSourceImpl @Inject constructor( private val dashBoardService: DashBoardService ) : DashBoardDataSource { + override suspend fun getTripList(progress: String): BaseResponse = dashBoardService.getTripList(progress) + } diff --git a/data/src/main/java/com/going/data/dto/response/DashBoardResponseDto.kt b/data/src/main/java/com/going/data/dto/response/DashBoardResponseDto.kt index 1c8e8558..3dbd4a9d 100644 --- a/data/src/main/java/com/going/data/dto/response/DashBoardResponseDto.kt +++ b/data/src/main/java/com/going/data/dto/response/DashBoardResponseDto.kt @@ -29,7 +29,7 @@ data class DashBoardResponseDto( DashBoardModel.DashBoardTripModel(tripId, title, startDate, endDate, day) } - fun toDashBoardEntity() = + fun toDashBoardModel() = DashBoardModel(name, trips.map { it.toTripsModel() }) diff --git a/data/src/main/java/com/going/data/repositoryImpl/DashBoardRepositoryImpl.kt b/data/src/main/java/com/going/data/repositoryImpl/DashBoardRepositoryImpl.kt index be9c7e94..17cd4168 100644 --- a/data/src/main/java/com/going/data/repositoryImpl/DashBoardRepositoryImpl.kt +++ b/data/src/main/java/com/going/data/repositoryImpl/DashBoardRepositoryImpl.kt @@ -8,10 +8,12 @@ import javax.inject.Inject class DashBoardRepositoryImpl @Inject constructor( private val dashBoardSource: DashBoardDataSource ) : DashBoardRepository { + override suspend fun getDashBoardList( progress: String ): Result = runCatching { - dashBoardSource.getTripList(progress).data.toDashBoardEntity() + dashBoardSource.getTripList(progress).data.toDashBoardModel() } + } \ No newline at end of file diff --git a/data/src/main/java/com/going/data/service/DashBoardService.kt b/data/src/main/java/com/going/data/service/DashBoardService.kt index a8b1f8be..52729f88 100644 --- a/data/src/main/java/com/going/data/service/DashBoardService.kt +++ b/data/src/main/java/com/going/data/service/DashBoardService.kt @@ -6,8 +6,10 @@ import retrofit2.http.GET import retrofit2.http.Query interface DashBoardService { + @GET("api/trips") suspend fun getTripList( @Query("progress") progress: String ) : BaseResponse + } \ No newline at end of file diff --git a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt index 28d5fd29..6053cdb2 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardActivity.kt @@ -3,6 +3,7 @@ package com.going.presentation.dashboard import android.os.Bundle import androidx.activity.viewModels import com.going.presentation.R +import com.going.presentation.dashboard.triplist.OngoingTripFragment import com.going.presentation.databinding.ActivityTripDashBoardBinding import com.going.ui.base.BaseActivity import com.google.android.material.tabs.TabLayoutMediator @@ -16,8 +17,6 @@ class DashBoardActivity : private val viewModel by viewModels() - var name: String? = null - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -46,7 +45,7 @@ class DashBoardActivity : } private fun setTravelerName() { - val progress = "incomplete" + val progress = DashBoardViewModel.COMPLETED viewModel.getTravelerNameFromServer(progress) viewModel.name.observe(this) { travelerName -> binding.tvDashboardTitle.text = getString(R.string.dashboard_tv_title, travelerName) diff --git a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt index 993f7ab9..427939de 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/DashBoardViewModel.kt @@ -23,7 +23,7 @@ class DashBoardViewModel @Inject constructor( private val _dashBoardCompletedListState = MutableStateFlow>(UiState.Empty) - val name = MutableLiveData() + val name = MutableLiveData("") val dashBoardCompletedListState: StateFlow> get() = _dashBoardCompletedListState diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedAdapter.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedAdapter.kt index e10c8ef3..d4af5574 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedAdapter.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedAdapter.kt @@ -3,16 +3,16 @@ package com.going.presentation.dashboard.triplist import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.ListAdapter -import com.going.domain.entity.response.DashBoardModel +import com.going.domain.entity.response.DashBoardModel.DashBoardTripModel import com.going.presentation.databinding.ItemDashBoardCompletedBinding import com.going.ui.extension.ItemDiffCallback class CompletedAdapter( private val listener: OnDashBoardSelectedListener -) : ListAdapter(diffUtil) { +) : ListAdapter(diffUtil) { interface OnDashBoardSelectedListener { - fun onDashBoardSelectedListener(tripCreate: DashBoardModel.DashBoardTripModel) + fun onDashBoardSelectedListener(tripCreate: DashBoardTripModel) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CompletedViewHolder { @@ -30,7 +30,7 @@ class CompletedAdapter( } companion object { - private val diffUtil = ItemDiffCallback( + private val diffUtil = ItemDiffCallback( onItemsTheSame = { old, new -> old.title == new.title }, onContentsTheSame = { old, new -> old == new }, ) diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt index 03d08f54..f0061c4f 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt @@ -6,7 +6,7 @@ import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope -import com.going.domain.entity.response.DashBoardModel +import com.going.domain.entity.response.DashBoardModel.DashBoardTripModel import com.going.presentation.R import com.going.presentation.dashboard.DashBoardViewModel import com.going.presentation.databinding.FragmentCompletedTripBinding @@ -30,14 +30,14 @@ class CompletedTripFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - setRecyclerView() + initAdapter() initItemDecoration() setTripList() observeDashBoardListState() } - private fun setRecyclerView() { + private fun initAdapter() { _adapter = CompletedAdapter(this) binding.rvDashboardCompletedTrip.adapter = adapter } @@ -80,7 +80,7 @@ class CompletedTripFragment : _adapter = null } - override fun onDashBoardSelectedListener(tripCreate: DashBoardModel.DashBoardTripModel) { + override fun onDashBoardSelectedListener(tripCreate: DashBoardTripModel) { } diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedViewHolder.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedViewHolder.kt index 47de56e4..5ff5e9cb 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedViewHolder.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedViewHolder.kt @@ -1,7 +1,7 @@ package com.going.presentation.dashboard.triplist import androidx.recyclerview.widget.RecyclerView -import com.going.domain.entity.response.DashBoardModel +import com.going.domain.entity.response.DashBoardModel.DashBoardTripModel import com.going.presentation.R import com.going.presentation.databinding.ItemDashBoardCompletedBinding import com.going.ui.extension.setOnSingleClickListener @@ -11,7 +11,7 @@ class CompletedViewHolder( private val listener: CompletedAdapter.OnDashBoardSelectedListener ) : RecyclerView.ViewHolder(binding.root) { - fun onBind(item: DashBoardModel.DashBoardTripModel) { + fun onBind(item: DashBoardTripModel) { binding.run { tvDashboardTripTitle.text = item.title diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingAdapter.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingAdapter.kt index b70b3c8e..91f58972 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingAdapter.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingAdapter.kt @@ -3,16 +3,16 @@ package com.going.presentation.dashboard.triplist import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.ListAdapter -import com.going.domain.entity.response.DashBoardModel +import com.going.domain.entity.response.DashBoardModel.DashBoardTripModel import com.going.presentation.databinding.ItemDashBoardOngoingBinding import com.going.ui.extension.ItemDiffCallback class OngoingAdapter( private val listener: OnDashBoardSelectedListener -) : ListAdapter(diffUtil) { +) : ListAdapter(diffUtil) { interface OnDashBoardSelectedListener { - fun onDashBoardSelectedListener(tripCreate: DashBoardModel.DashBoardTripModel) + fun onDashBoardSelectedListener(tripCreate: DashBoardTripModel) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OngoingViewHolder { @@ -30,7 +30,7 @@ class OngoingAdapter( } companion object { - private val diffUtil = ItemDiffCallback( + private val diffUtil = ItemDiffCallback( onItemsTheSame = { old, new -> old.title == new.title }, onContentsTheSame = { old, new -> old == new }, ) diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt index 2dcb925e..be255cbc 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt @@ -6,7 +6,7 @@ import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope -import com.going.domain.entity.response.DashBoardModel +import com.going.domain.entity.response.DashBoardModel.DashBoardTripModel import com.going.presentation.R import com.going.presentation.dashboard.DashBoardViewModel import com.going.presentation.databinding.FragmentOngoingTripBinding @@ -30,7 +30,7 @@ class OngoingTripFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - setRecyclerView() + initAdapter() initItemDecoration() setTripList() observeDashBoardListState() @@ -38,7 +38,7 @@ class OngoingTripFragment : } - private fun setRecyclerView() { + private fun initAdapter() { _adapter = OngoingAdapter(this) binding.rvDashboardOngoingTrip.adapter = adapter } @@ -80,7 +80,7 @@ class OngoingTripFragment : _adapter = null } - override fun onDashBoardSelectedListener(tripCreate: DashBoardModel.DashBoardTripModel) { + override fun onDashBoardSelectedListener(tripCreate: DashBoardTripModel) { } diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingViewHolder.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingViewHolder.kt index 08f97efd..66a8d17e 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingViewHolder.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingViewHolder.kt @@ -1,7 +1,7 @@ package com.going.presentation.dashboard.triplist import androidx.recyclerview.widget.RecyclerView -import com.going.domain.entity.response.DashBoardModel +import com.going.domain.entity.response.DashBoardModel.DashBoardTripModel import com.going.presentation.R import com.going.presentation.databinding.ItemDashBoardOngoingBinding import com.going.ui.extension.setOnSingleClickListener @@ -11,7 +11,7 @@ class OngoingViewHolder( private val listener: OngoingAdapter.OnDashBoardSelectedListener ) : RecyclerView.ViewHolder(binding.root) { - fun onBind(item: DashBoardModel.DashBoardTripModel) { + fun onBind(item: DashBoardTripModel) { binding.run { tvDashboardTripTitle.text = item.title tvDashboardDateStart.text = item.startDate diff --git a/presentation/src/main/res/layout/fragment_completed_trip.xml b/presentation/src/main/res/layout/fragment_completed_trip.xml index 2e8c87e5..d45a77d2 100644 --- a/presentation/src/main/res/layout/fragment_completed_trip.xml +++ b/presentation/src/main/res/layout/fragment_completed_trip.xml @@ -18,6 +18,7 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:orientation="vertical" + android:visibility="visible" app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -37,10 +38,9 @@ + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.67" /> + diff --git a/presentation/src/main/res/layout/fragment_ongoing_trip.xml b/presentation/src/main/res/layout/fragment_ongoing_trip.xml index b72a9fa7..55966c5f 100644 --- a/presentation/src/main/res/layout/fragment_ongoing_trip.xml +++ b/presentation/src/main/res/layout/fragment_ongoing_trip.xml @@ -38,10 +38,9 @@ + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintVertical_bias="0.67" /> From 5a756eb226d888ae8e68f705cb1c2e6227fa271e Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Fri, 12 Jan 2024 18:49:12 +0900 Subject: [PATCH 11/12] =?UTF-8?q?[FIX/#73]=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../main/java/com/going/data/datasource/SettingDataSource.kt | 4 ++-- .../main/java/com/going/data/datasource/TendencyDataSource.kt | 2 +- .../com/going/data/datasourceImpl/SettingDataSourceImpl.kt | 4 ++-- .../com/going/data/datasourceImpl/TendencyDataSourceImpl.kt | 2 +- data/src/main/java/com/going/data/dto/NonDataBaseResponse.kt | 2 +- data/src/main/java/com/going/data/service/SettingService.kt | 4 ++-- data/src/main/java/com/going/data/service/TendencyService.kt | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 61d8ac3c..71947879 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -81,7 +81,7 @@ - suspend fun deleteWithDraw(): NonDataBaseResponse + suspend fun deleteWithDraw(): NonDataBaseResponse } diff --git a/data/src/main/java/com/going/data/datasource/TendencyDataSource.kt b/data/src/main/java/com/going/data/datasource/TendencyDataSource.kt index 320da64e..2b9fb929 100644 --- a/data/src/main/java/com/going/data/datasource/TendencyDataSource.kt +++ b/data/src/main/java/com/going/data/datasource/TendencyDataSource.kt @@ -4,5 +4,5 @@ import com.going.data.dto.NonDataBaseResponse import com.going.data.dto.request.TendencyTestRequestDto interface TendencyDataSource { - suspend fun patchTendencyTest(result: TendencyTestRequestDto): NonDataBaseResponse + suspend fun patchTendencyTest(result: TendencyTestRequestDto): NonDataBaseResponse } diff --git a/data/src/main/java/com/going/data/datasourceImpl/SettingDataSourceImpl.kt b/data/src/main/java/com/going/data/datasourceImpl/SettingDataSourceImpl.kt index af959b78..7bde298b 100644 --- a/data/src/main/java/com/going/data/datasourceImpl/SettingDataSourceImpl.kt +++ b/data/src/main/java/com/going/data/datasourceImpl/SettingDataSourceImpl.kt @@ -8,6 +8,6 @@ import javax.inject.Inject class SettingDataSourceImpl @Inject constructor( private val settingService: SettingService, ) : SettingDataSource { - override suspend fun patchSignOut(): NonDataBaseResponse = settingService.patchSignOut() - override suspend fun deleteWithDraw(): NonDataBaseResponse = settingService.deleteWithDraw() + override suspend fun patchSignOut(): NonDataBaseResponse = settingService.patchSignOut() + override suspend fun deleteWithDraw(): NonDataBaseResponse = settingService.deleteWithDraw() } diff --git a/data/src/main/java/com/going/data/datasourceImpl/TendencyDataSourceImpl.kt b/data/src/main/java/com/going/data/datasourceImpl/TendencyDataSourceImpl.kt index 125e883f..4b789df5 100644 --- a/data/src/main/java/com/going/data/datasourceImpl/TendencyDataSourceImpl.kt +++ b/data/src/main/java/com/going/data/datasourceImpl/TendencyDataSourceImpl.kt @@ -9,6 +9,6 @@ import javax.inject.Inject class TendencyDataSourceImpl @Inject constructor( private val tendencyService: TendencyService, ) : TendencyDataSource { - override suspend fun patchTendencyTest(result: TendencyTestRequestDto): NonDataBaseResponse = + override suspend fun patchTendencyTest(result: TendencyTestRequestDto): NonDataBaseResponse = tendencyService.patchTendencyTest(result) } diff --git a/data/src/main/java/com/going/data/dto/NonDataBaseResponse.kt b/data/src/main/java/com/going/data/dto/NonDataBaseResponse.kt index 24f56e49..3138cd55 100644 --- a/data/src/main/java/com/going/data/dto/NonDataBaseResponse.kt +++ b/data/src/main/java/com/going/data/dto/NonDataBaseResponse.kt @@ -4,7 +4,7 @@ import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable -data class NonDataBaseResponse( +data class NonDataBaseResponse( @SerialName("status") val status: Int, @SerialName("code") diff --git a/data/src/main/java/com/going/data/service/SettingService.kt b/data/src/main/java/com/going/data/service/SettingService.kt index 43ef8bd2..e7c7fafb 100644 --- a/data/src/main/java/com/going/data/service/SettingService.kt +++ b/data/src/main/java/com/going/data/service/SettingService.kt @@ -6,8 +6,8 @@ import retrofit2.http.PATCH interface SettingService { @PATCH("api/users/signout") - suspend fun patchSignOut(): NonDataBaseResponse + suspend fun patchSignOut(): NonDataBaseResponse @DELETE("api/users/withdraw") - suspend fun deleteWithDraw(): NonDataBaseResponse + suspend fun deleteWithDraw(): NonDataBaseResponse } diff --git a/data/src/main/java/com/going/data/service/TendencyService.kt b/data/src/main/java/com/going/data/service/TendencyService.kt index 5ed0eb84..4c0f6141 100644 --- a/data/src/main/java/com/going/data/service/TendencyService.kt +++ b/data/src/main/java/com/going/data/service/TendencyService.kt @@ -9,5 +9,5 @@ interface TendencyService { @PATCH("api/users/test") suspend fun patchTendencyTest( @Body result: TendencyTestRequestDto, - ): NonDataBaseResponse + ): NonDataBaseResponse } From 992a39d8d8c7d234b9698f894417796d9075986c Mon Sep 17 00:00:00 2001 From: LEE YOU BIN Date: Fri, 12 Jan 2024 19:21:38 +0900 Subject: [PATCH 12/12] =?UTF-8?q?[FIX/#73]=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/dashboard/triplist/CompletedTripFragment.kt | 2 +- .../presentation/dashboard/triplist/OngoingTripFragment.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt index f0061c4f..ecbd0419 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/CompletedTripFragment.kt @@ -48,7 +48,7 @@ class CompletedTripFragment : } private fun setTripList() { - val progress = "complete" + val progress = DashBoardViewModel.COMPLETED viewModel.getTripListFromServer(progress) } diff --git a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt index be255cbc..8534a2bc 100644 --- a/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt +++ b/presentation/src/main/java/com/going/presentation/dashboard/triplist/OngoingTripFragment.kt @@ -49,7 +49,7 @@ class OngoingTripFragment : } private fun setTripList() { - val progress = "incomplete" + val progress = DashBoardViewModel.ONGOING viewModel.getTripListFromServer(progress) }