File tree Expand file tree Collapse file tree
core/datastore/src/main/java/com/threegap/bitnagil/datastore/auth/storage
data/src/main/java/com/threegap/bitnagil/data/auth Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -5,14 +5,8 @@ import kotlinx.coroutines.flow.Flow
55
66interface AuthTokenDataStore {
77 val tokenFlow: Flow <AuthToken >
8-
9- suspend fun hasToken (): Boolean
10-
118 suspend fun updateAuthToken (accessToken : String , refreshToken : String )
12-
139 suspend fun updateAccessToken (accessToken : String )
14-
1510 suspend fun updateRefreshToken (refreshToken : String )
16-
1711 suspend fun clearAuthToken ()
1812}
Original file line number Diff line number Diff line change @@ -3,24 +3,12 @@ package com.threegap.bitnagil.datastore.auth.storage
33import androidx.datastore.core.DataStore
44import com.threegap.bitnagil.datastore.auth.model.AuthToken
55import kotlinx.coroutines.flow.Flow
6- import kotlinx.coroutines.flow.firstOrNull
76
87class AuthTokenDataStoreImpl (
98 private val dataStore : DataStore <AuthToken >,
109) : AuthTokenDataStore {
1110 override val tokenFlow: Flow <AuthToken > = dataStore.data
1211
13- override suspend fun hasToken (): Boolean {
14- return try {
15- val currentToken = dataStore.data.firstOrNull()
16- currentToken?.let {
17- ! it.accessToken.isNullOrEmpty() && ! it.refreshToken.isNullOrEmpty()
18- } ? : false
19- } catch (e: Exception ) {
20- false
21- }
22- }
23-
2412 override suspend fun updateAuthToken (accessToken : String , refreshToken : String ) {
2513 try {
2614 dataStore.updateData {
@@ -58,8 +46,4 @@ class AuthTokenDataStoreImpl(
5846 throw e
5947 }
6048 }
61-
62- companion object {
63- private const val TAG = " AuthTokenDataStore"
64- }
6549}
Original file line number Diff line number Diff line change 11package com.threegap.bitnagil.data.auth.datasource
22
33interface AuthLocalDataSource {
4- suspend fun hasToken (): Boolean
5-
4+ suspend fun getRefreshToken (): String?
65 suspend fun updateAuthToken (accessToken : String , refreshToken : String ): Result <Unit >
7-
86 suspend fun clearAuthToken (): Result <Unit >
97}
Original file line number Diff line number Diff line change @@ -6,10 +6,8 @@ import com.threegap.bitnagil.data.auth.model.response.LoginResponseDto
66
77interface AuthRemoteDataSource {
88 suspend fun login (socialAccessToken : String , loginRequestDto : LoginRequestDto ): Result <LoginResponseDto >
9-
109 suspend fun submitAgreement (termsAgreementRequestDto : TermsAgreementRequestDto ): Result <Unit >
11-
1210 suspend fun logout (): Result <Unit >
13-
1411 suspend fun withdrawal (): Result <Unit >
12+ suspend fun reissueToken (refreshToken : String ): Result <LoginResponseDto >
1513}
Original file line number Diff line number Diff line change @@ -2,13 +2,17 @@ package com.threegap.bitnagil.data.auth.datasourceimpl
22
33import com.threegap.bitnagil.data.auth.datasource.AuthLocalDataSource
44import com.threegap.bitnagil.datastore.auth.storage.AuthTokenDataStore
5+ import kotlinx.coroutines.flow.firstOrNull
56import javax.inject.Inject
67
78class AuthLocalDataSourceImpl @Inject constructor(
89 private val authTokenDataStore : AuthTokenDataStore ,
910) : AuthLocalDataSource {
1011
11- override suspend fun hasToken (): Boolean = authTokenDataStore.hasToken()
12+ override suspend fun getRefreshToken (): String? {
13+ val refreshToken = authTokenDataStore.tokenFlow.firstOrNull()?.refreshToken
14+ return refreshToken
15+ }
1216
1317 override suspend fun updateAuthToken (accessToken : String , refreshToken : String ): Result <Unit > =
1418 runCatching {
Original file line number Diff line number Diff line change @@ -31,4 +31,9 @@ class AuthRemoteDataSourceImpl @Inject constructor(
3131 safeUnitApiCall {
3232 authService.postWithdrawal()
3333 }
34+
35+ override suspend fun reissueToken (refreshToken : String ): Result <LoginResponseDto > =
36+ safeApiCall {
37+ authService.postReissueToken(refreshToken)
38+ }
3439}
Original file line number Diff line number Diff line change @@ -18,11 +18,6 @@ class AuthRepositoryImpl @Inject constructor(
1818 authRemoteDataSource.login(socialAccessToken, LoginRequestDto (socialType))
1919 .map { it.toDomain() }
2020
21- override suspend fun hasToken (): Boolean = authLocalDataSource.hasToken()
22-
23- override suspend fun updateAuthToken (accessToken : String , refreshToken : String ): Result <Unit > =
24- authLocalDataSource.updateAuthToken(accessToken, refreshToken)
25-
2621 override suspend fun submitAgreement (termsAgreement : TermsAgreement ): Result <Unit > =
2722 authRemoteDataSource.submitAgreement(
2823 termsAgreement.toDto(),
@@ -39,4 +34,16 @@ class AuthRepositoryImpl @Inject constructor(
3934 if (it.isSuccess) authLocalDataSource.clearAuthToken()
4035 }
4136 }
37+
38+ override suspend fun reissueToken (refreshToken : String ): Result <AuthSession > =
39+ authRemoteDataSource.reissueToken(refreshToken).map { it.toDomain() }
40+
41+ override suspend fun getRefreshToken (): String? =
42+ authLocalDataSource.getRefreshToken()
43+
44+ override suspend fun updateAuthToken (accessToken : String , refreshToken : String ): Result <Unit > =
45+ authLocalDataSource.updateAuthToken(accessToken, refreshToken)
46+
47+ override suspend fun clearAuthToken (): Result <Unit > =
48+ authLocalDataSource.clearAuthToken()
4249}
Original file line number Diff line number Diff line change @@ -27,4 +27,10 @@ interface AuthService {
2727
2828 @POST(" /api/v1/auth/logout" )
2929 suspend fun postLogout (): BaseResponse <Unit >
30+
31+ @POST(" /api/v1/auth/token/reissue" )
32+ @Headers(" No-Service-Token: true" )
33+ suspend fun postReissueToken (
34+ @Header(" Refresh-Token" ) refreshToken : String ,
35+ ): BaseResponse <LoginResponseDto >
3036}
You can’t perform that action at this time.
0 commit comments