-
Notifications
You must be signed in to change notification settings - Fork 0
책임 분리에 관하여
KimGeunBeom edited this page Nov 19, 2023
·
1 revision
우리 팀은 큰 이슈가 없다면 repository에서 바로 api를 참조하여 호출하는 형식을 가지고 있다.
DataStore 또한 repository에서 참조하여 활용하는 중!!
그러다 보니 생기는 문제…
class LoginRepository @Inject constructor(
private val loginApi: LoginApi,
private val dataStore: DataStore<Preferences>
) {
fun loginKakao(id: Long): Flow<Unit> {
return flowOf(true)
.map {
val response = loginApi.loginKakao(kakaoLoginRequest = KakaoLoginRequest(id.toString()))
storeAppToken(response.accessToken, response.refreshToken)
}.catch {
throw it
//TODO("추가 예외처리 필요")
}
}
fun autoLoginApp(token: String) :Flow<Unit> {
return flowOf(true)
.map {
val response = loginApi.autoLoginApp(AutoLoginRequest(token))
storeAppToken(response.accessToken, response.refreshToken)
}.catch {
throw it
//TODO("추가 예외처리 필요")
}
}
private suspend fun storeAppToken(accessToken: String, refreshToken: String) {
dataStore.edit{
it[ACCESS_TOKEN] = accessToken
it[REFRESH_TOKEN] = refreshToken
}
}
companion object {
val ACCESS_TOKEN = stringPreferencesKey("accessToken")
val REFRESH_TOKEN = stringPreferencesKey("refreshToken")
}
}
-
DataStore에 접근하기 위한 Preference 키를 Repository에서 관리해야함.
-
다른 Repository에서 중복된 코드가 발생
이를 해결하기 위해 DataStore에 접근하고 키를 관리할 수 있는 클래스를 만들어 보자!!!
class DataStoreHelper @Inject constructor(
private val dataStore: DataStore<Preferences>
) {
@Provides
@Singleton
fun provideDataStore(dataStore: DataStore<Preferences>): DataStoreHelper = DataStoreHelper(dataStore)
- 클래스에서 DataStore를 참조함. 이를 싱글톤으로 관리하기 위하여 Singleton의 형태로 의존성 주입
이후 DataStoreHelper
에서 키를 관리하고 데이터를 넣고 빼는 함수들을 모두 담당하도록 변경!!!
- 중복된 코드가 없어짐!!!
- DataStore에 관한 코드를 모두 위임하여 관리하기 수월!!
- Week1 - Day01
- Week1 - Day02
- Week1 - Day03
- Week1 - Day04
- Week2 - Day01
- Week2 - Day02
- Week2 - Day03
- Week2 - Day04
- Week3 - Day01
- Week3 - Day02
- Week3 - Day03
- Week3 - Day04
- Week4 - Day01
- Week4 - Day02
- Week4 - Day03
- Week4 - Day04
- Week4 - Day05
- Week5 - Day01
- Week5 - Day02
- Week5 - Day03
- Week5 - Day04
- Week6 - Day01
- Week6 - Day02