11package com.ninecraft.booket.core.data.impl.repository
22
3+ import com.google.firebase.installations.FirebaseInstallations
34import com.google.firebase.messaging.FirebaseMessaging
45import com.ninecraft.booket.core.common.utils.runSuspendCatching
56import com.ninecraft.booket.core.data.api.repository.UserRepository
67import com.ninecraft.booket.core.data.impl.mapper.toModel
78import com.ninecraft.booket.core.datastore.api.datasource.NotificationDataSource
89import com.ninecraft.booket.core.datastore.api.datasource.OnboardingDataSource
9- import com.ninecraft.booket.core.network.request.FcmTokenRequest
10+ import com.ninecraft.booket.core.network.request.DeviceRegistrationRequest
1011import com.ninecraft.booket.core.network.request.NotificationSettingsRequest
1112import com.ninecraft.booket.core.network.request.TermsAgreementRequest
1213import com.ninecraft.booket.core.network.service.ReedService
@@ -21,6 +22,7 @@ internal class DefaultUserRepository @Inject constructor(
2122 private val onboardingDataSource : OnboardingDataSource ,
2223 private val notificationDataSource : NotificationDataSource ,
2324 private val firebaseMessaging : FirebaseMessaging ,
25+ private val firebaseInstallations : FirebaseInstallations ,
2426) : UserRepository {
2527 override suspend fun agreeTerms (termsAgreed : Boolean ) = runSuspendCatching {
2628 service.agreeTerms(TermsAgreementRequest (termsAgreed)).toModel()
@@ -45,12 +47,12 @@ internal class DefaultUserRepository @Inject constructor(
4547 return @runSuspendCatching
4648 }
4749
48- updateFcmToken (newToken)
50+ registerDevice (newToken)
4951 setFcmToken(newToken)
5052 }
5153
5254 override suspend fun syncFcmToken (fcmToken : String ): Result <Unit > = runSuspendCatching {
53- updateFcmToken (fcmToken)
55+ registerDevice (fcmToken)
5456 setFcmToken(fcmToken)
5557 }
5658
@@ -88,7 +90,17 @@ internal class DefaultUserRepository @Inject constructor(
8890 notificationDataSource.setFcmToken(fcmToken)
8991 }
9092
91- private suspend fun updateFcmToken (fcmToken : String ) {
92- service.updateFcmToken(FcmTokenRequest (fcmToken))
93+ private suspend fun getDeviceId (): String {
94+ return try {
95+ firebaseInstallations.id.await()
96+ } catch (e: Exception ) {
97+ Logger .e(" Failed to fetch device ID: ${e.message} " )
98+ throw e
99+ }
100+ }
101+
102+ private suspend fun registerDevice (fcmToken : String ) {
103+ val deviceId = getDeviceId()
104+ service.upsertDevice(DeviceRegistrationRequest (deviceId, fcmToken))
93105 }
94106}
0 commit comments