Updated on 2026-08-14

This commit is contained in:
Tangem 2026-05-20 18:10:16 +04:00
parent f3f1d88d1b
commit f57fc16ff6
29 changed files with 107 additions and 264 deletions

View file

@ -8,6 +8,5 @@ dependencies {
/** Project - Domain */
implementation(projects.core.utils)
implementation(projects.domain.core)
implementation(projects.domain.models)
implementation(projects.domain.appCurrency.models)
}

View file

@ -3,7 +3,6 @@ package com.tangem.domain.appcurrency.extenstions
import arrow.core.getOrElse
import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.models.currency.FiatCurrency
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.map
@ -14,6 +13,4 @@ suspend fun GetSelectedAppCurrencyUseCase.unwrap(): AppCurrency {
}
.firstOrNull()
?: AppCurrency.Default
}
fun AppCurrency.toFiatCurrency(): FiatCurrency = FiatCurrency(code = code, symbol = symbol)
}

View file

@ -1,21 +0,0 @@
package com.tangem.domain.models.currency
import kotlinx.serialization.Serializable
/**
* Fiat currency in which a [com.tangem.domain.models.quote.QuoteStatus] is expressed. Plain business
* entity without UI metadata (icons, localized name) those live in `AppCurrency`.
*
* @property code ISO code, e.g. "USD"
* @property symbol display symbol, e.g. "$"
*/
@Serializable
data class FiatCurrency(
val code: String,
val symbol: String,
) {
companion object {
val Default = FiatCurrency(code = "USD", symbol = "$")
}
}

View file

