From 3b6855578c735d37997ccc182e96a793b3caeaa8 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 29 Apr 2025 17:06:39 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../models/response/OnrampDataResponse.kt | 2 +- .../models/response/OnrampStatusResponse.kt | 2 +- .../DefaultOnrampTransactionRepository.kt | 29 +++++++++---------- .../domain/onramp/model/OnrampStatus.kt | 2 +- .../onramp/OnrampRemoveTransactionUseCase.kt | 6 ++-- .../OnrampUpdateTransactionStatusUseCase.kt | 15 +++++----- .../OnrampTransactionRepository.kt | 6 ++-- .../factory/express/OnrampStatusFactory.kt | 8 ++--- .../wallet/domain/OnrampStatusFactory.kt | 6 ++-- .../SingleWalletExpressStatusesSubscriber.kt | 2 +- 10 files changed, 37 insertions(+), 41 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampDataResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampDataResponse.kt index 03f14b108c..d368b309b0 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampDataResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampDataResponse.kt @@ -32,7 +32,7 @@ data class OnrampDataJson( val requestId: String, @Json(name = "externalTxId") - val externalTxId: String, + val externalTxId: String?, @Json(name = "externalTxUrl") val externalTxUrl: String?, diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampStatusResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampStatusResponse.kt index 6f5ec14d6a..edb065cb18 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampStatusResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampStatusResponse.kt @@ -21,7 +21,7 @@ data class OnrampStatusResponse( val failReason: String?, @Json(name = "externalTxId") - val externalTxId: String, + val externalTxId: String?, @Json(name = "externalTxUrl") val externalTxUrl: String?, 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 84c6a72576..72a36a00db 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.externalTxId == transaction.externalTxId } + .addOrReplace(transaction) { it.txId == transaction.txId } .map(transactionConverter::convertBack) .toSet() @@ -44,12 +44,12 @@ internal class DefaultOnrampTransactionRepository( } } - override suspend fun getTransactionById(externalTxId: String): OnrampTransaction? = withContext(dispatchers.io) { + override suspend fun getTransactionById(txId: String): OnrampTransaction? = withContext(dispatchers.io) { val stored = appPreferencesStore.getObjectSetSync( PreferencesKeys.ONRAMP_TRANSACTIONS_STATUSES_KEY, ).map(transactionConverter::convert) - stored.firstOrNull { it.externalTxId == externalTxId } + stored.firstOrNull { it.txId == txId } } override fun getTransactions( @@ -63,19 +63,16 @@ internal class DefaultOnrampTransactionRepository( }.map(transactionConverter::convert) } - override suspend fun updateTransactionStatus( - externalTxId: String, - externalTxUrl: String, - status: OnrampStatus.Status, - ) = withContext(dispatchers.io) { - val updatedTx = getTransactionById(externalTxId)?.copy( - externalTxUrl = externalTxUrl, - status = status, - ) ?: return@withContext - storeTransaction(updatedTx) - } + override suspend fun updateTransactionStatus(txId: String, externalTxUrl: String, status: OnrampStatus.Status) = + withContext(dispatchers.io) { + val updatedTx = getTransactionById(txId)?.copy( + externalTxUrl = externalTxUrl, + status = status, + ) ?: return@withContext + storeTransaction(updatedTx) + } - override suspend fun removeTransaction(externalTxId: String) { + override suspend fun removeTransaction(txId: String) { withContext(dispatchers.io) { appPreferencesStore.editData { mutablePreferences -> runCatching { @@ -83,7 +80,7 @@ internal class DefaultOnrampTransactionRepository( PreferencesKeys.ONRAMP_TRANSACTIONS_STATUSES_KEY, )?.toMutableSet() - stored?.removeIf { it.externalTxId == externalTxId } + stored?.removeIf { it.txId == txId } mutablePreferences.setObjectSet( key = PreferencesKeys.ONRAMP_TRANSACTIONS_STATUSES_KEY, diff --git a/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampStatus.kt b/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampStatus.kt index 1b7952e042..2ee2bcc1a4 100644 --- a/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampStatus.kt +++ b/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampStatus.kt @@ -6,7 +6,7 @@ data class OnrampStatus( val payoutAddress: String, val status: Status, val failReason: String?, - val externalTxId: String, + val externalTxId: String?, val externalTxUrl: String?, val payoutHash: String?, val createdAt: String, 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 b1d3699272..3d94a2562c 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 @@ -11,11 +11,11 @@ class OnrampRemoveTransactionUseCase( private val errorResolver: OnrampErrorResolver, ) { - suspend operator fun invoke(externalTxId: String?): Either { - if (externalTxId == null) return OnrampError.DomainError("Transaction id not provided").left() + suspend operator fun invoke(txId: String?): Either { + if (txId == null) return OnrampError.DomainError("Transaction id not provided").left() return Either.catch { - onrampTransactionRepository.removeTransaction(externalTxId) + onrampTransactionRepository.removeTransaction(txId) }.mapLeft(errorResolver::resolve) } } \ No newline at end of file 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 6a31dba336..0c59d82df8 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 @@ -10,12 +10,11 @@ class OnrampUpdateTransactionStatusUseCase( private val errorResolver: OnrampErrorResolver, ) { - suspend operator fun invoke(externalTxId: String, externalTxUrl: String, status: OnrampStatus.Status) = - Either.catch { - onrampTransactionRepository.updateTransactionStatus( - externalTxId = externalTxId, - externalTxUrl = externalTxUrl, - status = status, - ) - }.mapLeft(errorResolver::resolve) + suspend operator fun invoke(txId: String, externalTxUrl: String, status: OnrampStatus.Status) = Either.catch { + onrampTransactionRepository.updateTransactionStatus( + txId = txId, + externalTxUrl = externalTxUrl, + status = status, + ) + }.mapLeft(errorResolver::resolve) } \ 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 a5187b67b9..f426a5ce30 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(externalTxId: String): OnrampTransaction? + suspend fun getTransactionById(txId: String): OnrampTransaction? fun getTransactions(userWalletId: UserWalletId, cryptoCurrencyId: CryptoCurrency.ID): Flow> - suspend fun updateTransactionStatus(externalTxId: String, externalTxUrl: String, status: OnrampStatus.Status) + suspend fun updateTransactionStatus(txId: String, externalTxUrl: String, status: OnrampStatus.Status) - suspend fun removeTransaction(externalTxId: String) + suspend fun removeTransaction(txId: 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 cea16cfd27..9ba8330394 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.isAutoDisposable || isForceDispose) { - onrampRemoveTransactionUseCase(externalTxId = selectedTx.info.txExternalId) + onrampRemoveTransactionUseCase(txId = selectedTx.info.txId) } } @@ -97,14 +97,14 @@ internal class OnrampStatusFactory @AssistedInject constructor( private suspend fun List.clearHiddenTerminal() { this.filter { it.activeStatus.isHidden && it.activeStatus.isTerminal } - .forEach { onrampRemoveTransactionUseCase(externalTxId = it.info.txExternalId) } + .forEach { onrampRemoveTransactionUseCase(txId = it.info.txId) } } private suspend fun sendStatusUpdateAnalytics( onrampTx: ExpressTransactionStateUM.OnrampUM, statusModel: OnrampStatus, ) { - val externalTxId = statusModel.externalTxId + val txId = statusModel.txId val status = toAnalyticStatus(statusModel.status) ?: return if (statusModel.status != onrampTx.activeStatus) { @@ -117,7 +117,7 @@ internal class OnrampStatusFactory @AssistedInject constructor( ), ) onrampUpdateTransactionStatusUseCase( - externalTxId = externalTxId, + txId = txId, externalTxUrl = statusModel.externalTxUrl.orEmpty(), status = statusModel.status, ) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/OnrampStatusFactory.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/OnrampStatusFactory.kt index 9874d658bc..b0347bbc46 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/OnrampStatusFactory.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/OnrampStatusFactory.kt @@ -37,7 +37,7 @@ internal class OnrampStatusFactory @Inject constructor( val selectedTx = bottomSheetConfig.value as? ExpressTransactionStateUM.OnrampUM ?: return if (selectedTx.activeStatus.isAutoDisposable || forceDispose) { - onrampRemoveTransactionUseCase(externalTxId = selectedTx.info.txExternalId) + onrampRemoveTransactionUseCase(txId = selectedTx.info.txId) } } @@ -61,7 +61,7 @@ internal class OnrampStatusFactory @Inject constructor( Timber.e("Couldn't update onramp status. $it") }, ifRight = { statusModel -> - val externalTxId = statusModel.externalTxId + val txId = statusModel.txId val status = toAnalyticStatus(statusModel.status) ?: return if (statusModel.status != onrampTx.activeStatus) { @@ -74,7 +74,7 @@ internal class OnrampStatusFactory @Inject constructor( ), ) onrampUpdateTransactionStatusUseCase( - externalTxId = externalTxId, + txId = txId, externalTxUrl = statusModel.externalTxUrl.orEmpty(), status = statusModel.status, ) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/SingleWalletExpressStatusesSubscriber.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/SingleWalletExpressStatusesSubscriber.kt index 0e4df60030..fd21c385d1 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/SingleWalletExpressStatusesSubscriber.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/subscribers/SingleWalletExpressStatusesSubscriber.kt @@ -87,6 +87,6 @@ internal class SingleWalletExpressStatusesSubscriber( private suspend fun List.clearHiddenTerminal() { this.filter { it.status.isHidden && it.status.isTerminal } - .forEach { onrampRemoveTransactionUseCase(externalTxId = it.externalTxId) } + .forEach { onrampRemoveTransactionUseCase(txId = it.txId) } } } \ No newline at end of file