Updated on 2026-08-14
This commit is contained in:
parent
46385fa3f0
commit
3b6855578c
10 changed files with 37 additions and 41 deletions
|
|
@ -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?,
|
||||
|
|
|
|||
|
|
@ -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?,
|
||||
|
|
|
|||
|
|
@ -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<OnrampTransactionDTO>(
|
||||
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<OnrampTransactionDTO>(
|
||||
key = PreferencesKeys.ONRAMP_TRANSACTIONS_STATUSES_KEY,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -11,11 +11,11 @@ class OnrampRemoveTransactionUseCase(
|
|||
private val errorResolver: OnrampErrorResolver,
|
||||
) {
|
||||
|
||||
suspend operator fun invoke(externalTxId: String?): Either<OnrampError, Unit> {
|
||||
if (externalTxId == null) return OnrampError.DomainError("Transaction id not provided").left()
|
||||
suspend operator fun invoke(txId: String?): Either<OnrampError, Unit> {
|
||||
if (txId == null) return OnrampError.DomainError("Transaction id not provided").left()
|
||||
|
||||
return Either.catch {
|
||||
onrampTransactionRepository.removeTransaction(externalTxId)
|
||||
onrampTransactionRepository.removeTransaction(txId)
|
||||
}.mapLeft(errorResolver::resolve)
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
}
|
||||
|
|
@ -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<List<OnrampTransaction>>
|
||||
|
||||
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)
|
||||
}
|
||||
|
|
@ -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<ExpressTransactionStateUM.OnrampUM>.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,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
|
|
|
|||
|
|
@ -87,6 +87,6 @@ internal class SingleWalletExpressStatusesSubscriber(
|
|||
|
||||
private suspend fun List<OnrampTransaction>.clearHiddenTerminal() {
|
||||
this.filter { it.status.isHidden && it.status.isTerminal }
|
||||
.forEach { onrampRemoveTransactionUseCase(externalTxId = it.externalTxId) }
|
||||
.forEach { onrampRemoveTransactionUseCase(txId = it.txId) }
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue