From 0dac1b4c4a5c7fcfcc955cc48bc0a2c31d1972c4 Mon Sep 17 00:00:00 2001 From: arinming Date: Fri, 24 May 2024 17:11:33 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[Refactor]=20Log=20=EC=82=AD=EC=A0=9C=20(#1?= =?UTF-8?q?4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/sopt/now/data/module/ApiFactory.kt | 2 +- .../main/java/com/sopt/now/ui/home/viewModel/HomeViewModel.kt | 3 --- .../java/com/sopt/now/ui/myPage/viewModel/MyPageViewModel.kt | 2 -- 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt b/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt index b293622..41a0abf 100644 --- a/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt +++ b/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt @@ -1,7 +1,7 @@ package com.sopt.now.data.module import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory -import com.sopt.now.BuildConfig +import com.sopt.now.compose.BuildConfig import com.sopt.now.data.network.AuthService import com.sopt.now.data.network.FollowerService import kotlinx.serialization.json.Json diff --git a/app/src/main/java/com/sopt/now/ui/home/viewModel/HomeViewModel.kt b/app/src/main/java/com/sopt/now/ui/home/viewModel/HomeViewModel.kt index 7d6c591..0c37aa6 100644 --- a/app/src/main/java/com/sopt/now/ui/home/viewModel/HomeViewModel.kt +++ b/app/src/main/java/com/sopt/now/ui/home/viewModel/HomeViewModel.kt @@ -1,6 +1,5 @@ package com.sopt.now.ui.home.viewModel -import android.util.Log import androidx.lifecycle.ViewModel import com.sopt.now.R import com.sopt.now.data.model.ItemData @@ -42,13 +41,11 @@ class HomeViewModel : ViewModel() { if (data != null) { _followerState.value = data mapFollowersToFriendList(data) - Log.d("FOLLOWER", "$data") } } } override fun onFailure(call: Call, t: Throwable) { - Log.e("HomeError", "${t.message}") } }) } diff --git a/app/src/main/java/com/sopt/now/ui/myPage/viewModel/MyPageViewModel.kt b/app/src/main/java/com/sopt/now/ui/myPage/viewModel/MyPageViewModel.kt index f8ced4e..9b55f15 100644 --- a/app/src/main/java/com/sopt/now/ui/myPage/viewModel/MyPageViewModel.kt +++ b/app/src/main/java/com/sopt/now/ui/myPage/viewModel/MyPageViewModel.kt @@ -1,6 +1,5 @@ package com.sopt.now.ui.myPage.viewModel -import android.util.Log import androidx.lifecycle.ViewModel import com.sopt.now.data.model.ResponseInfoDto import com.sopt.now.data.model.UserInfo @@ -46,7 +45,6 @@ class MyPageViewModel : ViewModel() { } override fun onFailure(call: Call, t: Throwable) { - Log.e("MyPageError", "${t.message}") } }) } From 272f70790cfb90c35cd7f79bb1b7625cd30defcf Mon Sep 17 00:00:00 2001 From: arinming Date: Fri, 24 May 2024 17:17:34 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[Feat]=20createBaseRetrofit=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20(#14)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/com/sopt/now/data/module/ApiFactory.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt b/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt index 41a0abf..9c7ae56 100644 --- a/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt +++ b/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt @@ -8,6 +8,7 @@ import kotlinx.serialization.json.Json import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import retrofit2.Retrofit +import retrofit2.create object ApiFactory { private const val BASE_URL: String = BuildConfig.AUTH_BASE_URL @@ -31,11 +32,11 @@ object ApiFactory { .build() } - inline fun createBase(): T = baseRetrofit.create(T::class.java) - inline fun createFollower(): T = followerRetrofit.create(T::class.java) + inline fun createBaseRetrofit(): T = baseRetrofit.create() + inline fun createFollowerRetrofit(): T = followerRetrofit.create() } object ServicePool { - val authService = ApiFactory.createBase() - val followerService = ApiFactory.createFollower() + val authService = ApiFactory.createBaseRetrofit() + val followerService = ApiFactory.createFollowerRetrofit() } \ No newline at end of file From 1b3bd06395061a64b186d961ed92caf53c4397ce Mon Sep 17 00:00:00 2001 From: arinming Date: Fri, 7 Jun 2024 21:22:17 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[Feat]=20follower=20repository=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20(#17)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/sopt/now/data/module/ApiFactory.kt | 2 +- .../sopt/now/repository/FollowerRepository.kt | 17 ++++++ .../java/com/sopt/now/ui/home/HomeFragment.kt | 7 ++- .../now/ui/home/viewModel/HomeViewModel.kt | 53 ++++++++++++------- 4 files changed, 56 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/com/sopt/now/repository/FollowerRepository.kt diff --git a/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt b/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt index 9c7ae56..b87fdae 100644 --- a/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt +++ b/app/src/main/java/com/sopt/now/data/module/ApiFactory.kt @@ -1,7 +1,7 @@ package com.sopt.now.data.module import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory -import com.sopt.now.compose.BuildConfig +import com.sopt.now.BuildConfig import com.sopt.now.data.network.AuthService import com.sopt.now.data.network.FollowerService import kotlinx.serialization.json.Json diff --git a/app/src/main/java/com/sopt/now/repository/FollowerRepository.kt b/app/src/main/java/com/sopt/now/repository/FollowerRepository.kt new file mode 100644 index 0000000..45ec7ec --- /dev/null +++ b/app/src/main/java/com/sopt/now/repository/FollowerRepository.kt @@ -0,0 +1,17 @@ +package com.sopt.now.repository + +import com.sopt.now.data.model.UserDataResponse +import com.sopt.now.data.module.ServicePool +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import retrofit2.Response + +class FollowerRepository { + private val followerService = ServicePool.followerService + + suspend fun getUserList(page: Int): Response { + return withContext(Dispatchers.IO) { + followerService.getUserList(page).execute() + } + } +} diff --git a/app/src/main/java/com/sopt/now/ui/home/HomeFragment.kt b/app/src/main/java/com/sopt/now/ui/home/HomeFragment.kt index bcdaa64..303d55c 100644 --- a/app/src/main/java/com/sopt/now/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/sopt/now/ui/home/HomeFragment.kt @@ -39,9 +39,9 @@ class HomeFragment : Fragment() { setCollect() } - override fun onDestroy() { + override fun onDestroyView() { _binding = null - super.onDestroy() + super.onDestroyView() } private fun setCollect() { @@ -56,8 +56,7 @@ class HomeFragment : Fragment() { private fun setAdapter() { val friendAdapter = ItemAdapter(viewModel.friendList) - binding.rvFriends.layoutManager = LinearLayoutManager(requireContext()) binding.rvFriends.adapter = friendAdapter } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/sopt/now/ui/home/viewModel/HomeViewModel.kt b/app/src/main/java/com/sopt/now/ui/home/viewModel/HomeViewModel.kt index 0c37aa6..3ecedad 100644 --- a/app/src/main/java/com/sopt/now/ui/home/viewModel/HomeViewModel.kt +++ b/app/src/main/java/com/sopt/now/ui/home/viewModel/HomeViewModel.kt @@ -1,22 +1,27 @@ package com.sopt.now.ui.home.viewModel +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope import com.sopt.now.R import com.sopt.now.data.model.ItemData import com.sopt.now.data.model.UserData -import com.sopt.now.data.model.UserDataResponse -import com.sopt.now.data.module.ServicePool +import com.sopt.now.repository.FollowerRepository import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response +import kotlinx.coroutines.launch +import java.io.IOException class HomeViewModel : ViewModel() { - private val followerService by lazy { ServicePool.followerService } + private val followerRepository = FollowerRepository() private val _followerState = MutableStateFlow>(emptyList()) val followerState = _followerState.asStateFlow() + private var _eventNetworkError = MutableLiveData(false) + val eventNetworkError: LiveData + get() = _eventNetworkError + private var _isNetworkErrorShown = MutableLiveData(false) val friendList = mutableListOf( ItemData.MyProfile( @@ -31,26 +36,38 @@ class HomeViewModel : ViewModel() { } private fun fetchFollowerList() { - followerService.getUserList(page = 0).enqueue(object : Callback { - override fun onResponse( - call: Call, - response: Response, - ) { + viewModelScope.launch { + try { + val response = followerRepository.getUserList(0) if (response.isSuccessful) { - val data = response.body()?.data - if (data != null) { + response.body()?.data?.let { data -> _followerState.value = data mapFollowersToFriendList(data) } + _eventNetworkError.value = false + _isNetworkErrorShown.value = false + } else { + _eventNetworkError.value = true } + } catch (networkError: IOException) { + _eventNetworkError.value = true } + } + } - override fun onFailure(call: Call, t: Throwable) { - } - }) + fun onNetworkErrorShown() { + _isNetworkErrorShown.value = true } - fun mapFollowersToFriendList(followers: List) { + private fun mapFollowersToFriendList(followers: List) { + friendList.clear() + friendList.add( + ItemData.MyProfile( + profileImage = R.drawable.img_arin, + name = "김아린", + description = "업보 청산 중..", + ), + ) friendList.addAll(followers.map { follower -> ItemData.Friend( profileImage = follower.avatar, @@ -59,4 +76,4 @@ class HomeViewModel : ViewModel() { ) }) } -} \ No newline at end of file +}