From fb985fd02e16d1a26c4cd6e8787dc2545e17adf4 Mon Sep 17 00:00:00 2001 From: boiledegg Date: Fri, 7 Jun 2024 16:41:59 +0900 Subject: [PATCH] =?UTF-8?q?CHORE/#19:=20=EC=A0=80=EC=9E=A5=EC=86=8C=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=ED=8C=8C=EC=9D=BC=EC=B6=94=EA=B0=80,=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=EC=88=98=EC=A0=95,=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=EA=B5=AC=EC=A1=B0=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../now/compose/container/AppContainer.kt | 13 ++++++++ .../now/compose/container/SoptAppContainer.kt | 30 +++++++++---------- .../AuthRepositoryImpl.kt} | 13 ++------ .../FollowerRepositoryImpl.kt} | 10 ++----- .../MemberRepositoryImpl.kt} | 14 ++------- .../UserRepositoryImpl.kt} | 19 +++--------- .../container/repository/AuthRepository.kt | 14 +++++++++ .../repository/FollowerRepository.kt | 10 +++++++ .../container/repository/MemberRepository.kt | 13 ++++++++ .../container/repository/UserRepository.kt | 14 +++++++++ .../compose/ui/screens/home/HomeViewModel.kt | 13 ++------ .../ui/screens/login/LoginViewModel.kt | 8 ++--- .../ui/screens/profile/ProfileViewModel.kt | 4 +-- .../ui/screens/signup/SignUpViewModel.kt | 4 +-- 14 files changed, 102 insertions(+), 77 deletions(-) create mode 100644 app/src/main/java/com/sopt/now/compose/container/AppContainer.kt rename app/src/main/java/com/sopt/now/compose/container/{AuthRepository.kt => impl/AuthRepositoryImpl.kt} (62%) rename app/src/main/java/com/sopt/now/compose/container/{FollowerRepository.kt => impl/FollowerRepositoryImpl.kt} (60%) rename app/src/main/java/com/sopt/now/compose/container/{MemberRepository.kt => impl/MemberRepositoryImpl.kt} (72%) rename app/src/main/java/com/sopt/now/compose/container/{UserRepository.kt => impl/UserRepositoryImpl.kt} (74%) create mode 100644 app/src/main/java/com/sopt/now/compose/container/repository/AuthRepository.kt create mode 100644 app/src/main/java/com/sopt/now/compose/container/repository/FollowerRepository.kt create mode 100644 app/src/main/java/com/sopt/now/compose/container/repository/MemberRepository.kt create mode 100644 app/src/main/java/com/sopt/now/compose/container/repository/UserRepository.kt diff --git a/app/src/main/java/com/sopt/now/compose/container/AppContainer.kt b/app/src/main/java/com/sopt/now/compose/container/AppContainer.kt new file mode 100644 index 0000000..1fd26ef --- /dev/null +++ b/app/src/main/java/com/sopt/now/compose/container/AppContainer.kt @@ -0,0 +1,13 @@ +package com.sopt.now.compose.container + +import com.sopt.now.compose.container.impl.AuthRepositoryImpl +import com.sopt.now.compose.container.impl.FollowerRepositoryImpl +import com.sopt.now.compose.container.impl.MemberRepositoryImpl +import com.sopt.now.compose.container.impl.UserRepositoryImpl + +interface AppContainer{ + val userRepository: UserRepositoryImpl + val followRepository: FollowerRepositoryImpl + val memberRepository: MemberRepositoryImpl + val authRepository: AuthRepositoryImpl +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/compose/container/SoptAppContainer.kt b/app/src/main/java/com/sopt/now/compose/container/SoptAppContainer.kt index 07fe611..d67ecf7 100644 --- a/app/src/main/java/com/sopt/now/compose/container/SoptAppContainer.kt +++ b/app/src/main/java/com/sopt/now/compose/container/SoptAppContainer.kt @@ -3,7 +3,11 @@ package com.sopt.now.compose.container import android.content.Context import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory import com.sopt.now.compose.BuildConfig -import com.sopt.now.compose.container.PreferenceUserRepository.Companion.USER_ID_KEY +import com.sopt.now.compose.container.impl.UserRepositoryImpl.Companion.USER_ID_KEY +import com.sopt.now.compose.container.impl.AuthRepositoryImpl +import com.sopt.now.compose.container.impl.FollowerRepositoryImpl +import com.sopt.now.compose.container.impl.MemberRepositoryImpl +import com.sopt.now.compose.container.impl.UserRepositoryImpl import com.sopt.now.compose.network.FollowService import com.sopt.now.compose.network.AuthService import kotlinx.serialization.json.Json @@ -11,32 +15,26 @@ import okhttp3.Interceptor import okhttp3.MediaType.Companion.toMediaType import okhttp3.OkHttpClient import retrofit2.Retrofit -import retrofit2.create -interface AppContainer{ - val userRepository: PreferenceUserRepository - val followRepository: NetworkFollowerRepository - val memberRepository: NetworkMemberRepository - val authRepository: NetworkAuthRepository -} + class SoptAppContainer(context: Context): AppContainer { - override val userRepository: PreferenceUserRepository by lazy { - PreferenceUserRepository(context.getSharedPreferences(PREFERENCE_ID, Context.MODE_PRIVATE)) + override val userRepository: UserRepositoryImpl by lazy { + UserRepositoryImpl(context.getSharedPreferences(PREFERENCE_ID, Context.MODE_PRIVATE)) } - override val followRepository: NetworkFollowerRepository by lazy { - NetworkFollowerRepository(followService = retrofitFollower.create(FollowService::class.java)) + override val followRepository: FollowerRepositoryImpl by lazy { + FollowerRepositoryImpl(followService = retrofitFollower.create(FollowService::class.java)) } - override val memberRepository: NetworkMemberRepository by lazy { - NetworkMemberRepository(authService = retrofitUser.create(AuthService::class.java)) + override val memberRepository: MemberRepositoryImpl by lazy { + MemberRepositoryImpl(authService = retrofitUser.create(AuthService::class.java)) } - override val authRepository: NetworkAuthRepository by lazy { - NetworkAuthRepository(authService = retrofitLogin.create(AuthService::class.java)) + override val authRepository: AuthRepositoryImpl by lazy { + AuthRepositoryImpl(authService = retrofitLogin.create(AuthService::class.java)) } val retrofitLogin: Retrofit by lazy { diff --git a/app/src/main/java/com/sopt/now/compose/container/AuthRepository.kt b/app/src/main/java/com/sopt/now/compose/container/impl/AuthRepositoryImpl.kt similarity index 62% rename from app/src/main/java/com/sopt/now/compose/container/AuthRepository.kt rename to app/src/main/java/com/sopt/now/compose/container/impl/AuthRepositoryImpl.kt index fea7063..6420171 100644 --- a/app/src/main/java/com/sopt/now/compose/container/AuthRepository.kt +++ b/app/src/main/java/com/sopt/now/compose/container/impl/AuthRepositoryImpl.kt @@ -1,21 +1,14 @@ -package com.sopt.now.compose.container +package com.sopt.now.compose.container.impl +import com.sopt.now.compose.container.repository.AuthRepository import com.sopt.now.compose.network.AuthService import com.sopt.now.compose.network.dto.RequestLoginDto import com.sopt.now.compose.network.dto.RequestSignUpDto import com.sopt.now.compose.network.dto.ResponseLoginDto import com.sopt.now.compose.network.dto.ResponseSignUpDto -import com.sopt.now.compose.ui.screens.login.LoginViewModel -import kotlinx.serialization.json.Json -import kotlinx.serialization.json.jsonObject import retrofit2.Response -interface AuthRepository { - suspend fun postLogin(request: RequestLoginDto): Result> - suspend fun postSignUp(request: RequestSignUpDto): Result> -} - -class NetworkAuthRepository( +class AuthRepositoryImpl( private val authService: AuthService ) : AuthRepository { override suspend fun postLogin(request: RequestLoginDto): Result> = diff --git a/app/src/main/java/com/sopt/now/compose/container/FollowerRepository.kt b/app/src/main/java/com/sopt/now/compose/container/impl/FollowerRepositoryImpl.kt similarity index 60% rename from app/src/main/java/com/sopt/now/compose/container/FollowerRepository.kt rename to app/src/main/java/com/sopt/now/compose/container/impl/FollowerRepositoryImpl.kt index e5f0879..2cecddc 100644 --- a/app/src/main/java/com/sopt/now/compose/container/FollowerRepository.kt +++ b/app/src/main/java/com/sopt/now/compose/container/impl/FollowerRepositoryImpl.kt @@ -1,15 +1,11 @@ -package com.sopt.now.compose.container +package com.sopt.now.compose.container.impl -import com.sopt.now.compose.models.Follower +import com.sopt.now.compose.container.repository.FollowerRepository import com.sopt.now.compose.network.FollowService import com.sopt.now.compose.network.dto.ResponseFollowListDto import retrofit2.Response -interface FollowerRepository{ - suspend fun getFollowers(page: Int = 2): Result> -} - -class NetworkFollowerRepository( +class FollowerRepositoryImpl( private val followService: FollowService ): FollowerRepository { override suspend fun getFollowers(page: Int): Result> = runCatching { diff --git a/app/src/main/java/com/sopt/now/compose/container/MemberRepository.kt b/app/src/main/java/com/sopt/now/compose/container/impl/MemberRepositoryImpl.kt similarity index 72% rename from app/src/main/java/com/sopt/now/compose/container/MemberRepository.kt rename to app/src/main/java/com/sopt/now/compose/container/impl/MemberRepositoryImpl.kt index 50b8d2d..12bceeb 100644 --- a/app/src/main/java/com/sopt/now/compose/container/MemberRepository.kt +++ b/app/src/main/java/com/sopt/now/compose/container/impl/MemberRepositoryImpl.kt @@ -1,21 +1,13 @@ -package com.sopt.now.compose.container +package com.sopt.now.compose.container.impl +import com.sopt.now.compose.container.repository.MemberRepository import com.sopt.now.compose.models.User import com.sopt.now.compose.network.AuthService import com.sopt.now.compose.network.dto.RequestChangePasswordDto import com.sopt.now.compose.network.dto.ResponseChangePasswordDto import retrofit2.Response -private const val TAG = "AuthRepository" - -interface MemberRepository { - suspend fun getUserInfo(): Result - suspend fun patchUserPassword( - request: RequestChangePasswordDto - ): Response -} - -class NetworkMemberRepository( +class MemberRepositoryImpl( private val authService: AuthService ) : MemberRepository { override suspend fun getUserInfo(): Result = runCatching { diff --git a/app/src/main/java/com/sopt/now/compose/container/UserRepository.kt b/app/src/main/java/com/sopt/now/compose/container/impl/UserRepositoryImpl.kt similarity index 74% rename from app/src/main/java/com/sopt/now/compose/container/UserRepository.kt rename to app/src/main/java/com/sopt/now/compose/container/impl/UserRepositoryImpl.kt index 591ba61..ccfe51c 100644 --- a/app/src/main/java/com/sopt/now/compose/container/UserRepository.kt +++ b/app/src/main/java/com/sopt/now/compose/container/impl/UserRepositoryImpl.kt @@ -1,21 +1,11 @@ -package com.sopt.now.compose.container +package com.sopt.now.compose.container.impl import android.content.SharedPreferences -import android.util.Log +import com.sopt.now.compose.container.repository.UserRepository import com.sopt.now.compose.models.User -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -interface UserRepository { - suspend fun getUserProfile(): User? - suspend fun setUserProfile(user: User) - - suspend fun getUserId(): String - suspend fun setUserId(userId: String) -} - -class PreferenceUserRepository( - val sharedPreferences: SharedPreferences +class UserRepositoryImpl( + private val sharedPreferences: SharedPreferences ) : UserRepository { override suspend fun getUserProfile(): User { sharedPreferences.run { @@ -43,7 +33,6 @@ class PreferenceUserRepository( } override suspend fun setUserId(userId: String) { - Log.d(TAG, "userId: $userId") val edit = sharedPreferences.edit() edit.putString(USER_ID_KEY, userId).apply() diff --git a/app/src/main/java/com/sopt/now/compose/container/repository/AuthRepository.kt b/app/src/main/java/com/sopt/now/compose/container/repository/AuthRepository.kt new file mode 100644 index 0000000..b997f17 --- /dev/null +++ b/app/src/main/java/com/sopt/now/compose/container/repository/AuthRepository.kt @@ -0,0 +1,14 @@ +package com.sopt.now.compose.container.repository + +import com.sopt.now.compose.network.AuthService +import com.sopt.now.compose.network.dto.RequestLoginDto +import com.sopt.now.compose.network.dto.RequestSignUpDto +import com.sopt.now.compose.network.dto.ResponseLoginDto +import com.sopt.now.compose.network.dto.ResponseSignUpDto +import retrofit2.Response + +interface AuthRepository { + suspend fun postLogin(request: RequestLoginDto): Result> + suspend fun postSignUp(request: RequestSignUpDto): Result> +} + diff --git a/app/src/main/java/com/sopt/now/compose/container/repository/FollowerRepository.kt b/app/src/main/java/com/sopt/now/compose/container/repository/FollowerRepository.kt new file mode 100644 index 0000000..8230473 --- /dev/null +++ b/app/src/main/java/com/sopt/now/compose/container/repository/FollowerRepository.kt @@ -0,0 +1,10 @@ +package com.sopt.now.compose.container.repository + +import com.sopt.now.compose.network.FollowService +import com.sopt.now.compose.network.dto.ResponseFollowListDto +import retrofit2.Response + +interface FollowerRepository{ + suspend fun getFollowers(page: Int = 2): Result> +} + diff --git a/app/src/main/java/com/sopt/now/compose/container/repository/MemberRepository.kt b/app/src/main/java/com/sopt/now/compose/container/repository/MemberRepository.kt new file mode 100644 index 0000000..6d5ebd6 --- /dev/null +++ b/app/src/main/java/com/sopt/now/compose/container/repository/MemberRepository.kt @@ -0,0 +1,13 @@ +package com.sopt.now.compose.container.repository + +import com.sopt.now.compose.models.User +import com.sopt.now.compose.network.dto.RequestChangePasswordDto +import com.sopt.now.compose.network.dto.ResponseChangePasswordDto +import retrofit2.Response + +interface MemberRepository { + suspend fun getUserInfo(): Result + suspend fun patchUserPassword( + request: RequestChangePasswordDto + ): Response +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/now/compose/container/repository/UserRepository.kt b/app/src/main/java/com/sopt/now/compose/container/repository/UserRepository.kt new file mode 100644 index 0000000..ed52578 --- /dev/null +++ b/app/src/main/java/com/sopt/now/compose/container/repository/UserRepository.kt @@ -0,0 +1,14 @@ +package com.sopt.now.compose.container.repository + +import android.content.SharedPreferences +import android.util.Log +import com.sopt.now.compose.models.User + +interface UserRepository { + suspend fun getUserProfile(): User? + suspend fun setUserProfile(user: User) + + suspend fun getUserId(): String + suspend fun setUserId(userId: String) +} + diff --git a/app/src/main/java/com/sopt/now/compose/ui/screens/home/HomeViewModel.kt b/app/src/main/java/com/sopt/now/compose/ui/screens/home/HomeViewModel.kt index 42c2793..9c62fbe 100644 --- a/app/src/main/java/com/sopt/now/compose/ui/screens/home/HomeViewModel.kt +++ b/app/src/main/java/com/sopt/now/compose/ui/screens/home/HomeViewModel.kt @@ -1,21 +1,14 @@ package com.sopt.now.compose.ui.screens.home import android.util.Log -import androidx.compose.runtime.MutableState -import androidx.compose.runtime.mutableStateOf import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewmodel.initializer import androidx.lifecycle.viewmodel.viewModelFactory -import androidx.navigation.NavHostController -import com.sopt.now.compose.MainActivity.Companion.NAVIGATE_BACK_PRESSED_KEY -import com.sopt.now.compose.MainActivity.Companion.NAVIGATE_LOGIN_KEY import com.sopt.now.compose.SoptApplication -import com.sopt.now.compose.container.FollowerRepository -import com.sopt.now.compose.container.NetworkMemberRepository -import com.sopt.now.compose.models.Follower -import com.sopt.now.compose.models.User +import com.sopt.now.compose.container.repository.FollowerRepository +import com.sopt.now.compose.container.impl.MemberRepositoryImpl import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow @@ -25,7 +18,7 @@ private const val TAG = "HomeViewModel" class HomeViewModel( private val followerRepository: FollowerRepository, - private val authRepository: NetworkMemberRepository + private val authRepository: MemberRepositoryImpl ) : ViewModel() { private val _uiState = MutableStateFlow(HomeUiState.Loading()) diff --git a/app/src/main/java/com/sopt/now/compose/ui/screens/login/LoginViewModel.kt b/app/src/main/java/com/sopt/now/compose/ui/screens/login/LoginViewModel.kt index 17b5151..5620750 100644 --- a/app/src/main/java/com/sopt/now/compose/ui/screens/login/LoginViewModel.kt +++ b/app/src/main/java/com/sopt/now/compose/ui/screens/login/LoginViewModel.kt @@ -7,8 +7,8 @@ import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewmodel.initializer import androidx.lifecycle.viewmodel.viewModelFactory import com.sopt.now.compose.SoptApplication -import com.sopt.now.compose.container.NetworkAuthRepository -import com.sopt.now.compose.container.PreferenceUserRepository +import com.sopt.now.compose.container.impl.AuthRepositoryImpl +import com.sopt.now.compose.container.impl.UserRepositoryImpl import com.sopt.now.compose.network.dto.RequestLoginDto import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -19,8 +19,8 @@ import kotlinx.serialization.json.Json import kotlinx.serialization.json.jsonObject class LoginViewModel( - private val userRepository: PreferenceUserRepository, - private val authRepository: NetworkAuthRepository + private val userRepository: UserRepositoryImpl, + private val authRepository: AuthRepositoryImpl ): ViewModel() { private val _uiState = MutableStateFlow(LoginUiState()) val uiState: StateFlow = _uiState.asStateFlow() diff --git a/app/src/main/java/com/sopt/now/compose/ui/screens/profile/ProfileViewModel.kt b/app/src/main/java/com/sopt/now/compose/ui/screens/profile/ProfileViewModel.kt index 49af2f2..6568107 100644 --- a/app/src/main/java/com/sopt/now/compose/ui/screens/profile/ProfileViewModel.kt +++ b/app/src/main/java/com/sopt/now/compose/ui/screens/profile/ProfileViewModel.kt @@ -7,7 +7,7 @@ import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewmodel.initializer import androidx.lifecycle.viewmodel.viewModelFactory import com.sopt.now.compose.SoptApplication -import com.sopt.now.compose.container.NetworkMemberRepository +import com.sopt.now.compose.container.impl.MemberRepositoryImpl import com.sopt.now.compose.models.User import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -15,7 +15,7 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch class ProfileViewModel( - private val authRepository: NetworkMemberRepository + private val authRepository: MemberRepositoryImpl ): ViewModel() { private val _uiState = MutableStateFlow(ProfileUiState.Loading) val uiState: StateFlow = _uiState.asStateFlow() diff --git a/app/src/main/java/com/sopt/now/compose/ui/screens/signup/SignUpViewModel.kt b/app/src/main/java/com/sopt/now/compose/ui/screens/signup/SignUpViewModel.kt index 80ca7d4..9da4b38 100644 --- a/app/src/main/java/com/sopt/now/compose/ui/screens/signup/SignUpViewModel.kt +++ b/app/src/main/java/com/sopt/now/compose/ui/screens/signup/SignUpViewModel.kt @@ -6,7 +6,7 @@ import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewmodel.initializer import androidx.lifecycle.viewmodel.viewModelFactory import com.sopt.now.compose.SoptApplication -import com.sopt.now.compose.container.NetworkAuthRepository +import com.sopt.now.compose.container.impl.AuthRepositoryImpl import com.sopt.now.compose.network.dto.RequestSignUpDto import com.sopt.now.compose.ui.screens.login.LoginViewModel import kotlinx.coroutines.flow.MutableStateFlow @@ -18,7 +18,7 @@ import kotlinx.serialization.json.Json import kotlinx.serialization.json.jsonObject class SignUpViewModel( - private val authRepository: NetworkAuthRepository + private val authRepository: AuthRepositoryImpl ): ViewModel() { private val _uiState = MutableStateFlow(SignUpState()) val uiState: StateFlow = _uiState.asStateFlow()