Updated on 2026-08-14
This commit is contained in:
parent
ddc5c4836b
commit
321b764887
37 changed files with 870 additions and 141 deletions
|
|
@ -1,8 +1,10 @@
|
|||
package com.tangem.data.pay.repository
|
||||
|
||||
import com.squareup.moshi.Moshi
|
||||
import com.tangem.data.common.cache.CacheRegistry
|
||||
import com.tangem.data.visa.utils.TangemPayTxHistoryItemConverter
|
||||
import com.tangem.datasource.api.pay.TangemPayApi
|
||||
import com.tangem.datasource.di.NetworkMoshi
|
||||
import com.tangem.datasource.local.visa.TangemPayTxHistoryItemsStore
|
||||
import com.tangem.domain.tangempay.model.TangemPayTxHistoryListBatchFlow
|
||||
import com.tangem.domain.tangempay.model.TangemPayTxHistoryListBatchingContext
|
||||
|
|
@ -26,8 +28,11 @@ internal class DefaultTangemPayTxHistoryRepository @Inject constructor(
|
|||
private val cacheRegistry: CacheRegistry,
|
||||
private val txHistoryItemsStore: TangemPayTxHistoryItemsStore,
|
||||
private val dispatchers: CoroutineDispatcherProvider,
|
||||
@NetworkMoshi private val moshi: Moshi,
|
||||
) : TangemPayTxHistoryRepository {
|
||||
|
||||
private val txHistoryItemConverter by lazy { TangemPayTxHistoryItemConverter(moshi) }
|
||||
|
||||
override fun getTxHistoryBatchFlow(
|
||||
batchSize: Int,
|
||||
context: TangemPayTxHistoryListBatchingContext,
|
||||
|
|
@ -84,7 +89,7 @@ internal class DefaultTangemPayTxHistoryRepository @Inject constructor(
|
|||
val result = requestPerformer.request { authHeader ->
|
||||
visaApi.getTangemPayTxHistory(authHeader = authHeader, limit = pageSize, cursor = cursor)
|
||||
}.result
|
||||
val items = TangemPayTxHistoryItemConverter.convertList(result.transactions).filterNotNull()
|
||||
val items = txHistoryItemConverter.convertList(result.transactions).filterNotNull()
|
||||
txHistoryItemsStore.store(key = customerWalletAddress, cursor = cursor ?: INITIAL_CURSOR, value = items)
|
||||
}.onLeft { error(it.toString()) }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,19 @@
|
|||
package com.tangem.data.visa.utils
|
||||
|
||||
import com.squareup.moshi.Moshi
|
||||
import com.tangem.datasource.api.pay.models.response.TangemPayTxHistoryResponse
|
||||
import com.tangem.domain.visa.model.TangemPayTxHistoryItem
|
||||
import com.tangem.utils.converter.Converter
|
||||
import timber.log.Timber
|
||||
import java.util.Currency
|
||||
|
||||
internal object TangemPayTxHistoryItemConverter :
|
||||
internal class TangemPayTxHistoryItemConverter(moshi: Moshi) :
|
||||
Converter<TangemPayTxHistoryResponse.Transaction, TangemPayTxHistoryItem?> {
|
||||
|
||||
private val spendAdapter = moshi.adapter(TangemPayTxHistoryResponse.Spend::class.java)
|
||||
private val paymentAdapter = moshi.adapter(TangemPayTxHistoryResponse.Payment::class.java)
|
||||
private val feeAdapter = moshi.adapter(TangemPayTxHistoryResponse.Fee::class.java)
|
||||
|
||||
override fun convert(value: TangemPayTxHistoryResponse.Transaction): TangemPayTxHistoryItem? {
|
||||
return value.spend?.let { convertSpend(id = value.id, spend = it) }
|
||||
?: value.payment?.let { convertPayment(id = value.id, payment = it) }
|
||||
|
|
@ -22,6 +27,7 @@ internal object TangemPayTxHistoryItemConverter :
|
|||
private fun convertSpend(id: String, spend: TangemPayTxHistoryResponse.Spend): TangemPayTxHistoryItem.Spend {
|
||||
return TangemPayTxHistoryItem.Spend(
|
||||
id = id,
|
||||
jsonRepresentation = spendAdapter.toJson(spend),
|
||||
// If postedAt is null, it means transaction wasn't posted and was likely declined. Use authorizedAt
|
||||
date = spend.postedAt ?: spend.authorizedAt,
|
||||
amount = spend.amount,
|
||||
|
|
@ -41,15 +47,18 @@ internal object TangemPayTxHistoryItemConverter :
|
|||
): TangemPayTxHistoryItem.Payment {
|
||||
return TangemPayTxHistoryItem.Payment(
|
||||
id = id,
|
||||
jsonRepresentation = paymentAdapter.toJson(payment),
|
||||
date = payment.postedAt,
|
||||
currency = Currency.getInstance(payment.currency),
|
||||
amount = payment.amount,
|
||||
transactionHash = payment.transactionHash,
|
||||
)
|
||||
}
|
||||
|
||||
private fun convertFee(id: String, fee: TangemPayTxHistoryResponse.Fee): TangemPayTxHistoryItem.Fee {
|
||||
return TangemPayTxHistoryItem.Fee(
|
||||
id = id,
|
||||
jsonRepresentation = feeAdapter.toJson(fee),
|
||||
date = fee.postedAt,
|
||||
currency = Currency.getInstance(fee.currency),
|
||||
amount = fee.amount,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue