Skip to content

책임 분리에 관하여

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")
    }
}
  1. DataStore에 접근하기 위한 Preference 키를 Repository에서 관리해야함.

  2. 다른 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에 관한 코드를 모두 위임하여 관리하기 수월!!

⚽️협업 룰

코딩 컨벤션

📔회고

팀 회고

개인 회고

K004 김근범

K016 박찬민

K032 이해림

J153 차세찬

J156 최다정

👨‍🏫멘토링 회의록

💻개발일지

Android

K004 김근범

K016 박찬민

K032 이해림

J153 차세찬

J156 최다정

💡트러블슈팅

Android

K004 김근범

K016 박찬민

K032 이해림

J153 차세찬

J156 최다정

📋회의록

스크럼 회의

스프린트 회의

밋밋 회의

공통

BackEnd

Android

기획

Clone this wiki locally