Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/init datastore #6

Merged
merged 2 commits into from
Jul 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.goalpanzi.mission_mate.core.datastore.datasource

import kotlinx.coroutines.flow.Flow

interface AuthDataSource {
fun getAccessToken() : Flow<String?>
fun getRefreshToken() : Flow<String?>

fun setAccessToken(accessToken : String) : Flow<Unit>
fun setRefreshToken(refreshToken : String) : Flow<Unit>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.goalpanzi.mission_mate.core.datastore.datasource

import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.stringPreferencesKey
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.map
import javax.inject.Inject

class AuthDataSourceImpl @Inject constructor(
private val dataStore: DataStore<Preferences>
) : AuthDataSource {
object PreferencesKey {
val ACCESS_TOKEN = stringPreferencesKey("ACCESS_TOKEN")
val REFRESH_TOKEN = stringPreferencesKey("REFRESH_TOKEN")

}
override fun getAccessToken(): Flow<String?> =
dataStore.data.map { preferences ->
preferences[PreferencesKey.ACCESS_TOKEN]
}

override fun getRefreshToken(): Flow<String?> =
dataStore.data.map { preferences ->
preferences[PreferencesKey.REFRESH_TOKEN]
}

override fun setAccessToken(accessToken: String): Flow<Unit> = flow {
dataStore.edit { preferences ->
preferences[PreferencesKey.ACCESS_TOKEN] = accessToken
}
emit(Unit)
}

override fun setRefreshToken(refreshToken: String): Flow<Unit> = flow {
dataStore.edit { preferences ->
preferences[PreferencesKey.REFRESH_TOKEN] = refreshToken
}
emit(Unit)
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.goalpanzi.mission_mate.core.datastore.di

import com.goalpanzi.mission_mate.core.datastore.datasource.AuthDataSource
import com.goalpanzi.mission_mate.core.datastore.datasource.AuthDataSourceImpl
import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent

@Module
@InstallIn(SingletonComponent::class)
abstract class DataSourceModule {

@Binds
abstract fun bindAuthDataSource(
authDataSource: AuthDataSourceImpl
): AuthDataSource
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.goalpanzi.mission_mate.core.datastore.di

import android.content.Context
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.PreferenceDataStoreFactory
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.preferencesDataStoreFile
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

private const val AUTH_PREFERENCES = "auth_preferences"

@InstallIn(SingletonComponent::class)
@Module
object DataStoreModule {
@Singleton
@Provides
fun provideAuthPreferencesDataStore(
@ApplicationContext context: Context
): DataStore<Preferences> {
return PreferenceDataStoreFactory.create(
produceFile = { context.preferencesDataStoreFile(AUTH_PREFERENCES) }
)
}
}
Loading