NTP-39209 | Narayan | Check balance during transaction experiment addition (#15116)

This commit is contained in:
Aditya Narayan Malik
2025-02-26 11:19:15 +05:30
committed by GitHub
parent 37f33ae7ef
commit 5e8bdcdc1d
2 changed files with 29 additions and 0 deletions

View File

@@ -9,10 +9,12 @@ package com.navi.pay.common.usecase
import com.google.gson.reflect.TypeToken
import com.navi.base.utils.EMPTY
import com.navi.base.utils.orTrue
import com.navi.common.di.CoroutineDispatcherProvider
import com.navi.common.network.models.RepoResult
import com.navi.common.network.models.isSuccessWithData
import com.navi.common.resourcemanager.manager.ResourceManager.exceptionHandler
import com.navi.common.usecase.LitmusExperimentsUseCase
import com.navi.common.utils.CommonUtils.getDisplayableAmount
import com.navi.pay.common.model.config.NaviPayDefaultConfig
import com.navi.pay.common.model.view.CheckBalanceAnalyticsEventData
@@ -23,6 +25,7 @@ import com.navi.pay.onboarding.account.linked.model.network.CheckBalanceResponse
import com.navi.pay.utils.CHECK_BALANCE_ERROR_TRANSITION_TOTAL_DURATION
import com.navi.pay.utils.DEFAULT_CONFIG
import com.navi.pay.utils.INVALID_PIN
import com.navi.pay.utils.LITMUS_EXPERIMENT_NAVIPAY_CHECK_BALANCE_DURING_TRANSACTION
import com.navi.pay.utils.RUPEE_SYMBOL
import com.navi.pay.utils.isAccountIdOfTypeUpiLite
import javax.inject.Inject
@@ -42,11 +45,14 @@ class AccountListCheckBalanceUseCase
constructor(
private val checkAccountBalanceUseCase: CheckAccountBalanceUseCase,
private val coroutineDispatcherProvider: CoroutineDispatcherProvider,
private val litmusExperimentsUseCase: LitmusExperimentsUseCase,
private val naviPayConfigUseCase: NaviPayConfigUseCase,
) {
val checkBalanceStateMap = mutableMapOf<String, MutableStateFlow<CheckBalanceState>>()
private val timerJobMap = mutableMapOf<String, Job?>()
private val isCheckBalanceExperimentEnabled = MutableStateFlow(true)
private var naviPayDefaultConfig = NaviPayDefaultConfig()
private val checkBalanceGenericError = "Unable to load"
@@ -56,6 +62,7 @@ constructor(
init {
updateNaviPayDefaultConfig()
setLitmusExperimentValues()
}
suspend fun onCheckBalanceClicked(
@@ -109,6 +116,11 @@ constructor(
val currentCheckBalanceState = checkBalanceStateMap[linkedAccountEntity.accountId]?.value
if (shouldIgnoreStateUpdate && currentCheckBalanceState != null) {
return
} else if (!isCheckBalanceExperimentEnabled.value) {
updateCheckBalanceStateInStateMapForAccountId(
accountId = linkedAccountEntity.accountId,
checkBalanceState = CheckBalanceState.None,
)
} else if (
isAccountEligible == false &&
(currentCheckBalanceState is CheckBalanceState.Success ||
@@ -170,6 +182,20 @@ constructor(
}
}
private fun setLitmusExperimentValues() {
coroutineScope.launch(coroutineDispatcherProvider.io) {
isCheckBalanceExperimentEnabled.update {
litmusExperimentsUseCase
.execute(
experimentName = LITMUS_EXPERIMENT_NAVIPAY_CHECK_BALANCE_DURING_TRANSACTION
)
?.variant
?.enabled
.orTrue()
}
}
}
private fun updateNaviPayDefaultConfig() {
coroutineScope.launch(coroutineDispatcherProvider.io) {
naviPayDefaultConfig =

View File

@@ -168,6 +168,8 @@ const val NAVI_PAY_SYNC_TABLE_UPI_LITE_MANDATE_INFO = "upiLiteMandateInfo"
const val LITMUS_EXPERIMENT_NAVIPAY_LITE_DEFAULT_ENTERED_AMOUNT =
"NaviPay-lite-default-entered-amount"
const val LITMUS_EXPERIMENT_NAVIPAY_ORDER_TAG_SUMMARY = "NaviPay-order-tag-summary"
const val LITMUS_EXPERIMENT_NAVIPAY_CHECK_BALANCE_DURING_TRANSACTION =
"NaviPay-exp-check-balance-during-transaction-v2"
const val LITMUS_EXPERIMENT_NAVIPAY_SMV_BINDING = "NaviPay-exp-smv-binding"
const val LITMUS_EXPERIMENT_NAVI_FESTIVE_THEME = "festive-theme"
const val LITMUS_EXPERIMENT_NAVIPAY_OFFER_EXPERIENCE = "NaviPay-offer-experience"
@@ -175,6 +177,7 @@ val NAVI_PAY_LITMUS_EXPERIMENTS =
listOf(
LITMUS_EXPERIMENT_NAVIPAY_LITE_DEFAULT_ENTERED_AMOUNT,
LITMUS_EXPERIMENT_NAVIPAY_ORDER_TAG_SUMMARY,
LITMUS_EXPERIMENT_NAVIPAY_CHECK_BALANCE_DURING_TRANSACTION,
LITMUS_EXPERIMENT_NAVIPAY_SMV_BINDING,
LITMUS_EXPERIMENT_NAVI_FESTIVE_THEME,
LITMUS_EXPERIMENT_NAVIPAY_OFFER_EXPERIENCE,