NTP-70675 add clickstream events for phone number metrics (#16820)
This commit is contained in:
@@ -80,6 +80,14 @@ interface DataSyncEventTracker {
|
||||
@EventName("mm_dev_sync_transactions_failed") fun transactionSyncFailed(type: String)
|
||||
|
||||
@EventName("mm_dev_sync_spend_goals_failed") fun spendGoalsSyncFailed(type: String)
|
||||
|
||||
@EventName("mm_transaction_contact_metrics")
|
||||
fun transactionContactMetrics(
|
||||
totalTxnCount: Int,
|
||||
txnCountWithPhoneNumber: Int,
|
||||
txnCountWithContactsOverriddenName: Int,
|
||||
syncType: String,
|
||||
)
|
||||
}
|
||||
|
||||
@AutoGenerate
|
||||
|
||||
@@ -11,7 +11,9 @@ import android.Manifest
|
||||
import android.content.Context
|
||||
import android.content.pm.PackageManager
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.navi.moneymanager.common.analytics.DataSyncEventTrackerImpl
|
||||
import com.navi.moneymanager.common.dataprovider.data.datastore.DataStoreInfoProvider
|
||||
import com.navi.moneymanager.common.model.database.TransactionContactMetrics
|
||||
import com.navi.moneymanager.common.network.di.RoomDataStoreInfoProvider
|
||||
import com.navi.moneymanager.common.utils.Constants.CONTACTS_USAGE_CONSENT_GIVEN
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
@@ -19,6 +21,7 @@ import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.flow.map
|
||||
|
||||
@Singleton
|
||||
@@ -54,4 +57,20 @@ constructor(
|
||||
fun isContactSyncDeniedByUser(): Boolean {
|
||||
return isContactSyncDeniedByUser
|
||||
}
|
||||
|
||||
suspend fun trackTransactionContactMetrics(
|
||||
dataSyncEventTracker: DataSyncEventTrackerImpl,
|
||||
contactMetrics: TransactionContactMetrics,
|
||||
syncType: String,
|
||||
) {
|
||||
if (canAccessContacts().first()) {
|
||||
dataSyncEventTracker.transactionContactMetrics(
|
||||
totalTxnCount = contactMetrics.totalTxnCount,
|
||||
txnCountWithPhoneNumber = contactMetrics.txnCountWithPhoneNumber,
|
||||
txnCountWithContactsOverriddenName =
|
||||
contactMetrics.txnCountWithContactsOverriddenName,
|
||||
syncType = syncType,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import com.navi.moneymanager.common.db.database.MMDatabase
|
||||
import com.navi.moneymanager.common.helper.AccountsDataHelper
|
||||
import com.navi.moneymanager.common.helper.SpendGoalsDataHelper
|
||||
import com.navi.moneymanager.common.helper.TransactionsDataHelper
|
||||
import com.navi.moneymanager.common.model.database.TransactionContactMetrics
|
||||
import com.navi.moneymanager.common.network.di.RoomDataStoreInfoProvider
|
||||
import com.navi.moneymanager.common.network.model.AccountData
|
||||
import com.navi.moneymanager.common.network.model.SpendGoalData
|
||||
@@ -149,4 +150,12 @@ constructor(
|
||||
flow = database.get().transactionsDao().getLatestTransactionTimestamp(),
|
||||
)
|
||||
}
|
||||
|
||||
override suspend fun getTransactionContactMetrics(): TransactionContactMetrics {
|
||||
return executeQueryFirst(
|
||||
queryName = database.get().transactionsDao()::getTransactionContactMetrics.name,
|
||||
methodName = ::getTransactionContactMetrics.name,
|
||||
flow = database.get().transactionsDao().getTransactionContactMetrics(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
package com.navi.moneymanager.common.dataprovider.domain
|
||||
|
||||
import com.navi.moneymanager.common.model.database.TransactionContactMetrics
|
||||
import com.navi.moneymanager.common.network.model.AccountData
|
||||
import com.navi.moneymanager.common.network.model.SpendGoalData
|
||||
import com.navi.moneymanager.common.network.model.TransactionData
|
||||
@@ -38,4 +39,6 @@ interface LocalDataSyncManager {
|
||||
suspend fun updateNewTransactionCount(newTransaction: Int)
|
||||
|
||||
suspend fun getLatestTransactionTimestamp(): Long
|
||||
|
||||
suspend fun getTransactionContactMetrics(): TransactionContactMetrics
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ package com.navi.moneymanager.common.datasync.helper
|
||||
|
||||
import com.navi.base.utils.orZero
|
||||
import com.navi.moneymanager.common.dataprovider.data.dashboard.helper.MMConfigResponseHelper
|
||||
import com.navi.moneymanager.common.dataprovider.data.dashboard.helper.MMContactsConsentHelper
|
||||
import com.navi.moneymanager.common.dataprovider.domain.LocalDataSyncManager
|
||||
import com.navi.moneymanager.common.dataprovider.domain.RemoteDataProvider
|
||||
import com.navi.moneymanager.common.datasync.model.DataSyncState
|
||||
@@ -27,6 +28,7 @@ constructor(
|
||||
remoteDataProvider: RemoteDataProvider,
|
||||
localDataSyncManager: LocalDataSyncManager,
|
||||
mmConfigResponseHelper: MMConfigResponseHelper,
|
||||
private val contactsConsentHelper: MMContactsConsentHelper,
|
||||
) : BaseDataSyncHelper(remoteDataProvider, localDataSyncManager, mmConfigResponseHelper) {
|
||||
|
||||
override suspend fun execute(
|
||||
@@ -72,6 +74,7 @@ constructor(
|
||||
localDataSyncManager.updateCurrentMonthSyncFlag()
|
||||
localDataSyncManager.updateTotalSyncCompleteFlag()
|
||||
dataSyncEventTracker.syncSuccess(syncType)
|
||||
trackTransactionContactMetrics(syncType)
|
||||
return DataSyncState.Completed
|
||||
}
|
||||
|
||||
@@ -97,6 +100,7 @@ constructor(
|
||||
localDataSyncManager.updateNewTransactionCount(newTransactionCount)
|
||||
}
|
||||
dataSyncEventTracker.syncSuccess(syncType)
|
||||
trackTransactionContactMetrics(syncType)
|
||||
return DataSyncState.Completed
|
||||
}
|
||||
|
||||
@@ -157,4 +161,13 @@ constructor(
|
||||
}
|
||||
return DataSyncState.Completed
|
||||
}
|
||||
|
||||
private suspend fun trackTransactionContactMetrics(syncType: String) {
|
||||
val contactMetrics = localDataSyncManager.getTransactionContactMetrics()
|
||||
contactsConsentHelper.trackTransactionContactMetrics(
|
||||
dataSyncEventTracker = dataSyncEventTracker,
|
||||
contactMetrics = contactMetrics,
|
||||
syncType = syncType,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import androidx.room.Upsert
|
||||
import com.navi.moneymanager.common.db.entity.TransactionEntity
|
||||
import com.navi.moneymanager.common.model.CategorySummary
|
||||
import com.navi.moneymanager.common.model.MonthAmountAggregate
|
||||
import com.navi.moneymanager.common.model.database.TransactionContactMetrics
|
||||
import com.navi.moneymanager.common.model.database.TransactionDetails
|
||||
import com.navi.moneymanager.common.model.database.TransactionSummaryData
|
||||
import com.navi.moneymanager.common.utils.Constants.TRANSACTION_TABLE
|
||||
@@ -257,4 +258,12 @@ interface TransactionsDao {
|
||||
|
||||
@Query("SELECT MAX(txnTimestamp) FROM $TRANSACTION_TABLE")
|
||||
fun getLatestTransactionTimestamp(): Flow<Long>
|
||||
|
||||
@Query(
|
||||
"SELECT " +
|
||||
"(SELECT COUNT(txnId) FROM $TRANSACTION_TABLE) AS totalTxnCount, " +
|
||||
"(SELECT COUNT(txnId) FROM $TRANSACTION_TABLE WHERE counterPartyPhoneNumber IS NOT NULL) AS txnCountWithPhoneNumber, " +
|
||||
"(SELECT COUNT(txnId) FROM $TRANSACTION_TABLE WHERE contactsOverriddenName IS NOT NULL) AS txnCountWithContactsOverriddenName"
|
||||
)
|
||||
fun getTransactionContactMetrics(): Flow<TransactionContactMetrics>
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2025 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
|
||||
package com.navi.moneymanager.common.model.database
|
||||
|
||||
data class TransactionContactMetrics(
|
||||
val totalTxnCount: Int,
|
||||
val txnCountWithPhoneNumber: Int,
|
||||
val txnCountWithContactsOverriddenName: Int,
|
||||
)
|
||||
Reference in New Issue
Block a user