@ -2,7 +2,6 @@ package com.tangem.domain.models.quote
import com.tangem.domain.models.StatusSource
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.FiatCurrency
import java.math.BigDecimal
/**
@ -39,15 +38,13 @@ data class QuoteStatus(val rawCurrencyId: CryptoCurrency.RawID, val value: Value
* Represents financial information for a specific cryptocurrency, including its fiat exchange rate and
* price change.
*
* @property source status source
* @property fiatCurrency fiat currency in which [fiatRate] is expressed
* @property fiatRate the current fiat exchange rate for the cryptocurrency
* @property fiatRateUSD the current fiat exchange rate in USD for the cryptocurrency
* @property priceChange the price change for the cryptocurrency
* @property source status source
* @property fiatRate the current fiat exchange rate for the cryptocurrency
* @property fiatRateUSD the current fiat exchange rate in USD for the cryptocurrency
* @property priceChange the price change for the cryptocurrency
*/
data class Data(
override val source: StatusSource,
val fiatCurrency: FiatCurrency,
val fiatRate: BigDecimal,
val fiatRateUSD: BigDecimal,
val priceChange: BigDecimal,

View file

@ -3,7 +3,6 @@ package com.tangem.domain.tokens.mock
import arrow.core.nonEmptySetOf
import com.tangem.domain.models.StatusSource
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.FiatCurrency
import com.tangem.domain.models.quote.QuoteStatus
import java.math.BigDecimal
@ -13,7 +12,6 @@ internal object MockQuotes {
val quote1 = QuoteStatus(
rawCurrencyId = MockTokens.token1.id.rawCurrencyId!!,
value = QuoteStatus.Data(
fiatCurrency = FiatCurrency.Default,
fiatRate = BigDecimal("1.23"),
fiatRateUSD = BigDecimal("1.23"),
priceChange = BigDecimal("0.01"),
@ -24,7 +22,6 @@ internal object MockQuotes {
val quote2 = QuoteStatus(
rawCurrencyId = MockTokens.token2.id.rawCurrencyId!!,
value = QuoteStatus.Data(
fiatCurrency = FiatCurrency.Default,
fiatRate = BigDecimal("2.34"),
fiatRateUSD = BigDecimal("2.34"),
priceChange = BigDecimal("-0.02"),
@ -35,7 +32,6 @@ internal object MockQuotes {
val quote3 = QuoteStatus(
rawCurrencyId = MockTokens.token3.id.rawCurrencyId!!,
value = QuoteStatus.Data(
fiatCurrency = FiatCurrency.Default,
fiatRate = BigDecimal("3.45"),
fiatRateUSD = BigDecimal("3.45"),
priceChange = BigDecimal("0.03"),
@ -46,7 +42,6 @@ internal object MockQuotes {
val quote4 = QuoteStatus(
rawCurrencyId = MockTokens.token4.id.rawCurrencyId!!,
value = QuoteStatus.Data(
fiatCurrency = FiatCurrency.Default,
fiatRate = BigDecimal("4.56"),
fiatRateUSD = BigDecimal("4.56"),
priceChange = BigDecimal("-0.04"),
@ -57,7 +52,6 @@ internal object MockQuotes {
val quote5 = QuoteStatus(
rawCurrencyId = MockTokens.token5.id.rawCurrencyId!!,
value = QuoteStatus.Data(
fiatCurrency = FiatCurrency.Default,
fiatRate = BigDecimal("5.67"),
fiatRateUSD = BigDecimal("5.67"),
priceChange = BigDecimal("0.05"),
@ -68,7 +62,6 @@ internal object MockQuotes {
val quote6 = QuoteStatus(
rawCurrencyId = MockTokens.token6.id.rawCurrencyId!!,
value = QuoteStatus.Data(
fiatCurrency = FiatCurrency.Default,
fiatRate = BigDecimal("6.78"),
fiatRateUSD = BigDecimal("6.78"),
priceChange = BigDecimal("-0.06"),
@ -79,7 +72,6 @@ internal object MockQuotes {
val quote7 = QuoteStatus(
rawCurrencyId = MockTokens.token7.id.rawCurrencyId!!,
value = QuoteStatus.Data(
fiatCurrency = FiatCurrency.Default,
fiatRate = BigDecimal("7.89"),
fiatRateUSD = BigDecimal("7.89"),
priceChange = BigDecimal("0.07"),
@ -90,7 +82,6 @@ internal object MockQuotes {
val quote8 = QuoteStatus(
rawCurrencyId = MockTokens.token8.id.rawCurrencyId!!,
value = QuoteStatus.Data(
fiatCurrency = FiatCurrency.Default,
fiatRate = BigDecimal("8.90"),
fiatRateUSD = BigDecimal("8.90"),
priceChange = BigDecimal("-0.08"),
@ -101,7 +92,6 @@ internal object MockQuotes {
val quote9 = QuoteStatus(
rawCurrencyId = MockTokens.token9.id.rawCurrencyId!!,
value = QuoteStatus.Data(
fiatCurrency = FiatCurrency.Default,
fiatRate = BigDecimal("9.01"),
fiatRateUSD = BigDecimal("9.01"),
priceChange = BigDecimal("0.09"),
@ -112,7 +102,6 @@ internal object MockQuotes {
val quote10 = QuoteStatus(
rawCurrencyId = MockTokens.token10.id.rawCurrencyId!!,
value = QuoteStatus.Data(
fiatCurrency = FiatCurrency.Default,
fiatRate = BigDecimal("10.12"),
fiatRateUSD = BigDecimal("10.12"),
priceChange = BigDecimal("-0.10"),

View file

@ -7,7 +7,6 @@ import com.tangem.blockchain.common.Blockchain
import com.tangem.common.test.domain.token.MockCryptoCurrencyFactory
import com.tangem.domain.models.StatusSource
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.FiatCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.network.NetworkAddress
import com.tangem.domain.models.network.NetworkStatus
@ -44,7 +43,6 @@ class CryptoCurrencyStatusFactoryTest {
)
private val fullQuote = QuoteStatus.Data(
fiatCurrency = FiatCurrency.Default,
fiatRate = 1800.0.toBigDecimal(),
fiatRateUSD = 1800.0.toBigDecimal(),
priceChange = (-2.5).toBigDecimal(),

View file

@ -7,7 +7,6 @@ import com.tangem.domain.core.utils.lceError
import com.tangem.domain.core.utils.lceLoading
import com.tangem.domain.models.StatusSource
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.currency.FiatCurrency
import com.tangem.domain.models.network.NetworkAddress
import com.tangem.domain.models.quote.PriceChange
import com.tangem.domain.tokens.mock.MockTokens

View file

@ -8,7 +8,6 @@ import com.tangem.domain.models.StatusSource
import com.tangem.domain.models.TotalFiatBalance
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.currency.FiatCurrency
import com.tangem.domain.models.network.NetworkAddress
import com.tangem.domain.models.staking.BalanceItem
import com.tangem.domain.models.staking.BalanceType

View file

@ -8,7 +8,6 @@ import com.tangem.domain.account.models.AccountList
import com.tangem.domain.account.supplier.SingleAccountListSupplier
import com.tangem.domain.models.StatusSource
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.FiatCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.network.Network
import com.tangem.domain.models.network.NetworkAddress
@ -82,7 +81,6 @@ class YieldSupplyMinAmountUseCaseTest {
QuoteStatus(
rawCurrencyId = CryptoCurrency.RawID("polygon-ecosystem-token"),
value = QuoteStatus.Data(
fiatCurrency = FiatCurrency.Default,
source = StatusSource.ACTUAL,
fiatRate = nativeFiatRate,
fiatRateUSD = nativeFiatRate,

View file

@ -4,7 +4,6 @@ import arrow.core.Either
import com.google.common.truth.Truth.assertThat
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.currency.FiatCurrency
import com.tangem.domain.models.network.Network
import com.tangem.domain.models.network.NetworkAddress
import com.tangem.domain.models.wallet.UserWalletId

View file

@ -8,7 +8,6 @@ import com.tangem.domain.account.models.AccountList
import com.tangem.domain.account.supplier.SingleAccountListSupplier
import com.tangem.domain.models.StatusSource
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.FiatCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.network.Network
import com.tangem.domain.models.network.NetworkAddress
@ -78,7 +77,6 @@ class YieldSupplyGetCurrentFeeUseCaseTest {
QuoteStatus(
rawCurrencyId = nativeCoin.id.rawCurrencyId!!,
value = QuoteStatus.Data(
fiatCurrency = FiatCurrency.Default,
source = StatusSource.ACTUAL,
fiatRate = nativeFiatRate,
fiatRateUSD = nativeFiatRate,
@ -131,7 +129,6 @@ class YieldSupplyGetCurrentFeeUseCaseTest {
QuoteStatus(
rawCurrencyId = nativeCoin.id.rawCurrencyId!!,
value = QuoteStatus.Data(
fiatCurrency = FiatCurrency.Default,
source = StatusSource.ACTUAL,
fiatRate = nativeFiatRate,
fiatRateUSD = nativeFiatRate,
@ -259,7 +256,6 @@ class YieldSupplyGetCurrentFeeUseCaseTest {
QuoteStatus(
rawCurrencyId = nativeCoin.id.rawCurrencyId!!,
value = QuoteStatus.Data(
fiatCurrency = FiatCurrency.Default,
source = StatusSource.ACTUAL,
fiatRate = BigDecimal.ZERO, // non-positive
fiatRateUSD = BigDecimal.ZERO,

View file

@ -4,7 +4,6 @@ import com.google.common.truth.Truth.assertThat
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.currency.FiatCurrency
import com.tangem.domain.models.network.Network
import com.tangem.domain.models.network.NetworkAddress
import org.junit.jupiter.api.Test

View file

@ -8,7 +8,6 @@ import com.tangem.core.ui.format.bigdecimal.format
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.models.currency.CryptoCurrency
import com.tangem.domain.models.currency.CryptoCurrencyStatus
import com.tangem.domain.models.currency.FiatCurrency
import com.tangem.domain.models.network.Network
import com.tangem.domain.models.network.NetworkAddress
import com.tangem.domain.yield.supply.YieldSupplyRepository