NTP-47242 | Optimise Upi Spend Transactions data sync and added analytics events (#15602)
This commit is contained in:
@@ -968,6 +968,13 @@ interface GenericErrorBottomSheetEventTracker {
|
||||
@AutoGenerate
|
||||
interface UpiTransactionHistorySpendAnalyserEventTracker {
|
||||
|
||||
@EventName("mm_upi_spend_data_sync_completed") fun onDataSyncCompleted()
|
||||
|
||||
@EventName("mm_upi_spend_data_sync_failed") fun onDataSyncFailed()
|
||||
|
||||
@EventName("mm_upi_spend_data_loading_latency")
|
||||
fun timeToLoadUpiSpendData(timeSpentToLoadApp: String)
|
||||
|
||||
@EventName("mm_UpiTransactionHistorySpendAnalyserWidget_visible")
|
||||
fun onUpiTransactionHistorySpendAnalyserWidgetVisible(variant: String)
|
||||
|
||||
|
||||
@@ -16,13 +16,13 @@ import com.navi.moneymanager.common.network.di.MoneyManagerGsonSerializer
|
||||
import com.navi.moneymanager.common.network.model.MMConfigResponse
|
||||
import com.navi.moneymanager.common.utils.DbCacheConstants.MONEY_MANAGER_CONFIG_RESPONSE_KEY
|
||||
import dagger.Lazy
|
||||
import dagger.hilt.android.scopes.ActivityRetainedScoped
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
import kotlinx.coroutines.flow.filterNotNull
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.flow.flow
|
||||
|
||||
@ActivityRetainedScoped
|
||||
@Singleton
|
||||
class MMConfigResponseHelper
|
||||
@Inject
|
||||
constructor(
|
||||
|
||||
@@ -43,16 +43,13 @@ import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.android.components.ActivityRetainedComponent
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
@InstallIn(ActivityRetainedComponent::class)
|
||||
abstract class DataProviderModule {
|
||||
|
||||
@Binds
|
||||
abstract fun bindRemoteDataProvider(
|
||||
remoteDataProviderImpl: RemoteDataProviderImpl
|
||||
): RemoteDataProvider
|
||||
|
||||
@Binds
|
||||
abstract fun bindDashboardLocalDataProvider(
|
||||
dashboardDataProviderImpl: DashboardDataProviderImpl
|
||||
@@ -103,11 +100,6 @@ abstract class DataProviderModule {
|
||||
localDataSyncManager: LocalDataSyncManagerImpl
|
||||
): LocalDataSyncManager
|
||||
|
||||
@Binds
|
||||
abstract fun bindUpiSpendLocalDataSyncManager(
|
||||
upiSpendLocalDataSyncManager: UpiSpendLocalDataSyncManagerImpl
|
||||
): UpiSpendLocalDataSyncManager
|
||||
|
||||
@Binds
|
||||
abstract fun bindTxnHistoryUpiSpendDataProvider(
|
||||
txnHistoryUpiSpendDataProvider: TxnHistoryUpiSpendDataProviderImpl
|
||||
@@ -128,3 +120,19 @@ abstract class DataProviderModule {
|
||||
upiSpendTransactionDetailsDataProvider: UpiSpendTransactionDetailsDataProviderImpl
|
||||
): UpiSpendTransactionDataProvider
|
||||
}
|
||||
|
||||
@Module
|
||||
@InstallIn(SingletonComponent::class)
|
||||
abstract class DataProviderSingletonModule {
|
||||
@Singleton
|
||||
@Binds
|
||||
abstract fun bindRemoteDataProvider(
|
||||
remoteDataProviderImpl: RemoteDataProviderImpl
|
||||
): RemoteDataProvider
|
||||
|
||||
@Singleton
|
||||
@Binds
|
||||
abstract fun bindUpiSpendLocalDataSyncManager(
|
||||
upiSpendLocalDataSyncManager: UpiSpendLocalDataSyncManagerImpl
|
||||
): UpiSpendLocalDataSyncManager
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ package com.navi.moneymanager.common.datasync
|
||||
import com.navi.base.utils.orTrue
|
||||
import com.navi.base.utils.orZero
|
||||
import com.navi.common.network.models.isSuccessWithData
|
||||
import com.navi.moneymanager.common.analytics.UpiTransactionHistorySpendAnalyserEventTrackerImpl
|
||||
import com.navi.moneymanager.common.dataprovider.data.dashboard.helper.MMConfigResponseHelper
|
||||
import com.navi.moneymanager.common.dataprovider.domain.RemoteDataProvider
|
||||
import com.navi.moneymanager.common.dataprovider.domain.upi.UpiSpendLocalDataSyncManager
|
||||
@@ -21,7 +22,9 @@ import com.navi.moneymanager.common.network.model.MMConfigResponse
|
||||
import com.navi.moneymanager.common.network.model.UpiSpendTransactionData
|
||||
import dagger.Lazy
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Singleton
|
||||
class UpiSpendDBSyncExecutor
|
||||
@Inject
|
||||
constructor(
|
||||
@@ -42,8 +45,10 @@ constructor(
|
||||
|
||||
return if (syncTransactions(startTimestamp)) {
|
||||
upiSpendLocalDataSyncManager.updateTotalSyncCompleteFlag()
|
||||
UpiTransactionHistorySpendAnalyserEventTrackerImpl().onDataSyncCompleted()
|
||||
DataSyncState.Completed
|
||||
} else {
|
||||
UpiTransactionHistorySpendAnalyserEventTrackerImpl().onDataSyncFailed()
|
||||
DataSyncState.Failed
|
||||
}
|
||||
}
|
||||
@@ -71,9 +76,13 @@ constructor(
|
||||
}
|
||||
|
||||
private suspend fun syncTransactions(startTimestamp: Long): Boolean {
|
||||
val startTime = System.currentTimeMillis()
|
||||
val transactions = fetchUpiTransactions(startTimestamp)
|
||||
return if (transactions.isNotEmpty()) {
|
||||
upiSpendLocalDataSyncManager.insertUpiTransactions(transactions)
|
||||
val latency = System.currentTimeMillis() - startTime
|
||||
UpiTransactionHistorySpendAnalyserEventTrackerImpl()
|
||||
.timeToLoadUpiSpendData(latency.toString())
|
||||
true
|
||||
} else {
|
||||
false
|
||||
|
||||
@@ -283,7 +283,7 @@ fun DashboardScreen(
|
||||
.collect()
|
||||
}
|
||||
|
||||
LaunchedEffect(selectedMonth) { viewModel.updateSpendAnalysisSection(selectedMonth) }
|
||||
LaunchedEffect(Unit) { viewModel.updateSpendAnalysisSection(selectedMonth) }
|
||||
|
||||
BackHandler { viewModel.setEffect { DashboardScreenUiEffect.Navigation.Back } }
|
||||
|
||||
|
||||
@@ -285,8 +285,8 @@ constructor(
|
||||
|
||||
fun updateSpendAnalysisSection(selectedMonth: SelectedMonth) {
|
||||
updateSpendAnalysisSectionParams(
|
||||
selectedMonth.month ?: state.value.screenData.spendCategorizationState?.selectedMonth,
|
||||
selectedMonth.year ?: state.value.screenData.spendCategorizationState?.selectedYear,
|
||||
state.value.screenData.spendCategorizationState?.selectedMonth ?: selectedMonth.month,
|
||||
state.value.screenData.spendCategorizationState?.selectedYear ?: selectedMonth.year,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -476,11 +476,11 @@ constructor(
|
||||
|
||||
private fun initUpiSpendAnalyser() {
|
||||
syncUpiSpendAnalyserData()
|
||||
fetchUpiSpenAnalyserWidgetVariant()
|
||||
fetchUpiSpendAnalyserWidgetVariant()
|
||||
}
|
||||
|
||||
private fun syncUpiSpendAnalyserData() {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
GlobalScope.launch(Dispatchers.IO) {
|
||||
if (upiSpendAnalysisWidgetHelper.isTotalSyncCompleted()) {
|
||||
upiSpendAnalysisFirstSyncCompleted.update { true }
|
||||
}
|
||||
@@ -492,7 +492,7 @@ constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchUpiSpenAnalyserWidgetVariant() {
|
||||
private fun fetchUpiSpendAnalyserWidgetVariant() {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
upiSpendAnalysisWidgetHelper.getEntryPointExpVariant().collect { variant ->
|
||||
if (
|
||||
|
||||
Reference in New Issue
Block a user