Skip to content

Commit 61072db

Browse files
committed
[BOOK-430] feat: notification 관련 로직을 UserRepository에서 담당, 로그아웃/회원탈퇴 시 알림 관련 데이터 초기화 진행
1 parent 402b547 commit 61072db

File tree

4 files changed

+23
-7
lines changed

4 files changed

+23
-7
lines changed

core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/UserRepository.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,7 @@ interface UserRepository {
2828

2929
suspend fun setLastNotificationSyncedEnabled(isEnabled: Boolean)
3030

31+
suspend fun resetNotificationData()
32+
3133
suspend fun updateNotificationSettings(notificationEnabled: Boolean): Result<UserProfileModel>
3234
}

core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultAuthRepository.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.ninecraft.booket.core.data.impl.repository
22

33
import com.ninecraft.booket.core.common.utils.runSuspendCatching
44
import com.ninecraft.booket.core.data.api.repository.AuthRepository
5-
import com.ninecraft.booket.core.datastore.api.datasource.NotificationDataSource
65
import com.ninecraft.booket.core.datastore.api.datasource.TokenDataSource
76
import com.ninecraft.booket.core.model.AutoLoginState
87
import com.ninecraft.booket.core.model.UserState
@@ -16,7 +15,6 @@ private const val KAKAO_PROVIDER_TYPE = "KAKAO"
1615
internal class DefaultAuthRepository @Inject constructor(
1716
private val service: ReedService,
1817
private val tokenDataSource: TokenDataSource,
19-
private val notificationDataSource: NotificationDataSource,
2018
) : AuthRepository {
2119
override suspend fun login(accessToken: String) = runSuspendCatching {
2220
val response = service.login(
@@ -31,7 +29,6 @@ internal class DefaultAuthRepository @Inject constructor(
3129
override suspend fun logout() = runSuspendCatching {
3230
service.logout()
3331
clearTokens()
34-
clearNotificationDataStore()
3532
}
3633

3734
override suspend fun withdraw() = runSuspendCatching {
@@ -64,8 +61,4 @@ internal class DefaultAuthRepository @Inject constructor(
6461
val accessToken = tokenDataSource.getAccessToken()
6562
return if (accessToken.isBlank()) UserState.Guest else UserState.LoggedIn
6663
}
67-
68-
private suspend fun clearNotificationDataStore() {
69-
notificationDataSource.clearNotificationDataStore()
70-
}
7164
}

core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultUserRepository.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ internal class DefaultUserRepository @Inject constructor(
7171
notificationDataSource.setLastSyncedNotificationEnabled(isEnabled)
7272
}
7373

74+
override suspend fun resetNotificationData() {
75+
deleteRemoteFcmToken()
76+
clearNotificationDataStore()
77+
}
78+
7479
override suspend fun updateNotificationSettings(notificationEnabled: Boolean) = runSuspendCatching {
7580
service.updateNotificationSettings(NotificationSettingsRequest(notificationEnabled)).toModel()
7681
}
@@ -103,4 +108,16 @@ internal class DefaultUserRepository @Inject constructor(
103108
val deviceId = getDeviceId()
104109
service.upsertDevice(DeviceRegistrationRequest(deviceId, fcmToken))
105110
}
111+
112+
private suspend fun deleteRemoteFcmToken() {
113+
try {
114+
firebaseMessaging.deleteToken().await()
115+
} catch (e: Exception) {
116+
Logger.e("Failed to delete FCM token: ${e.message}")
117+
}
118+
}
119+
120+
private suspend fun clearNotificationDataStore() {
121+
notificationDataSource.clearNotificationDataStore()
122+
}
106123
}

feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsPresenter.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.ninecraft.booket.core.common.constants.WebViewConstants
1010
import com.ninecraft.booket.core.common.utils.handleException
1111
import com.ninecraft.booket.core.data.api.repository.AuthRepository
1212
import com.ninecraft.booket.core.data.api.repository.RemoteConfigRepository
13+
import com.ninecraft.booket.core.data.api.repository.UserRepository
1314
import com.ninecraft.booket.core.model.UserState
1415
import com.ninecraft.booket.feature.screens.LoginScreen
1516
import com.ninecraft.booket.feature.screens.NotificationScreen
@@ -34,6 +35,7 @@ import kotlinx.coroutines.launch
3435
class SettingsPresenter @AssistedInject constructor(
3536
@Assisted val navigator: Navigator,
3637
private val authRepository: AuthRepository,
38+
private val userRepository: UserRepository,
3739
private val remoteConfigRepository: RemoteConfigRepository,
3840
private val analyticsHelper: AnalyticsHelper,
3941
) : Presenter<SettingsUiState> {
@@ -62,6 +64,7 @@ class SettingsPresenter @AssistedInject constructor(
6264
isLoading = true
6365
authRepository.logout()
6466
.onSuccess {
67+
userRepository.resetNotificationData()
6568
analyticsHelper.logEvent(SETTINGS_LOGOUT_COMPLETE)
6669
navigator.resetRoot(LoginScreen())
6770
}
@@ -91,6 +94,7 @@ class SettingsPresenter @AssistedInject constructor(
9194
isLoading = true
9295
authRepository.withdraw()
9396
.onSuccess {
97+
userRepository.resetNotificationData()
9498
analyticsHelper.logEvent(SETTINGS_WITHDRAWAL_COMPLETE)
9599
navigator.resetRoot(LoginScreen())
96100
}

0 commit comments

Comments
 (0)