NTP-42068 | Shiv Natani | bank downtime usecase (#15142)
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2025 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
|
||||
package com.navi.pay.common.usecase
|
||||
|
||||
import com.google.firebase.firestore.QuerySnapshot
|
||||
import com.navi.base.utils.FirestoreDataProvider
|
||||
import com.navi.common.utils.NaviApiPoller
|
||||
import com.navi.pay.analytics.NaviPayAnalytics
|
||||
import com.navi.pay.common.bankuptime.model.view.toBankUptimeEntity
|
||||
import com.navi.pay.common.bankuptime.repository.BankUptimeRepository
|
||||
import com.navi.pay.utils.FIRESTORE_BANK_UPTIME_COLLECTION_PATH
|
||||
import com.navi.pay.utils.parallelMap
|
||||
import javax.inject.Inject
|
||||
import kotlin.time.Duration.Companion.minutes
|
||||
|
||||
class BankUptimePollerUseCase
|
||||
@Inject
|
||||
constructor(
|
||||
private val firestoreDataProvider: FirestoreDataProvider,
|
||||
private val bankUptimeRepository: BankUptimeRepository,
|
||||
) {
|
||||
private val BANK_UPTIME_POLLING_INTERVAL = 5.minutes
|
||||
private val bankUptimePoller by lazy {
|
||||
NaviApiPoller(repeatInterval = BANK_UPTIME_POLLING_INTERVAL)
|
||||
}
|
||||
private val naviPayAnalytics: NaviPayAnalytics.NaviPayViewModel =
|
||||
NaviPayAnalytics.INSTANCE.NaviPayViewModel()
|
||||
|
||||
suspend fun executePollerForBankUptime() {
|
||||
bankUptimePoller
|
||||
.startPolling {
|
||||
try {
|
||||
firestoreDataProvider.getQuerySnapShotForCollectionPath(
|
||||
collectionPath = FIRESTORE_BANK_UPTIME_COLLECTION_PATH
|
||||
)
|
||||
} catch (exception: Exception) {
|
||||
naviPayAnalytics.onErrorOccurredInGetQuerySnapshot(exception = exception)
|
||||
bankUptimePoller.stopPolling()
|
||||
}
|
||||
}
|
||||
.collect {
|
||||
try {
|
||||
val bankUptimeQuerySnapShot = it as? QuerySnapshot?
|
||||
processQuerySnapShotForBankUptime(
|
||||
bankUptimeQuerySnapShot = bankUptimeQuerySnapShot
|
||||
)
|
||||
} catch (exception: Exception) {
|
||||
naviPayAnalytics.onErrorOccurredInProcessingQuerySnapshot(exception = exception)
|
||||
bankUptimePoller.stopPolling()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun processQuerySnapShotForBankUptime(bankUptimeQuerySnapShot: QuerySnapshot?) {
|
||||
bankUptimeQuerySnapShot?.let { querySnapShot ->
|
||||
val bankUptimeEntityList =
|
||||
querySnapShot.documents.parallelMap { it.toBankUptimeEntity() }
|
||||
|
||||
if (bankUptimeEntityList.isNotEmpty()) {
|
||||
bankUptimeRepository.deleteAllExistingDataAndInsertAll(
|
||||
bankUptimeEntityList = bankUptimeEntityList
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -32,12 +32,11 @@ import com.navi.common.utils.toJsonObject
|
||||
import com.navi.pay.BuildConfig
|
||||
import com.navi.pay.analytics.NaviPayAnalytics
|
||||
import com.navi.pay.analytics.NaviPayAnalytics.Companion.NAVI_PAY_ACTIVITY
|
||||
import com.navi.pay.common.bankuptime.model.view.toBankUptimeEntity
|
||||
import com.navi.pay.common.bankuptime.repository.BankUptimeRepository
|
||||
import com.navi.pay.common.model.view.NaviPayScreenType
|
||||
import com.navi.pay.common.model.view.PspType
|
||||
import com.navi.pay.common.setup.NaviPayCustomerStatusHandler
|
||||
import com.navi.pay.common.setup.NaviPayRouter
|
||||
import com.navi.pay.common.usecase.BankUptimePollerUseCase
|
||||
import com.navi.pay.common.usecase.LiteAccountSyncUseCase
|
||||
import com.navi.pay.common.usecase.RefreshBankListUseCase
|
||||
import com.navi.pay.common.usecase.RefreshConfigUseCase
|
||||
@@ -50,7 +49,6 @@ import com.navi.pay.common.viewmodel.NaviPayBaseVM
|
||||
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.utils.FIRESTORE_BANK_UPTIME_COLLECTION_PATH
|
||||
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.NAVI_PAY_LITMUS_EXPERIMENTS
|
||||
@@ -61,7 +59,6 @@ import com.navi.pay.utils.NAVI_PAY_NUDGE_DETAILS_SUFFIX_TEXT
|
||||
import com.navi.pay.utils.NAVI_PAY_NUDGE_OBJECTIVE
|
||||
import com.navi.pay.utils.NAVI_PAY_NUDGE_PRODUCT
|
||||
import com.navi.pay.utils.NAVI_PAY_PSP_ROUTING_BUCKETS_KEY
|
||||
import com.navi.pay.utils.parallelMap
|
||||
import com.navi.rr.scratchcard.helper.ScratchCardNudgeHelper
|
||||
import com.navi.rr.scratchcard.model.states.RewardNudgeApiStatus
|
||||
import com.ramcosta.composedestinations.spec.Route
|
||||
@@ -85,26 +82,20 @@ constructor(
|
||||
private val refreshLinkedAccountsUseCase: RefreshLinkedAccountsUseCase,
|
||||
private val liteAccountSyncUseCase: LiteAccountSyncUseCase,
|
||||
private val firestoreDataProvider: FirestoreDataProvider,
|
||||
private val bankUptimeRepository: BankUptimeRepository,
|
||||
private val scratchCardNudgeHelper: ScratchCardNudgeHelper,
|
||||
private val naviCacheRepository: NaviCacheRepository,
|
||||
private val syncLitmusExperimentsUseCase: SyncLitmusExperimentUseCase,
|
||||
private val refreshUpiNumbersUseCase: RefreshUpiNumbersUseCase,
|
||||
private val upiNumberRepository: UpiNumberRepository,
|
||||
private val syncUpiLiteMandateInfoUseCase: SyncUpiLiteMandateInfoUseCase,
|
||||
private val bankUptimePollerUseCase: BankUptimePollerUseCase,
|
||||
@NaviPayGsonBuilder private val gson: Gson,
|
||||
private val arcNudgeSyncUseCase: ArcNudgeSyncUseCase,
|
||||
) : NaviPayBaseVM() {
|
||||
|
||||
private val BANK_UPTIME_POLLING_INTERVAL = 5.minutes
|
||||
|
||||
private val naviPayAnalytics: NaviPayAnalytics.NaviPayViewModel =
|
||||
NaviPayAnalytics.INSTANCE.NaviPayViewModel()
|
||||
|
||||
private val bankUptimePoller by lazy {
|
||||
NaviApiPoller(repeatInterval = BANK_UPTIME_POLLING_INTERVAL)
|
||||
}
|
||||
|
||||
private val customerDataPoller by lazy {
|
||||
NaviApiPoller(repeatInterval = 5.seconds, numberOfIterations = 1)
|
||||
}
|
||||
@@ -156,7 +147,9 @@ constructor(
|
||||
taskList.awaitAll()
|
||||
}
|
||||
|
||||
initFireStorePollerForBankUptime()
|
||||
viewModelScope.safeLaunch(Dispatchers.IO) {
|
||||
bankUptimePollerUseCase.executePollerForBankUptime()
|
||||
}
|
||||
|
||||
initFireStorePollerForCustomerData()
|
||||
|
||||
@@ -201,35 +194,6 @@ constructor(
|
||||
return naviPayCustomerStatusHandler.isUserDeviceBoundForAnyPsp()
|
||||
}
|
||||
|
||||
private fun initFireStorePollerForBankUptime() {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
bankUptimePoller
|
||||
.startPolling {
|
||||
try {
|
||||
firestoreDataProvider.getQuerySnapShotForCollectionPath(
|
||||
collectionPath = FIRESTORE_BANK_UPTIME_COLLECTION_PATH
|
||||
)
|
||||
} catch (exception: Exception) {
|
||||
naviPayAnalytics.onErrorOccurredInGetQuerySnapshot(exception = exception)
|
||||
bankUptimePoller.stopPolling()
|
||||
}
|
||||
}
|
||||
.collect {
|
||||
try {
|
||||
val bankUptimeQuerySnapShot = it as? QuerySnapshot?
|
||||
processQuerySnapShotForBankUptime(
|
||||
bankUptimeQuerySnapShot = bankUptimeQuerySnapShot
|
||||
)
|
||||
} catch (exception: Exception) {
|
||||
naviPayAnalytics.onErrorOccurredInProcessingQuerySnapshot(
|
||||
exception = exception
|
||||
)
|
||||
bankUptimePoller.stopPolling()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun initFireStorePollerForCustomerData() {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
customerDataPoller
|
||||
@@ -297,20 +261,6 @@ constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun processQuerySnapShotForBankUptime(bankUptimeQuerySnapShot: QuerySnapshot?) {
|
||||
|
||||
bankUptimeQuerySnapShot?.let { querySnapShot ->
|
||||
val bankUptimeEntityList =
|
||||
querySnapShot.documents.parallelMap { it.toBankUptimeEntity() }
|
||||
|
||||
if (bankUptimeEntityList.isNotEmpty()) {
|
||||
bankUptimeRepository.deleteAllExistingDataAndInsertAll(
|
||||
bankUptimeEntityList = bankUptimeEntityList
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun processDocumentSnapShotForCustomerData(
|
||||
customerDataDocumentSnapshot: DocumentSnapshot?
|
||||
) {
|
||||
|
||||
@@ -8,15 +8,9 @@
|
||||
package com.navi.payment.nativepayment.viewmodel
|
||||
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import com.google.firebase.firestore.QuerySnapshot
|
||||
import com.navi.base.utils.FirestoreDataProvider
|
||||
import com.navi.base.utils.orFalse
|
||||
import com.navi.common.usecase.SyncLitmusExperimentUseCase
|
||||
import com.navi.common.utils.NaviApiPoller
|
||||
import com.navi.pay.common.bankuptime.model.view.toBankUptimeEntity
|
||||
import com.navi.pay.common.bankuptime.repository.BankUptimeRepository
|
||||
import com.navi.pay.utils.FIRESTORE_BANK_UPTIME_COLLECTION_PATH
|
||||
import com.navi.pay.utils.parallelMap
|
||||
import com.navi.pay.common.usecase.BankUptimePollerUseCase
|
||||
import com.navi.payment.analytics.NaviPaymentScreenAnalytics
|
||||
import com.navi.payment.model.common.PaymentSdkInitParams
|
||||
import com.navi.payment.nativepayment.NaviPaymentAnalyticScreenName
|
||||
@@ -32,9 +26,7 @@ import com.navi.payment.utils.Constants.PMS_LITMUS_EXPERIMENTS
|
||||
import com.navi.payment.utils.getPMSMetricInfo
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import javax.inject.Inject
|
||||
import kotlin.time.Duration.Companion.minutes
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@HiltViewModel
|
||||
class NaviPaymentViewModel
|
||||
@@ -43,22 +35,18 @@ constructor(
|
||||
private val paymentDataProvider: PaymentDataProvider,
|
||||
private val paymentRepository: PaymentRepository,
|
||||
private val syncLitmusExperimentsUseCase: SyncLitmusExperimentUseCase,
|
||||
private val firestoreDataProvider: FirestoreDataProvider,
|
||||
private val bankUptimeRepository: BankUptimeRepository,
|
||||
private val bankUptimePollerUseCase: BankUptimePollerUseCase,
|
||||
) : NaviPaymentBaseVM(NaviPaymentAnalyticScreenName.PAYMENT_SCREEN.screenName) {
|
||||
|
||||
private var paymentSdkInitParams: PaymentSdkInitParams? = null
|
||||
|
||||
private val BANK_UPTIME_POLLING_INTERVAL = 5.minutes
|
||||
private val bankUptimePoller by lazy {
|
||||
NaviApiPoller(repeatInterval = BANK_UPTIME_POLLING_INTERVAL)
|
||||
}
|
||||
|
||||
init {
|
||||
viewModelScope.safeLaunch {
|
||||
getSDKInitParams()
|
||||
syncLitmusExperimentsUseCase.execute(experiments = PMS_LITMUS_EXPERIMENTS)
|
||||
initFireStorePollerForBankUptime()
|
||||
viewModelScope.safeLaunch(Dispatchers.IO) {
|
||||
bankUptimePollerUseCase.executePollerForBankUptime()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,43 +102,4 @@ constructor(
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun initFireStorePollerForBankUptime() {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
bankUptimePoller
|
||||
.startPolling {
|
||||
try {
|
||||
firestoreDataProvider.getQuerySnapShotForCollectionPath(
|
||||
collectionPath = FIRESTORE_BANK_UPTIME_COLLECTION_PATH
|
||||
)
|
||||
} catch (exception: Exception) {
|
||||
bankUptimePoller.stopPolling()
|
||||
}
|
||||
}
|
||||
.collect {
|
||||
try {
|
||||
val bankUptimeQuerySnapShot = it as? QuerySnapshot?
|
||||
processQuerySnapShotForBankUptime(
|
||||
bankUptimeQuerySnapShot = bankUptimeQuerySnapShot
|
||||
)
|
||||
} catch (exception: Exception) {
|
||||
bankUptimePoller.stopPolling()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun processQuerySnapShotForBankUptime(bankUptimeQuerySnapShot: QuerySnapshot?) {
|
||||
|
||||
bankUptimeQuerySnapShot?.let { querySnapShot ->
|
||||
val bankUptimeEntityList =
|
||||
querySnapShot.documents.parallelMap { it.toBankUptimeEntity() }
|
||||
|
||||
if (bankUptimeEntityList.isNotEmpty()) {
|
||||
bankUptimeRepository.deleteAllExistingDataAndInsertAll(
|
||||
bankUptimeEntityList = bankUptimeEntityList
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user