diff --git a/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt b/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt index 6941455b7d..e59897708c 100644 --- a/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt +++ b/app/src/main/java/com/tangem/tap/routing/utils/ChildFactory.kt @@ -208,7 +208,7 @@ internal class ChildFactory @Inject constructor( is AppRoute.OnrampSuccess -> { route.asComponentChild( contextProvider = contextProvider(route, contextFactory), - params = OnrampSuccessComponent.Params(route.txId), + params = OnrampSuccessComponent.Params(route.externalTxId), componentFactory = onrampSuccessComponentFactory, ) } diff --git a/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt b/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt index f6f5afe476..bc9dae984e 100644 --- a/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt +++ b/common/routing/src/main/kotlin/com/tangem/common/routing/AppRoute.kt @@ -306,8 +306,8 @@ sealed class AppRoute(val path: String) : Route { @Serializable data class OnrampSuccess( - val txId: String, - ) : AppRoute(path = "/onramp/success/$txId"), RouteBundleParams { + val externalTxId: String, + ) : AppRoute(path = "/onramp/success/$externalTxId"), RouteBundleParams { override fun getBundle(): Bundle = bundle(serializer()) } diff --git a/core/deep-links/global/src/main/kotlin/com/tangem/core/deeplink/global/BuyCurrencyDeepLink.kt b/core/deep-links/global/src/main/kotlin/com/tangem/core/deeplink/global/BuyCurrencyDeepLink.kt index 77192eb776..b9427aee10 100644 --- a/core/deep-links/global/src/main/kotlin/com/tangem/core/deeplink/global/BuyCurrencyDeepLink.kt +++ b/core/deep-links/global/src/main/kotlin/com/tangem/core/deeplink/global/BuyCurrencyDeepLink.kt @@ -4,7 +4,7 @@ import com.tangem.core.deeplink.DeepLink class BuyCurrencyDeepLink( isOnrampFeatureEnabled: Boolean, - val onReceive: (txId: String) -> Unit, + val onReceive: (externalTxId: String) -> Unit, ) : DeepLink { override val uri: String = if (isOnrampFeatureEnabled) { diff --git a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampTransactionRepository.kt b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampTransactionRepository.kt index 5ca1572531..d4fbe4d861 100644 --- a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampTransactionRepository.kt +++ b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampTransactionRepository.kt @@ -32,7 +32,7 @@ internal class DefaultOnrampTransactionRepository( )?.map(transactionConverter::convert) ?: mutableSetOf() val updated = stored.toMutableSet() - .addOrReplace(transaction) { it.txId == transaction.txId } + .addOrReplace(transaction) { it.externalTxId == transaction.externalTxId } .map(transactionConverter::convertBack) .toSet() @@ -44,12 +44,12 @@ internal class DefaultOnrampTransactionRepository( } } - override suspend fun getTransactionById(txId: String): OnrampTransaction? = withContext(dispatchers.io) { + override suspend fun getTransactionById(externalTxId: String): OnrampTransaction? = withContext(dispatchers.io) { val stored = appPreferencesStore.getObjectSetSync( PreferencesKeys.ONRAMP_TRANSACTIONS_STATUSES_KEY, ).map(transactionConverter::convert) - stored.firstOrNull { it.txId == txId } + stored.firstOrNull { it.externalTxId == externalTxId } } override fun getTransactions( @@ -63,13 +63,13 @@ internal class DefaultOnrampTransactionRepository( }.map(transactionConverter::convert) } - override suspend fun updateTransactionStatus(txId: String, status: OnrampStatus.Status) = + override suspend fun updateTransactionStatus(externalTxId: String, status: OnrampStatus.Status) = withContext(dispatchers.io) { - val updatedTx = getTransactionById(txId)?.copy(status = status) ?: return@withContext + val updatedTx = getTransactionById(externalTxId)?.copy(status = status) ?: return@withContext storeTransaction(updatedTx) } - override suspend fun removeTransaction(txId: String) { + override suspend fun removeTransaction(externalTxId: String) { withContext(dispatchers.io) { appPreferencesStore.editData { mutablePreferences -> runCatching { @@ -77,7 +77,7 @@ internal class DefaultOnrampTransactionRepository( PreferencesKeys.ONRAMP_TRANSACTIONS_STATUSES_KEY, )?.toMutableSet() - stored?.removeIf { it.txId == txId } + stored?.removeIf { it.externalTxId == externalTxId } mutablePreferences.setObjectSet( key = PreferencesKeys.ONRAMP_TRANSACTIONS_STATUSES_KEY, diff --git a/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampStatusUseCase.kt b/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampStatusUseCase.kt index 4692c6d6b7..efc63c9188 100644 --- a/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampStatusUseCase.kt +++ b/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampStatusUseCase.kt @@ -11,9 +11,9 @@ class GetOnrampStatusUseCase( private val errorResolver: OnrampErrorResolver, ) { - suspend operator fun invoke(txId: String): Either { + suspend operator fun invoke(externalTxId: String): Either { return Either.catch { - onrampRepository.getStatus(txId) + onrampRepository.getStatus(externalTxId) }.mapLeft { errorResolver.resolve(it) } diff --git a/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampTransactionUseCase.kt b/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampTransactionUseCase.kt index 0e33b2e91a..c7301172f5 100644 --- a/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampTransactionUseCase.kt +++ b/domain/onramp/src/main/java/com/tangem/domain/onramp/GetOnrampTransactionUseCase.kt @@ -9,10 +9,10 @@ class GetOnrampTransactionUseCase( private val onrampTransactionRepository: OnrampTransactionRepository, ) { - suspend operator fun invoke(txId: String): Either { + suspend operator fun invoke(externalTxId: String): Either { return Either.catch { requireNotNull( - onrampTransactionRepository.getTransactionById(txId), + onrampTransactionRepository.getTransactionById(externalTxId), ) }.mapLeft { OnrampError.UnknownError diff --git a/domain/onramp/src/main/java/com/tangem/domain/onramp/OnrampRemoveTransactionUseCase.kt b/domain/onramp/src/main/java/com/tangem/domain/onramp/OnrampRemoveTransactionUseCase.kt index 4a6062ece8..dfc0fc3316 100644 --- a/domain/onramp/src/main/java/com/tangem/domain/onramp/OnrampRemoveTransactionUseCase.kt +++ b/domain/onramp/src/main/java/com/tangem/domain/onramp/OnrampRemoveTransactionUseCase.kt @@ -1,6 +1,7 @@ package com.tangem.domain.onramp import arrow.core.Either +import arrow.core.left import com.tangem.domain.onramp.model.OnrampError import com.tangem.domain.onramp.repositories.OnrampTransactionRepository @@ -8,9 +9,11 @@ class OnrampRemoveTransactionUseCase( private val onrampTransactionRepository: OnrampTransactionRepository, ) { - suspend operator fun invoke(txId: String): Either { + suspend operator fun invoke(externalTxId: String?): Either { + if (externalTxId == null) return OnrampError.UnknownError.left() + return Either.catch { - onrampTransactionRepository.removeTransaction(txId) + onrampTransactionRepository.removeTransaction(externalTxId) }.mapLeft { OnrampError.UnknownError } diff --git a/domain/onramp/src/main/java/com/tangem/domain/onramp/OnrampUpdateTransactionStatusUseCase.kt b/domain/onramp/src/main/java/com/tangem/domain/onramp/OnrampUpdateTransactionStatusUseCase.kt index 1a9349e91d..a31c31632e 100644 --- a/domain/onramp/src/main/java/com/tangem/domain/onramp/OnrampUpdateTransactionStatusUseCase.kt +++ b/domain/onramp/src/main/java/com/tangem/domain/onramp/OnrampUpdateTransactionStatusUseCase.kt @@ -8,7 +8,7 @@ class OnrampUpdateTransactionStatusUseCase( private val onrampTransactionRepository: OnrampTransactionRepository, ) { - suspend operator fun invoke(txId: String, status: OnrampStatus.Status) = Either.catch { - onrampTransactionRepository.updateTransactionStatus(txId = txId, status = status) + suspend operator fun invoke(externalTxId: String, status: OnrampStatus.Status) = Either.catch { + onrampTransactionRepository.updateTransactionStatus(externalTxId = externalTxId, status = status) } } \ No newline at end of file diff --git a/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampTransactionRepository.kt b/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampTransactionRepository.kt index deca8ceda9..ae94b073a8 100644 --- a/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampTransactionRepository.kt +++ b/domain/onramp/src/main/java/com/tangem/domain/onramp/repositories/OnrampTransactionRepository.kt @@ -10,11 +10,11 @@ interface OnrampTransactionRepository { suspend fun storeTransaction(transaction: OnrampTransaction) - suspend fun getTransactionById(txId: String): OnrampTransaction? + suspend fun getTransactionById(externalTxId: String): OnrampTransaction? fun getTransactions(userWalletId: UserWalletId, cryptoCurrencyId: CryptoCurrency.ID): Flow> - suspend fun updateTransactionStatus(txId: String, status: OnrampStatus.Status) + suspend fun updateTransactionStatus(externalTxId: String, status: OnrampStatus.Status) - suspend fun removeTransaction(txId: String) + suspend fun removeTransaction(externalTxId: String) } \ No newline at end of file diff --git a/features/onramp/api/src/main/kotlin/com/tangem/features/onramp/component/OnrampSuccessComponent.kt b/features/onramp/api/src/main/kotlin/com/tangem/features/onramp/component/OnrampSuccessComponent.kt index ceed88f9c5..02280d517a 100644 --- a/features/onramp/api/src/main/kotlin/com/tangem/features/onramp/component/OnrampSuccessComponent.kt +++ b/features/onramp/api/src/main/kotlin/com/tangem/features/onramp/component/OnrampSuccessComponent.kt @@ -5,7 +5,7 @@ import com.tangem.core.ui.decompose.ComposableContentComponent interface OnrampSuccessComponent : ComposableContentComponent { - data class Params(val txId: String) + data class Params(val externalTxId: String) interface Factory : ComponentFactory } \ No newline at end of file diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/model/OnrampSuccessComponentModel.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/model/OnrampSuccessComponentModel.kt index e277fdbce7..6d1c437423 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/model/OnrampSuccessComponentModel.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/model/OnrampSuccessComponentModel.kt @@ -54,7 +54,7 @@ internal class OnrampSuccessComponentModel @Inject constructor( private fun loadData() { modelScope.launch { - getOnrampTransactionUseCase(txId = params.txId) + getOnrampTransactionUseCase(externalTxId = params.externalTxId) .fold( ifLeft = { Timber.e(it.toString()) @@ -72,7 +72,7 @@ internal class OnrampSuccessComponentModel @Inject constructor( transaction.toCurrencyId, ).getOrElse { error("Crypto currency not found") } - getOnrampStatusUseCase(txId = params.txId) + getOnrampStatusUseCase(externalTxId = params.externalTxId) .fold( ifLeft = { Timber.e(it.toString()) diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/router/DefaultTokenDetailsRouter.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/router/DefaultTokenDetailsRouter.kt index ef43fe1b48..52eae5de76 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/router/DefaultTokenDetailsRouter.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/router/DefaultTokenDetailsRouter.kt @@ -49,7 +49,7 @@ internal class DefaultTokenDetailsRouter( ) } - override fun openOnrampSuccess(txId: String) { - router.push(AppRoute.OnrampSuccess(txId)) + override fun openOnrampSuccess(externalTxId: String) { + router.push(AppRoute.OnrampSuccess(externalTxId)) } } \ No newline at end of file diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/router/InnerTokenDetailsRouter.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/router/InnerTokenDetailsRouter.kt index 93c8591b7b..e4a143ccd1 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/router/InnerTokenDetailsRouter.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/router/InnerTokenDetailsRouter.kt @@ -20,5 +20,5 @@ internal interface InnerTokenDetailsRouter : TokenDetailsRouter { fun openStaking(userWalletId: UserWalletId, cryptoCurrency: CryptoCurrency, yield: Yield) - fun openOnrampSuccess(txId: String) + fun openOnrampSuccess(externalTxId: String) } \ No newline at end of file diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/express/OnrampStatusFactory.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/express/OnrampStatusFactory.kt index 7d54a9eb6b..eca24c7c13 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/express/OnrampStatusFactory.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/express/OnrampStatusFactory.kt @@ -74,7 +74,7 @@ internal class OnrampStatusFactory @AssistedInject constructor( val selectedTx = bottomSheetConfig.value as? ExpressTransactionStateUM.OnrampUM ?: return if (selectedTx.activeStatus.isTerminal) { - onrampRemoveTransactionUseCase(txId = selectedTx.info.txId) + onrampRemoveTransactionUseCase(externalTxId = selectedTx.info.txExternalId) } } @@ -97,14 +97,14 @@ internal class OnrampStatusFactory @AssistedInject constructor( private suspend fun List.clearHiddenTerminal() { this.filter { it.activeStatus.isHidden && it.activeStatus.isTerminal } - .forEach { onrampRemoveTransactionUseCase(txId = it.info.txId) } + .forEach { onrampRemoveTransactionUseCase(externalTxId = it.info.txExternalId) } } private suspend fun sendStatusUpdateAnalytics( onrampTx: ExpressTransactionStateUM.OnrampUM, statusModel: OnrampStatus, ) { - val txId = statusModel.txId + val externalTxId = statusModel.externalTxId val status = toAnalyticStatus(statusModel.status) ?: return if (statusModel.status != onrampTx.activeStatus) { @@ -116,7 +116,7 @@ internal class OnrampStatusFactory @AssistedInject constructor( fiatCurrency = onrampTx.fromCurrencyCode, ), ) - onrampUpdateTransactionStatusUseCase(txId, statusModel.status) + onrampUpdateTransactionStatusUseCase(externalTxId = externalTxId, statusModel.status) } } diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt index 0e4398aed6..e0d67ba733 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt @@ -198,9 +198,9 @@ internal class TokenDetailsViewModel @Inject constructor( userWallet = getUserWalletUseCase(userWalletId).getOrNull() ?: error("UserWallet not found") } - private fun onBuyCurrencyDeepLink(txId: String) { + private fun onBuyCurrencyDeepLink(externalTxId: String) { if (onrampFeatureToggles.isFeatureEnabled) { - router.openOnrampSuccess(txId) + router.openOnrampSuccess(externalTxId) } else { val currency = cryptoCurrencyStatus?.currency ?: return analyticsEventsHandler.send(TokenScreenAnalyticsEvent.Bought(currency.symbol)) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/deeplink/WalletDeepLinksHandler.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/deeplink/WalletDeepLinksHandler.kt index bfd6aafd1c..c9abd72ef6 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/deeplink/WalletDeepLinksHandler.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/deeplink/WalletDeepLinksHandler.kt @@ -66,8 +66,8 @@ internal class WalletDeepLinksHandler @Inject constructor( add( BuyCurrencyDeepLink( isOnrampFeatureEnabled = onrampFeatureToggles.isFeatureEnabled, - onReceive = { txId -> - scope.launch { onBuyCurrencyDeepLink(txId, userWallet) } + onReceive = { externalTxId -> + scope.launch { onBuyCurrencyDeepLink(externalTxId, userWallet) } }, ), ) @@ -107,9 +107,9 @@ internal class WalletDeepLinksHandler @Inject constructor( } } - private suspend fun onBuyCurrencyDeepLink(txId: String, userWallet: UserWallet) { + private suspend fun onBuyCurrencyDeepLink(externalTxId: String, userWallet: UserWallet) { if (onrampFeatureToggles.isFeatureEnabled) { - clickIntents.onOnrampSuccessClick(txId) + clickIntents.onOnrampSuccessClick(externalTxId) } else { val cryptoCurrency = getCryptoCurrencyUseCase(userWallet.walletId).getOrNull() ?: return analyticsEventHandler.send(TokenScreenAnalyticsEvent.Bought(cryptoCurrency.symbol)) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/DefaultWalletRouter.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/DefaultWalletRouter.kt index 7788000953..4d2df2bd9f 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/DefaultWalletRouter.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/DefaultWalletRouter.kt @@ -129,8 +129,8 @@ internal class DefaultWalletRouter( } } - override fun openOnrampSuccessScreen(txId: String) { - router.push(AppRoute.OnrampSuccess(txId)) + override fun openOnrampSuccessScreen(externalTxId: String) { + router.push(AppRoute.OnrampSuccess(externalTxId)) } override fun openUrl(url: String) { diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/InnerWalletRouter.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/InnerWalletRouter.kt index 8cb1601460..7441c80063 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/InnerWalletRouter.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/router/InnerWalletRouter.kt @@ -39,8 +39,8 @@ internal interface InnerWalletRouter : WalletRouter { /** Open onboarding screen */ fun openOnboardingScreen(scanResponse: ScanResponse, continueBackup: Boolean = false) - /** Open onramp success screen for [txId] */ - fun openOnrampSuccessScreen(txId: String) + /** Open onramp success screen for [externalTxId] */ + fun openOnrampSuccessScreen(externalTxId: String) /** Open transaction history website by [url] */ fun openUrl(url: String) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletContentClickIntents.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletContentClickIntents.kt index fb40dbfcf1..32132d1dfc 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletContentClickIntents.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletContentClickIntents.kt @@ -34,7 +34,7 @@ internal interface WalletContentClickIntents { fun onOrganizeTokensClick() - fun onOnrampSuccessClick(txId: String) + fun onOnrampSuccessClick(externalTxId: String) fun onDismissMarketsOnboarding() @@ -99,8 +99,8 @@ internal class WalletContentClickIntentsImplementor @Inject constructor( router.openOrganizeTokensScreen(userWalletId = stateHolder.getSelectedWalletId()) } - override fun onOnrampSuccessClick(txId: String) { - router.openOnrampSuccessScreen(txId = txId) + override fun onOnrampSuccessClick(externalTxId: String) { + router.openOnrampSuccessScreen(externalTxId = externalTxId) } override fun onDismissMarketsOnboarding() {