From 9c8e848eac64de8c3bf15ca56aaae5e806a0fd27 Mon Sep 17 00:00:00 2001 From: Balrambhai Sharma Date: Wed, 4 Jun 2025 21:25:42 +0530 Subject: [PATCH] NTP-60702 | Conditional Transaction history Sync (#16442) --- .../src/main/java/com/navi/base/utils/Ext.kt | 8 +++++++ .../com/navi/pay/entry/NaviPayViewModel.kt | 22 ++++++++++++++++++- .../com/navi/pay/utils/NaviPayConstants.kt | 5 +++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/android/navi-base/src/main/java/com/navi/base/utils/Ext.kt b/android/navi-base/src/main/java/com/navi/base/utils/Ext.kt index ebe4ac5569..6ff80e0ecd 100644 --- a/android/navi-base/src/main/java/com/navi/base/utils/Ext.kt +++ b/android/navi-base/src/main/java/com/navi/base/utils/Ext.kt @@ -69,6 +69,14 @@ fun String?.toLongWithSafe(): Long { } } +fun String?.toBooleanWithSafe(): Boolean { + return try { + this?.toBoolean().orFalse() + } catch (_: Exception) { + false + } +} + fun TextView.underLineText() { paint.flags = paint.flags or Paint.UNDERLINE_TEXT_FLAG paint.isAntiAlias = true diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/entry/NaviPayViewModel.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/entry/NaviPayViewModel.kt index e42eb1fa9f..8b647a33b6 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/entry/NaviPayViewModel.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/entry/NaviPayViewModel.kt @@ -19,6 +19,7 @@ import com.navi.base.cache.model.NaviCacheEntity import com.navi.base.cache.repository.NaviCacheRepository import com.navi.base.utils.BaseUtils.getPhoneNumberWithNinetyOneCode import com.navi.base.utils.FirestoreDataProvider +import com.navi.base.utils.toBooleanWithSafe import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper import com.navi.common.model.AppUpgradeResponse import com.navi.common.upi.WITHOUT_ONBOARDING_FLOW @@ -51,11 +52,14 @@ import com.navi.pay.management.chat.util.SyncMessagesUseCase import com.navi.pay.management.upinumber.list.model.view.toUpiNumberEntity import com.navi.pay.management.upinumber.list.repository.UpiNumberRepository import com.navi.pay.network.di.NaviPayGsonBuilder +import com.navi.pay.tstore.list.usecase.SyncOrderHistoryUseCase import com.navi.pay.utils.DEFAULT_CONFIG import com.navi.pay.utils.FIRESTORE_CUSTOMER_DATA_COLLECTION_PATH import com.navi.pay.utils.FIRESTORE_PSP_ROUTING_BUCKETS_COLLECTION_PATH +import com.navi.pay.utils.IS_TRANSACTION_HISTORY_SYNCED_ONCE import com.navi.pay.utils.NAVI_PAY_LITMUS_EXPERIMENTS import com.navi.pay.utils.NAVI_PAY_PSP_ROUTING_BUCKETS_KEY +import com.navi.pay.utils.TRUE import com.navi.payments.shared.feature.arc.usecase.ArcNudgeSyncUseCase import com.ramcosta.composedestinations.spec.Route import dagger.hilt.android.lifecycle.HiltViewModel @@ -95,6 +99,7 @@ constructor( private val syncConversationsUseCase: SyncConversationsUseCase, private val syncMessagesUseCase: SyncMessagesUseCase, private val naviPayConfigUseCase: NaviPayConfigUseCase, + private val syncOrderHistoryUseCase: SyncOrderHistoryUseCase, ) : NaviPayBaseVM() { private val naviPayAnalytics: NaviPayAnalytics.NaviPayViewModel = @@ -150,7 +155,6 @@ constructor( naviPayAnalytics.onNaviPayViewModelInit() updateNaviPayDefaultConfig() - launch { performMinimumAllowedVersionForNaviPayAccessCheck() } launch { refreshBankListUseCase.execute(screenName = screenName) } @@ -195,6 +199,22 @@ constructor( initUpiLiteSync() // Onboarding check is not required here launch { darkKnightScheduler.schedulePeriodicSync() } + launch { syncTransactionHistory() } + } + } + + /** + * Sync transaction history only when user enters UPI flow for the first time or after logout + * and login. After that, it will not sync again. + */ + private suspend fun syncTransactionHistory() { + val syncStatus = naviCacheRepository.get(key = IS_TRANSACTION_HISTORY_SYNCED_ONCE)?.value + val isAlreadySynced = syncStatus.toBooleanWithSafe() + if (!isAlreadySynced) { + syncOrderHistoryUseCase.execute(screenName) + naviCacheRepository.save( + NaviCacheEntity(key = IS_TRANSACTION_HISTORY_SYNCED_ONCE, value = TRUE, version = 1) + ) } } diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayConstants.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayConstants.kt index 5c204034af..ddb19052cc 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayConstants.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayConstants.kt @@ -642,3 +642,8 @@ const val LRN_MISMATCH_ERROR = "lrn_mismatch_error" const val ERR_ACTIVE_LITE_ACCOUNT_FOUND = "ERR_ACTIVE_LITE_ACCOUNT_FOUND" const val ERR_MANDATE_PRESENT = "ERR_MANDATE_PRESENT" const val ERR_LITE_AND_MANDATE_ACTIVE = "ERR_LITE_AND_MANDATE_ACTIVE" + +// t-store sync +const val IS_TRANSACTION_HISTORY_SYNCED_ONCE = "isTransactionHistorySyncedOnce" + +const val TRUE = "true"