diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/visa/entity/PaymentAccountStatusValueDM.kt b/core/datasource/src/main/java/com/tangem/datasource/local/visa/entity/PaymentAccountStatusValueDM.kt index d51eed7b2f..1f74827d91 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/visa/entity/PaymentAccountStatusValueDM.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/visa/entity/PaymentAccountStatusValueDM.kt @@ -45,6 +45,7 @@ sealed interface PaymentAccountStatusValueDM { @Json(name = "deposit_address") val depositAddress: String?, @Json(name = "fiat_balance") val fiatBalance: FiatBalanceDM, @Json(name = "crypto_balance") val cryptoBalance: CryptoBalanceDM, + @Json(name = "available_for_withdrawal") val availableForWithdrawal: BigDecimal, @Json(name = "cards") val cards: List, ) : PaymentAccountStatusValueDM diff --git a/data/visa/src/main/kotlin/com/tangem/data/pay/converter/PaymentAccountStatusValueDMConverter.kt b/data/visa/src/main/kotlin/com/tangem/data/pay/converter/PaymentAccountStatusValueDMConverter.kt index 23c8ce5ea3..0c2fd37b83 100644 --- a/data/visa/src/main/kotlin/com/tangem/data/pay/converter/PaymentAccountStatusValueDMConverter.kt +++ b/data/visa/src/main/kotlin/com/tangem/data/pay/converter/PaymentAccountStatusValueDMConverter.kt @@ -41,6 +41,7 @@ internal class PaymentAccountStatusValueDMConverter @Inject constructor( depositAddress = value.depositAddress, fiatBalance = value.fiatBalance.toDM(), cryptoBalance = value.cryptoBalance.toDM(), + availableForWithdrawal = value.availableForWithdrawal, cards = value.cards.map { card -> PaymentAccountStatusValueDM.TangemPayCard( id = card.id, @@ -86,6 +87,7 @@ internal class PaymentAccountStatusValueDMConverter @Inject constructor( depositAddress = value.depositAddress, fiatBalance = value.fiatBalance.toDomain(), cryptoBalance = value.cryptoBalance.toDomain(), + availableForWithdrawal = value.availableForWithdrawal, cryptoCurrency = tangemPayCurrencyFactory.create(userWalletId), cards = value.cards.map { card -> TangemPayCard( diff --git a/data/visa/src/main/kotlin/com/tangem/data/pay/flow/DefaultPaymentAccountStatusFetcher.kt b/data/visa/src/main/kotlin/com/tangem/data/pay/flow/DefaultPaymentAccountStatusFetcher.kt index 2f13c10d8d..bc789c6728 100644 --- a/data/visa/src/main/kotlin/com/tangem/data/pay/flow/DefaultPaymentAccountStatusFetcher.kt +++ b/data/visa/src/main/kotlin/com/tangem/data/pay/flow/DefaultPaymentAccountStatusFetcher.kt @@ -289,6 +289,7 @@ internal class DefaultPaymentAccountStatusFetcher @Inject constructor( depositAddress = cardInfo.depositAddress, fiatBalance = cardInfo.fiatBalance, cryptoBalance = cardInfo.cryptoBalance, + availableForWithdrawal = cardInfo.availableForWithdrawal, cryptoCurrency = cryptoCurrency, cards = listOf( TangemPayCard( diff --git a/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt b/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt index a05f3e7b14..d6dd2b330a 100644 --- a/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt +++ b/data/visa/src/main/kotlin/com/tangem/data/pay/repository/DefaultOnboardingRepository.kt @@ -35,6 +35,7 @@ import com.tangem.domain.tangempay.TangemPayAnalyticsEvents import com.tangem.domain.visa.error.VisaApiError import com.tangem.domain.visa.model.TangemPayCardFrozenState import com.tangem.utils.coroutines.CoroutineDispatcherProvider +import com.tangem.utils.extensions.orZero import kotlinx.coroutines.withContext import java.util.concurrent.ConcurrentHashMap import javax.inject.Inject @@ -174,6 +175,7 @@ internal class DefaultOnboardingRepository @Inject constructor( val card = response?.card val fiatBalance = response?.balance?.fiat val cryptoBalance = response?.balance?.crypto + val availableForWithdrawal = response?.balance?.availableForWithdrawal val paymentAccount = response?.paymentAccount val cardInfo = if (paymentAccount != null && card != null && fiatBalance != null && cryptoBalance != null) { CardInfo( @@ -190,6 +192,7 @@ internal class DefaultOnboardingRepository @Inject constructor( tokenContractAddress = cryptoBalance.tokenContractAddress, balance = cryptoBalance.balance, ), + availableForWithdrawal = availableForWithdrawal?.amount.orZero(), ) } else { null diff --git a/domain/models/src/main/kotlin/com/tangem/domain/models/account/PaymentAccountStatusValue.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/account/PaymentAccountStatusValue.kt index 97af48e470..520c4c4328 100644 --- a/domain/models/src/main/kotlin/com/tangem/domain/models/account/PaymentAccountStatusValue.kt +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/account/PaymentAccountStatusValue.kt @@ -115,6 +115,7 @@ sealed class PaymentAccountStatusValue { * @property depositAddress The address for deposits, if available. * @property fiatBalance The fiat balance details. * @property cryptoBalance The crypto balance details. + * @property availableForWithdrawal The crypto amount currently available for withdrawal/swap (excludes pending/locked funds). * @property cards The list of user's cards. */ @Serializable @@ -125,13 +126,14 @@ sealed class PaymentAccountStatusValue { val depositAddress: String?, val fiatBalance: FiatBalance, val cryptoBalance: CryptoBalance, + val availableForWithdrawal: SerializedBigDecimal, val cryptoCurrency: CryptoCurrency.Token, val cards: List, ) : PaymentAccountStatusValue() { val cryptoCurrencyStatus: CryptoCurrencyStatus = CryptoCurrencyStatus( currency = cryptoCurrency, value = CryptoCurrencyStatus.Loaded( - amount = cryptoBalance.balance, + amount = availableForWithdrawal, fiatAmount = fiatBalance.availableBalance, fiatRate = BigDecimal.ONE, priceChange = BigDecimal.ZERO, diff --git a/domain/visa/src/main/kotlin/com/tangem/domain/pay/model/CustomerInfo.kt b/domain/visa/src/main/kotlin/com/tangem/domain/pay/model/CustomerInfo.kt index 67942f98f2..ed28273924 100644 --- a/domain/visa/src/main/kotlin/com/tangem/domain/pay/model/CustomerInfo.kt +++ b/domain/visa/src/main/kotlin/com/tangem/domain/pay/model/CustomerInfo.kt @@ -82,5 +82,6 @@ data class CustomerInfo( val isPinSet: Boolean, val fiatBalance: PaymentAccountStatusValue.FiatBalance, val cryptoBalance: PaymentAccountStatusValue.CryptoBalance, + val availableForWithdrawal: BigDecimal, ) } \ No newline at end of file