Skip to content

Commit e79ecf4

Browse files
authored
Merge pull request #47 from Nexters/feature/add-name-setting
이름 설정 화면에서 이름을 변경할 수 있습니다.
2 parents e47e5ff + 576fbe9 commit e79ecf4

File tree

19 files changed

+396
-22
lines changed

19 files changed

+396
-22
lines changed

core/data/src/main/java/com/plottwist/core/data/auth/repository/AuthRepositoryImpl.kt

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,19 @@ package com.plottwist.core.data.auth.repository
22

33
import com.plottwist.core.data.common.DeviceInfoProvider
44
import com.plottwist.core.domain.auth.repository.AuthRepository
5+
import com.plottwist.core.domain.onboarding.OnboardingRepository
56
import com.plottwist.core.domain.push.repository.PushRepository
67
import com.plottwist.core.network.model.auth.DeviceInfo
78
import com.plottwist.core.network.model.auth.GoogleLoginRequest
9+
import com.plottwist.core.network.model.onboarding.MemberNameRequest
810
import com.plottwist.core.network.service.AuthApiService
911
import com.plottwist.core.network.service.TukApiService
1012
import com.plottwist.core.preference.datasource.AuthDataSource
1113
import kotlinx.coroutines.flow.Flow
1214
import kotlinx.coroutines.flow.collect
1315
import kotlinx.coroutines.flow.combine
1416
import kotlinx.coroutines.flow.firstOrNull
17+
import kotlinx.coroutines.flow.onEach
1518
import javax.inject.Inject
1619

1720

@@ -20,7 +23,8 @@ class AuthRepositoryImpl @Inject constructor(
2023
private val authDataSource: AuthDataSource,
2124
private val deviceInfoProvider: DeviceInfoProvider,
2225
private val pushRepository: PushRepository,
23-
private val tukApiService: TukApiService
26+
private val tukApiService: TukApiService,
27+
private val onboardingRepository: OnboardingRepository
2428
) : AuthRepository {
2529

2630
override suspend fun googleLogin(accountId: String): Result<Boolean> {
@@ -45,9 +49,17 @@ class AuthRepositoryImpl @Inject constructor(
4549
val result = response.data
4650
authDataSource.setAccessToken(result.accessToken).collect()
4751
authDataSource.setRefreshToken(result.refreshToken).collect()
48-
authDataSource.setOnboardingCompleted(!result.isFirstLogin).collect()
4952

50-
Result.success(!result.isFirstLogin)
53+
if(!result.isFirstLogin) {
54+
val name = onboardingRepository.getMemberInfo().getOrNull()?.name
55+
if(name.isNullOrEmpty()) {
56+
return Result.success(false)
57+
}else {
58+
Result.success(true)
59+
}
60+
} else {
61+
Result.success(false)
62+
}
5163

5264
} else {
5365
Result.failure(Exception("Fail Google Login"))
@@ -61,9 +73,9 @@ class AuthRepositoryImpl @Inject constructor(
6173
override fun checkLoginStatus(): Flow<Boolean> {
6274
return combine(
6375
authDataSource.getAccessToken(),
64-
authDataSource.getOnboardingCompleted()
65-
) { accessToken, onboardingCompleted ->
66-
accessToken?.isNotEmpty() ?: false && onboardingCompleted ?: false
76+
authDataSource.getMemberName()
77+
) { accessToken, name ->
78+
accessToken?.isNotEmpty() ?: false && !name.isNullOrEmpty()
6779
}
6880
}
6981

@@ -89,4 +101,29 @@ class AuthRepositoryImpl @Inject constructor(
89101
Result.failure(e)
90102
}
91103
}
104+
105+
override suspend fun updateMemberName(name: String): Result<Unit> {
106+
return try {
107+
val response = tukApiService.updateMemberName(
108+
MemberNameRequest(name)
109+
)
110+
111+
if (response.success) {
112+
setMemberName(name).collect()
113+
Result.success(Unit)
114+
} else {
115+
Result.failure(Exception("Fail Delete member"))
116+
}
117+
} catch (e: Exception) {
118+
Result.failure(e)
119+
}
120+
}
121+
122+
override fun getMemberName(): Flow<String?> {
123+
return authDataSource.getMemberName()
124+
}
125+
126+
override fun setMemberName(name: String): Flow<Unit> {
127+
return authDataSource.setMemberName(name)
128+
}
92129
}

core/data/src/main/java/com/plottwist/core/data/onboarding/OnboardingRepositoryImpl.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class OnboardingRepositoryImpl @Inject constructor(
2020
val result = onboardingService.updateOnboardingInfo(UpdateOnboardingInfoRequest(name))
2121

2222
if (result.success) {
23-
authDataSource.setOnboardingCompleted(true).collect()
23+
authDataSource.setMemberName(name).collect()
2424
return Result.success(Unit)
2525
}
2626

@@ -35,6 +35,7 @@ class OnboardingRepositoryImpl @Inject constructor(
3535
val result = onboardingService.getMemberInfo()
3636

3737
if (result.success) {
38+
authDataSource.setMemberName(result.data.name).collect()
3839
return Result.success(result.data.toDomainModel())
3940
}
4041

core/domain/src/main/java/com/plottwist/core/domain/auth/repository/AuthRepository.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,7 @@ interface AuthRepository {
88
fun logout(): Flow<Unit>
99
fun getAccessToken() : Flow<String?>
1010
suspend fun deleteAccount(): Result<Boolean>
11+
suspend fun updateMemberName(name: String): Result<Unit>
12+
fun getMemberName(): Flow<String?>
13+
fun setMemberName(name: String): Flow<Unit>
1114
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.plottwist.core.domain.auth.usecase
2+
3+
import com.plottwist.core.domain.auth.repository.AuthRepository
4+
import kotlinx.coroutines.flow.Flow
5+
import javax.inject.Inject
6+
7+
class GetMemberNameUseCase @Inject constructor(
8+
private val authRepository: AuthRepository
9+
) {
10+
operator fun invoke(): Flow<String?> {
11+
return authRepository.getMemberName()
12+
}
13+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.plottwist.core.domain.auth.usecase
2+
3+
import com.plottwist.core.domain.auth.repository.AuthRepository
4+
import javax.inject.Inject
5+
6+
class UpdateMemberNameUseCase @Inject constructor(
7+
private val authRepository: AuthRepository
8+
) {
9+
suspend operator fun invoke(name: String): Result<Unit> {
10+
return authRepository.updateMemberName(name)
11+
}
12+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.plottwist.core.network.model.onboarding
2+
3+
import kotlinx.serialization.Serializable
4+
5+
@Serializable
6+
data class MemberNameRequest(
7+
val name: String
8+
)

core/network/src/main/java/com/plottwist/core/network/service/TukApiService.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import com.plottwist.core.network.model.gathering.GetPurposesResponse
1313
import com.plottwist.core.network.model.gathering.GetTagsResponse
1414
import com.plottwist.core.network.model.gathering.UpdateGatheringRequest
1515
import com.plottwist.core.network.model.gathering.UpdateGatheringResponse
16+
import com.plottwist.core.network.model.onboarding.MemberInfoResponse
17+
import com.plottwist.core.network.model.onboarding.MemberNameRequest
1618
import retrofit2.Response
1719
import retrofit2.http.Body
1820
import retrofit2.http.DELETE
@@ -64,4 +66,9 @@ interface TukApiService {
6466

6567
@DELETE("/api/v1/members")
6668
suspend fun deleteMember(): DeleteMemberResponse
69+
70+
@PATCH("/api/v1/members")
71+
suspend fun updateMemberName(
72+
@Body memberNameRequest : MemberNameRequest
73+
): MemberInfoResponse
6774
}

core/preference/src/main/java/com/plottwist/core/preference/datasource/AuthDataSource.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ interface AuthDataSource {
66

77
fun getAccessToken(): Flow<String?>
88
fun getRefreshToken(): Flow<String?>
9-
fun getOnboardingCompleted(): Flow<Boolean?>
9+
fun getMemberName(): Flow<String?>
1010

1111
fun setAccessToken(accessToken: String): Flow<Unit>
1212
fun setRefreshToken(refreshToken: String): Flow<Unit>
13-
fun setOnboardingCompleted(completed: Boolean): Flow<Unit>
13+
fun setMemberName(name: String): Flow<Unit>
1414

1515
fun clear(): Flow<Unit>
1616
}

core/preference/src/main/java/com/plottwist/core/preference/datasource/AuthDataSourceImpl.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.plottwist.core.preference.datasource
22

33
import androidx.datastore.core.DataStore
44
import androidx.datastore.preferences.core.Preferences
5-
import androidx.datastore.preferences.core.booleanPreferencesKey
65
import androidx.datastore.preferences.core.edit
76
import androidx.datastore.preferences.core.stringPreferencesKey
87
import kotlinx.coroutines.flow.Flow
@@ -24,9 +23,9 @@ class AuthDataSourceImpl @Inject constructor(
2423
preferences[REFRESH_TOKEN]
2524
}
2625

27-
override fun getOnboardingCompleted(): Flow<Boolean?> =
26+
override fun getMemberName(): Flow<String?> =
2827
dataStore.data.map { preferences ->
29-
preferences[ONBOARDING_COMPLETED]
28+
preferences[MEMBER_NAME]
3029
}
3130

3231

@@ -42,23 +41,24 @@ class AuthDataSourceImpl @Inject constructor(
4241
}
4342
}
4443

45-
override fun setOnboardingCompleted(completed: Boolean): Flow<Unit> = flow {
44+
override fun setMemberName(name: String): Flow<Unit> = flow {
4645
dataStore.edit { preferences ->
47-
preferences[ONBOARDING_COMPLETED] = completed
46+
preferences[MEMBER_NAME] = name
4847
}
4948
}
5049

5150
override fun clear(): Flow<Unit> = flow {
5251
dataStore.edit { preferences ->
5352
preferences[ACCESS_TOKEN] = ""
5453
preferences[REFRESH_TOKEN] = ""
54+
preferences[MEMBER_NAME] = ""
5555
}
5656
}
5757

5858
companion object {
5959
const val TOKEN_PREFERENCES_NAME = "token_preferences"
6060
private val ACCESS_TOKEN = stringPreferencesKey("access_token")
6161
private val REFRESH_TOKEN = stringPreferencesKey("refresh_token")
62-
private val ONBOARDING_COMPLETED = booleanPreferencesKey("onboarding_completed")
62+
private val MEMBER_NAME = stringPreferencesKey("member_name")
6363
}
6464
}

core/ui-navigation/src/main/java/com/plottwist/core/ui/navigation/Route.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,4 +83,7 @@ sealed interface Route {
8383
val gatheringId: Long,
8484
val selectedIntervalDays : Long
8585
): Route
86+
87+
@Serializable
88+
data object EditName : Route
8689
}

0 commit comments

Comments
 (0)