TP-73070 | retry mechanism in validate vpa and lite sync (#11743)
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
package com.navi.pay.common.usecase
|
||||
|
||||
import com.google.gson.Gson
|
||||
import com.navi.base.utils.retry
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.NAVI_PAY_ENABLE_VALIDATE_VPA_CACHING
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.NAVI_PAY_VALIDATE_VPA_CACHING_TTL_IN_HOURS
|
||||
@@ -19,6 +20,9 @@ import com.navi.pay.common.repository.CommonRepository
|
||||
import com.navi.pay.common.validatevpa.model.view.ValidateVpaEntity
|
||||
import com.navi.pay.management.paytocontacts.model.network.PayToContactRequest
|
||||
import com.navi.pay.network.di.NaviPayGsonBuilder
|
||||
import com.navi.pay.utils.DEFAULT_RETRY_COUNT
|
||||
import com.navi.pay.utils.RETRY_INTERVAL_IN_SECONDS
|
||||
import com.navi.pay.utils.isStatusCodeOfTypeException
|
||||
import javax.inject.Inject
|
||||
import kotlin.math.absoluteValue
|
||||
import org.joda.time.DateTime
|
||||
@@ -75,10 +79,24 @@ constructor(
|
||||
val apiResponse =
|
||||
when (request) {
|
||||
is ValidateVpaRequest -> {
|
||||
commonRepository.validateVpa(validateVpaRequest = request)
|
||||
retry(
|
||||
retryCount = DEFAULT_RETRY_COUNT,
|
||||
retryIntervalInSeconds = RETRY_INTERVAL_IN_SECONDS,
|
||||
execute = { commonRepository.validateVpa(validateVpaRequest = request) },
|
||||
shouldRetry = { response ->
|
||||
response.statusCode?.isStatusCodeOfTypeException() == true
|
||||
}
|
||||
)
|
||||
}
|
||||
is PayToContactRequest -> {
|
||||
commonRepository.payToContact(payToContactRequest = request)
|
||||
retry(
|
||||
retryCount = DEFAULT_RETRY_COUNT,
|
||||
retryIntervalInSeconds = RETRY_INTERVAL_IN_SECONDS,
|
||||
execute = { commonRepository.payToContact(payToContactRequest = request) },
|
||||
shouldRetry = { response ->
|
||||
response.statusCode?.isStatusCodeOfTypeException() == true
|
||||
}
|
||||
)
|
||||
}
|
||||
else -> {
|
||||
// This case should never happen
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
package com.navi.pay.management.lite.util
|
||||
|
||||
import com.navi.base.utils.retry
|
||||
import com.navi.common.network.models.isSuccessWithData
|
||||
import com.navi.pay.common.utils.DeviceInfoProvider
|
||||
import com.navi.pay.management.lite.models.network.LiteSyncRequest
|
||||
@@ -14,6 +15,8 @@ import com.navi.pay.management.lite.repository.UPILiteRepository
|
||||
import com.navi.pay.npcicl.NpciRepository
|
||||
import com.navi.pay.npcicl.UpiLiteBoundStatusResponse
|
||||
import com.navi.pay.onboarding.account.detail.model.view.LinkedAccountEntity
|
||||
import com.navi.pay.utils.DEFAULT_RETRY_COUNT
|
||||
import com.navi.pay.utils.RETRY_INTERVAL_IN_SECONDS
|
||||
import javax.inject.Inject
|
||||
import timber.log.Timber
|
||||
|
||||
@@ -59,7 +62,13 @@ constructor(
|
||||
merchantCustomerId = deviceInfoProvider.getMerchantCustomerId()
|
||||
)
|
||||
|
||||
val liteSyncResponse = upiLiteRepository.liteSync(liteSyncRequest = liteSyncRequest)
|
||||
val liteSyncResponse =
|
||||
retry(
|
||||
retryCount = DEFAULT_RETRY_COUNT,
|
||||
retryIntervalInSeconds = RETRY_INTERVAL_IN_SECONDS,
|
||||
execute = { upiLiteRepository.liteSync(liteSyncRequest = liteSyncRequest) },
|
||||
shouldRetry = { !it.isSuccessWithData() }
|
||||
)
|
||||
|
||||
if (liteSyncResponse.isSuccessWithData()) {
|
||||
return registerUPILiteState(
|
||||
|
||||
@@ -683,3 +683,12 @@ fun Activity.launchPermissionSettingsScreen() {
|
||||
)
|
||||
startActivity(intent)
|
||||
}
|
||||
|
||||
/*
|
||||
2 digit custom error codes are considered for retrying the network call
|
||||
This includes different exceptions viz. SocketTimeoutException, ConnectException etc.
|
||||
For more ref, checkout: ApiConstants.kt
|
||||
*/
|
||||
fun Int.isStatusCodeOfTypeException(): Boolean {
|
||||
return this.toString().length == 2
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user