diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/YieldSupplyApi.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/YieldSupplyApi.kt index 2158ef7ede..6ed56e4ce7 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/YieldSupplyApi.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/YieldSupplyApi.kt @@ -4,7 +4,7 @@ import com.tangem.datasource.api.common.response.ApiResponse import com.tangem.datasource.api.tangemTech.models.YieldMarketsResponse import com.tangem.datasource.api.tangemTech.models.YieldModuleStatusResponse import com.tangem.datasource.api.tangemTech.models.YieldSupplyChangeTokenStatusBody -import com.tangem.datasource.api.tangemTech.models.YieldTokenStatusResponse +import com.tangem.datasource.api.tangemTech.models.YieldSupplyMarketTokenDto import com.tangem.datasource.api.tangemTech.models.YieldTokenChartResponse import retrofit2.http.Body import retrofit2.http.GET @@ -21,7 +21,7 @@ interface YieldSupplyApi { suspend fun getYieldTokenStatus( @Path("chainId") chainId: Int, @Path("tokenAddress") tokenAddress: String, - ): ApiResponse + ): ApiResponse @GET("api/v1/yield/token/{chainId}/{tokenAddress}/chart") suspend fun getYieldTokenChart( diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/YieldMarketsResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/YieldMarketsResponse.kt index ac62a8c655..d52ede3a6d 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/YieldMarketsResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/YieldMarketsResponse.kt @@ -2,21 +2,9 @@ package com.tangem.datasource.api.tangemTech.models import com.squareup.moshi.Json import com.squareup.moshi.JsonClass -import java.math.BigDecimal @JsonClass(generateAdapter = true) data class YieldMarketsResponse( - @Json(name = "tokens") val marketDtos: List, + @Json(name = "tokens") val marketDtos: List, @Json(name = "lastUpdatedAt") val lastUpdated: String, -) { - - @JsonClass(generateAdapter = true) - data class MarketDto( - @Json(name = "tokenAddress") val tokenAddress: String? = null, - @Json(name = "tokenSymbol") val tokenSymbol: String? = null, - @Json(name = "tokenName") val tokenName: String? = null, - @Json(name = "apy") val apy: BigDecimal, - @Json(name = "isActive") val isActive: Boolean, - @Json(name = "chainId") val chainId: Int? = null, - ) -} \ No newline at end of file +) \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/YieldTokenStatusResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/YieldSupplyMarketTokenDto.kt similarity index 94% rename from core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/YieldTokenStatusResponse.kt rename to core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/YieldSupplyMarketTokenDto.kt index 6788fc5292..a2d32540f9 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/YieldTokenStatusResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/models/YieldSupplyMarketTokenDto.kt @@ -5,7 +5,7 @@ import com.squareup.moshi.JsonClass import java.math.BigDecimal @JsonClass(generateAdapter = true) -data class YieldTokenStatusResponse( +data class YieldSupplyMarketTokenDto( @Json(name = "tokenAddress") val tokenAddress: String? = null, @Json(name = "tokenSymbol") val tokenSymbol: String? = null, @Json(name = "tokenName") val tokenName: String? = null, diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/YieldSupplyModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/YieldSupplyModule.kt index 2b7cfecd0d..179051f898 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/di/YieldSupplyModule.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/di/YieldSupplyModule.kt @@ -4,7 +4,7 @@ import android.content.Context import androidx.datastore.core.DataStoreFactory import androidx.datastore.dataStoreFile import com.squareup.moshi.Moshi -import com.tangem.datasource.api.tangemTech.models.YieldMarketsResponse +import com.tangem.datasource.api.tangemTech.models.YieldSupplyMarketTokenDto import com.tangem.datasource.local.yieldsupply.DefaultYieldMarketsStore import com.tangem.datasource.local.yieldsupply.YieldMarketsStore import com.tangem.datasource.utils.MoshiDataStoreSerializer @@ -34,7 +34,7 @@ object YieldSupplyModule { persistenceStore = DataStoreFactory.create( serializer = MoshiDataStoreSerializer( moshi = moshi, - types = listTypes(), + types = listTypes(), defaultValue = emptyList(), ), produceFile = { context.dataStoreFile(fileName = "yield_markets_cache") }, diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/yieldsupply/DefaultYieldMarketsStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/yieldsupply/DefaultYieldMarketsStore.kt index 7f4dbc5eb7..c1d86f9243 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/yieldsupply/DefaultYieldMarketsStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/yieldsupply/DefaultYieldMarketsStore.kt @@ -1,21 +1,21 @@ package com.tangem.datasource.local.yieldsupply import androidx.datastore.core.DataStore -import com.tangem.datasource.api.tangemTech.models.YieldMarketsResponse +import com.tangem.datasource.api.tangemTech.models.YieldSupplyMarketTokenDto import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.firstOrNull internal class DefaultYieldMarketsStore( - private val persistenceStore: DataStore>, + private val persistenceStore: DataStore>, ) : YieldMarketsStore { - override fun get(): Flow> = persistenceStore.data + override fun get(): Flow> = persistenceStore.data - override suspend fun getSyncOrNull(): List? { + override suspend fun getSyncOrNull(): List? { return persistenceStore.data.firstOrNull() } - override suspend fun store(items: List) { + override suspend fun store(items: List) { persistenceStore.updateData { _ -> items } } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/yieldsupply/YieldMarketsStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/yieldsupply/YieldMarketsStore.kt index 8857e6f40a..d20f7aad04 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/yieldsupply/YieldMarketsStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/yieldsupply/YieldMarketsStore.kt @@ -1,13 +1,13 @@ package com.tangem.datasource.local.yieldsupply -import com.tangem.datasource.api.tangemTech.models.YieldMarketsResponse +import com.tangem.datasource.api.tangemTech.models.YieldSupplyMarketTokenDto import kotlinx.coroutines.flow.Flow interface YieldMarketsStore { - fun get(): Flow> + fun get(): Flow> - suspend fun getSyncOrNull(): List? + suspend fun getSyncOrNull(): List? - suspend fun store(items: List) + suspend fun store(items: List) } \ No newline at end of file diff --git a/data/yield-supply/src/main/java/com/tangem/data/yield/supply/DefaultYieldSupplyRepository.kt b/data/yield-supply/src/main/java/com/tangem/data/yield/supply/DefaultYieldSupplyRepository.kt index 8d96150927..8d8613e976 100644 --- a/data/yield-supply/src/main/java/com/tangem/data/yield/supply/DefaultYieldSupplyRepository.kt +++ b/data/yield-supply/src/main/java/com/tangem/data/yield/supply/DefaultYieldSupplyRepository.kt @@ -9,7 +9,6 @@ import com.tangem.datasource.api.common.response.getOrThrow import com.tangem.datasource.local.yieldsupply.YieldMarketsStore import com.tangem.data.yield.supply.converters.YieldMarketTokenConverter import com.tangem.datasource.api.tangemTech.YieldSupplyApi -import com.tangem.data.yield.supply.converters.YieldTokenStatusConverter import com.tangem.data.yield.supply.converters.YieldTokenChartConverter import com.tangem.datasource.api.tangemTech.models.YieldSupplyChangeTokenStatusBody import com.tangem.domain.models.currency.CryptoCurrency @@ -17,7 +16,6 @@ import com.tangem.domain.models.wallet.UserWalletId import com.tangem.domain.walletmanager.WalletManagersFacade import com.tangem.domain.yield.supply.YieldSupplyRepository import com.tangem.domain.yield.supply.models.YieldMarketToken -import com.tangem.domain.yield.supply.models.YieldMarketTokenStatus import com.tangem.domain.yield.supply.models.YieldSupplyMarketChartData import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.flow.Flow @@ -50,11 +48,11 @@ internal class DefaultYieldSupplyRepository( it.map(YieldMarketTokenConverter::convert).enrichNetworkIds() } - override suspend fun getTokenStatus(cryptoCurrencyToken: CryptoCurrency.Token): YieldMarketTokenStatus { + override suspend fun getTokenStatus(cryptoCurrencyToken: CryptoCurrency.Token): YieldMarketToken { val chainId = Blockchain.fromNetworkId(cryptoCurrencyToken.network.backendId)?.getChainId() ?: error("Chain id is required for evm's") val response = yieldSupplyApi.getYieldTokenStatus(chainId, cryptoCurrencyToken.contractAddress).getOrThrow() - return YieldTokenStatusConverter.convert(response) + return YieldMarketTokenConverter.convert(response) } override suspend fun getTokenChart(cryptoCurrencyToken: CryptoCurrency.Token): YieldSupplyMarketChartData { diff --git a/data/yield-supply/src/main/java/com/tangem/data/yield/supply/converters/YieldMarketTokenConverter.kt b/data/yield-supply/src/main/java/com/tangem/data/yield/supply/converters/YieldMarketTokenConverter.kt index ca069668ff..c66fb73edd 100644 --- a/data/yield-supply/src/main/java/com/tangem/data/yield/supply/converters/YieldMarketTokenConverter.kt +++ b/data/yield-supply/src/main/java/com/tangem/data/yield/supply/converters/YieldMarketTokenConverter.kt @@ -1,16 +1,19 @@ package com.tangem.data.yield.supply.converters -import com.tangem.datasource.api.tangemTech.models.YieldMarketsResponse +import com.tangem.datasource.api.tangemTech.models.YieldSupplyMarketTokenDto import com.tangem.domain.yield.supply.models.YieldMarketToken import com.tangem.utils.converter.Converter +import com.tangem.utils.extensions.orZero -internal object YieldMarketTokenConverter : Converter { - override fun convert(value: YieldMarketsResponse.MarketDto): YieldMarketToken { +internal object YieldMarketTokenConverter : Converter { + override fun convert(value: YieldSupplyMarketTokenDto): YieldMarketToken { return YieldMarketToken( tokenAddress = value.tokenAddress.orEmpty(), - apy = value.apy, - isActive = value.isActive, + apy = value.apy.orZero(), + isActive = value.isActive ?: false, chainId = value.chainId ?: -1, + maxFeeUSD = value.maxFeeUSD.orEmpty(), + maxFeeNative = value.maxFeeNative.orEmpty(), ) } } \ No newline at end of file diff --git a/data/yield-supply/src/main/java/com/tangem/data/yield/supply/converters/YieldTokenStatusConverter.kt b/data/yield-supply/src/main/java/com/tangem/data/yield/supply/converters/YieldTokenStatusConverter.kt deleted file mode 100644 index 8035634fc9..0000000000 --- a/data/yield-supply/src/main/java/com/tangem/data/yield/supply/converters/YieldTokenStatusConverter.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.tangem.data.yield.supply.converters - -import com.tangem.datasource.api.tangemTech.models.YieldTokenStatusResponse -import com.tangem.domain.models.serialization.SerializedBigDecimal -import com.tangem.domain.yield.supply.models.YieldMarketTokenStatus -import com.tangem.utils.converter.Converter - -internal object YieldTokenStatusConverter : Converter { - override fun convert(value: YieldTokenStatusResponse): YieldMarketTokenStatus { - return YieldMarketTokenStatus( - tokenAddress = value.tokenAddress.orEmpty(), - tokenSymbol = value.tokenSymbol.orEmpty(), - tokenName = value.tokenName.orEmpty(), - apy = value.apy ?: SerializedBigDecimal.ZERO, - isActive = value.isActive ?: false, - chainId = value.chainId ?: -1, - maxFeeUSD = value.maxFeeUSD.orEmpty(), - maxFeeNative = value.maxFeeNative.orEmpty(), - ) - } -} \ No newline at end of file diff --git a/domain/models/src/main/kotlin/com/tangem/domain/models/currency/CryptoCurrencyExtensions.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/currency/CryptoCurrencyExtensions.kt new file mode 100644 index 0000000000..b3fb460bdb --- /dev/null +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/currency/CryptoCurrencyExtensions.kt @@ -0,0 +1,5 @@ +package com.tangem.domain.models.currency + +fun CryptoCurrency.Token.yieldSupplyKey(): String { + return "${network.backendId}_$contractAddress" +} \ No newline at end of file diff --git a/domain/yield-supply/models/src/main/java/com/tangem/domain/yield/supply/models/YieldMarketToken.kt b/domain/yield-supply/models/src/main/java/com/tangem/domain/yield/supply/models/YieldMarketToken.kt index 900bb790b2..7d379d4af6 100644 --- a/domain/yield-supply/models/src/main/java/com/tangem/domain/yield/supply/models/YieldMarketToken.kt +++ b/domain/yield-supply/models/src/main/java/com/tangem/domain/yield/supply/models/YieldMarketToken.kt @@ -12,6 +12,8 @@ data class YieldMarketToken( val chainId: Int, val apy: SerializedBigDecimal, val isActive: Boolean, + val maxFeeNative: String, + val maxFeeUSD: String, val backendId: String? = null, ) { diff --git a/domain/yield-supply/models/src/main/java/com/tangem/domain/yield/supply/models/YieldMarketTokenStatus.kt b/domain/yield-supply/models/src/main/java/com/tangem/domain/yield/supply/models/YieldMarketTokenStatus.kt deleted file mode 100644 index d7a6eedcf3..0000000000 --- a/domain/yield-supply/models/src/main/java/com/tangem/domain/yield/supply/models/YieldMarketTokenStatus.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.tangem.domain.yield.supply.models - -import com.tangem.domain.models.serialization.SerializedBigDecimal -import kotlinx.serialization.Serializable - -/** - * Domain model representing a token entry in the Yield Markets list. - */ -@Serializable -data class YieldMarketTokenStatus( - val tokenAddress: String, - val tokenSymbol: String, - val tokenName: String, - val chainId: Int, - val apy: SerializedBigDecimal, - val isActive: Boolean, - val maxFeeNative: String, - val maxFeeUSD: String, -) \ No newline at end of file diff --git a/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/YieldSupplyRepository.kt b/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/YieldSupplyRepository.kt index eceba08082..c721f9e942 100644 --- a/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/YieldSupplyRepository.kt +++ b/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/YieldSupplyRepository.kt @@ -3,7 +3,6 @@ package com.tangem.domain.yield.supply import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.domain.models.wallet.UserWalletId import com.tangem.domain.yield.supply.models.YieldMarketToken -import com.tangem.domain.yield.supply.models.YieldMarketTokenStatus import com.tangem.domain.yield.supply.models.YieldSupplyMarketChartData import kotlinx.coroutines.flow.Flow @@ -26,10 +25,10 @@ interface YieldSupplyRepository { fun getMarketsFlow(): Flow> /** - * Get yield token status by contract address. + * Get yield token status by contract address from cache */ @Throws - suspend fun getTokenStatus(cryptoCurrencyToken: CryptoCurrency.Token): YieldMarketTokenStatus + suspend fun getTokenStatus(cryptoCurrencyToken: CryptoCurrency.Token): YieldMarketToken /** * Get yield token APY chart by contract address. diff --git a/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyActivateUseCase.kt b/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyActivateUseCase.kt index 92b5787e7d..3ca5a7b0e8 100644 --- a/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyActivateUseCase.kt +++ b/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyActivateUseCase.kt @@ -8,7 +8,8 @@ class YieldSupplyActivateUseCase( private val yieldSupplyRepository: YieldSupplyRepository, ) { - suspend operator fun invoke(cryptoCurrencyToken: CryptoCurrency.Token): Either = Either.catch { - yieldSupplyRepository.activateProtocol(cryptoCurrencyToken) + suspend operator fun invoke(cryptoCurrency: CryptoCurrency): Either = Either.catch { + val token = cryptoCurrency as? CryptoCurrency.Token ?: error("Token expected") + yieldSupplyRepository.activateProtocol(token) } } \ No newline at end of file diff --git a/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyDeactivateUseCase.kt b/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyDeactivateUseCase.kt index 6449187071..fc666ada1a 100644 --- a/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyDeactivateUseCase.kt +++ b/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyDeactivateUseCase.kt @@ -8,7 +8,8 @@ class YieldSupplyDeactivateUseCase( private val yieldSupplyRepository: YieldSupplyRepository, ) { - suspend operator fun invoke(cryptoCurrencyToken: CryptoCurrency.Token): Either = Either.catch { - yieldSupplyRepository.deactivateProtocol(cryptoCurrencyToken) + suspend operator fun invoke(cryptoCurrency: CryptoCurrency): Either = Either.catch { + val token = cryptoCurrency as? CryptoCurrency.Token ?: error("Token expected") + yieldSupplyRepository.deactivateProtocol(token) } } \ No newline at end of file diff --git a/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyGetTokenStatusUseCase.kt b/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyGetTokenStatusUseCase.kt index c76f4c8e71..36737e8d43 100644 --- a/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyGetTokenStatusUseCase.kt +++ b/domain/yield-supply/src/main/java/com/tangem/domain/yield/supply/usecase/YieldSupplyGetTokenStatusUseCase.kt @@ -2,14 +2,17 @@ package com.tangem.domain.yield.supply.usecase import arrow.core.Either import com.tangem.domain.models.currency.CryptoCurrency +import com.tangem.domain.models.currency.yieldSupplyKey import com.tangem.domain.yield.supply.YieldSupplyRepository -import com.tangem.domain.yield.supply.models.YieldMarketTokenStatus +import com.tangem.domain.yield.supply.models.YieldMarketToken class YieldSupplyGetTokenStatusUseCase( private val yieldSupplyRepository: YieldSupplyRepository, ) { - suspend operator fun invoke(token: CryptoCurrency.Token): Either = Either.catch { - yieldSupplyRepository.getTokenStatus(token) + suspend operator fun invoke(token: CryptoCurrency.Token): Either = Either.catch { + val tokens = yieldSupplyRepository.getCachedMarkets().orEmpty() + val cachedStatus = tokens.firstOrNull { it.yieldSupplyKey == token.yieldSupplyKey() } + cachedStatus ?: error("YieldMarketToken not found") } } \ No newline at end of file diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/TokenListStateConverter.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/TokenListStateConverter.kt index 909953e420..eb2c314a09 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/TokenListStateConverter.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/TokenListStateConverter.kt @@ -16,6 +16,7 @@ import com.tangem.domain.models.account.AccountId import com.tangem.domain.models.account.AccountStatus import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.domain.models.currency.CryptoCurrencyStatus +import com.tangem.domain.models.currency.yieldSupplyKey import com.tangem.domain.models.tokenlist.TokenList import com.tangem.domain.models.tokenlist.TokenList.GroupedByNetwork.NetworkGroup import com.tangem.domain.models.wallet.UserWallet @@ -208,12 +209,9 @@ internal class TokenListStateConverter( ?.yieldSupplyStatus?.isActive == true if (isYieldSupplyActive) return null - val contract = (cryptoCurrencyStatus.currency as? CryptoCurrency.Token) - ?.contractAddress - ?.lowercase() ?: return null + val token = cryptoCurrencyStatus.currency as? CryptoCurrency.Token ?: return null - val yieldSupplyKey = "${cryptoCurrencyStatus.currency.network.backendId}_$contract" - return apyMap[yieldSupplyKey] + return apyMap[token.yieldSupplyKey()] } private fun getOrganizeTokensButtonState(tokenList: TokenList): WalletOrganizeTokensButtonConfig? { diff --git a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/entity/LoadingStatusMode.kt b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/entity/LoadingStatusMode.kt deleted file mode 100644 index 9480ba16ad..0000000000 --- a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/entity/LoadingStatusMode.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.tangem.features.yield.supply.impl.main.entity - -internal enum class LoadingStatusMode { - Initial, - LoadApy, -} \ No newline at end of file diff --git a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/model/YieldSupplyModel.kt b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/model/YieldSupplyModel.kt index ad5f40b8cf..9b267af4e3 100644 --- a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/model/YieldSupplyModel.kt +++ b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/model/YieldSupplyModel.kt @@ -22,8 +22,6 @@ import com.tangem.domain.yield.supply.usecase.YieldSupplyGetTokenStatusUseCase import com.tangem.domain.yield.supply.usecase.YieldSupplyIsAvailableUseCase import com.tangem.features.yield.supply.api.YieldSupplyComponent import com.tangem.features.yield.supply.impl.main.entity.YieldSupplyUM -import com.tangem.features.yield.supply.impl.main.entity.LoadingStatusMode -import com.tangem.features.yield.supply.impl.main.model.transformers.YieldSupplyTokenStatusFailureTransformer import com.tangem.features.yield.supply.impl.main.model.transformers.YieldSupplyTokenStatusSuccessTransformer import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.DelayedWork @@ -118,7 +116,7 @@ internal class YieldSupplyModel @Inject constructor( } } - private fun loadTokenStatus(mode: LoadingStatusMode) { + private fun loadTokenStatus() { val cryptoCurrencyToken = cryptoCurrency as? CryptoCurrency.Token ?: return modelScope.launch(dispatchers.default) { yieldSupplyGetTokenStatusUseCase(cryptoCurrencyToken) @@ -127,11 +125,10 @@ internal class YieldSupplyModel @Inject constructor( YieldSupplyTokenStatusSuccessTransformer( tokenStatus = tokenStatus, onStartEarningClick = ::onStartEarningClick, - mode = mode, ), ) }.onLeft { - uiState.update(YieldSupplyTokenStatusFailureTransformer(mode)) + uiState.update { YieldSupplyUM.Unavailable } } } } @@ -186,14 +183,13 @@ internal class YieldSupplyModel @Inject constructor( onClick = ::onActiveClick, isAllowedToSpend = yieldSupplyStatus.isAllowedToSpend, ) - else -> YieldSupplyUM.Loading + else -> YieldSupplyUM.Initial } uiState.update { yieldSupplyUM } when (yieldSupplyUM) { - is YieldSupplyUM.Loading -> loadTokenStatus(LoadingStatusMode.Initial) - is YieldSupplyUM.Content -> loadTokenStatus(LoadingStatusMode.LoadApy) + is YieldSupplyUM.Initial -> loadTokenStatus() else -> Unit } } diff --git a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/model/transformers/YieldSupplyTokenStatusFailureTransformer.kt b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/model/transformers/YieldSupplyTokenStatusFailureTransformer.kt deleted file mode 100644 index 0154fa52ef..0000000000 --- a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/model/transformers/YieldSupplyTokenStatusFailureTransformer.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.tangem.features.yield.supply.impl.main.model.transformers - -import com.tangem.features.yield.supply.impl.main.entity.LoadingStatusMode -import com.tangem.features.yield.supply.impl.main.entity.YieldSupplyUM -import com.tangem.utils.transformer.Transformer - -internal class YieldSupplyTokenStatusFailureTransformer( - private val mode: LoadingStatusMode, -) : Transformer { - - override fun transform(prevState: YieldSupplyUM): YieldSupplyUM { - return when (mode) { - LoadingStatusMode.Initial -> YieldSupplyUM.Unavailable - LoadingStatusMode.LoadApy -> prevState // TODO apply correct UI - } - } -} \ No newline at end of file diff --git a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/model/transformers/YieldSupplyTokenStatusSuccessTransformer.kt b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/model/transformers/YieldSupplyTokenStatusSuccessTransformer.kt index f45986dc3c..4fed5db894 100644 --- a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/model/transformers/YieldSupplyTokenStatusSuccessTransformer.kt +++ b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/main/model/transformers/YieldSupplyTokenStatusSuccessTransformer.kt @@ -1,42 +1,26 @@ package com.tangem.features.yield.supply.impl.main.model.transformers -import com.tangem.domain.yield.supply.models.YieldMarketTokenStatus import com.tangem.features.yield.supply.impl.R -import com.tangem.features.yield.supply.impl.main.entity.LoadingStatusMode import com.tangem.features.yield.supply.impl.main.entity.YieldSupplyUM import com.tangem.core.ui.extensions.resourceReference -import com.tangem.core.ui.extensions.stringReference import com.tangem.core.ui.extensions.wrappedList +import com.tangem.domain.yield.supply.models.YieldMarketToken import com.tangem.utils.transformer.Transformer internal class YieldSupplyTokenStatusSuccessTransformer( - private val tokenStatus: YieldMarketTokenStatus, + private val tokenStatus: YieldMarketToken, private val onStartEarningClick: () -> Unit, - private val mode: LoadingStatusMode, ) : Transformer { override fun transform(prevState: YieldSupplyUM): YieldSupplyUM { if (!tokenStatus.isActive) return YieldSupplyUM.Unavailable - return when (mode) { - LoadingStatusMode.Initial -> { - YieldSupplyUM.Available( - title = resourceReference( - id = R.string.yield_module_token_details_earn_notification_title, - formatArgs = wrappedList(tokenStatus.apy), - ), - onClick = onStartEarningClick, - ) - } - LoadingStatusMode.LoadApy -> { - if (prevState is YieldSupplyUM.Content) { - prevState.copy( - rewardsApy = stringReference("${tokenStatus.apy}%"), - ) - } else { - prevState - } - } - } + return YieldSupplyUM.Available( + title = resourceReference( + id = R.string.yield_module_token_details_earn_notification_title, + formatArgs = wrappedList(tokenStatus.apy), + ), + onClick = onStartEarningClick, + ) } } \ No newline at end of file diff --git a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/subcomponents/startearning/model/YieldSupplyStartEarningModel.kt b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/subcomponents/startearning/model/YieldSupplyStartEarningModel.kt index 991aa736fa..4a5568cfe5 100644 --- a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/subcomponents/startearning/model/YieldSupplyStartEarningModel.kt +++ b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/subcomponents/startearning/model/YieldSupplyStartEarningModel.kt @@ -208,7 +208,7 @@ internal class YieldSupplyStartEarningModel @Inject constructor( }, ifRight = { fetchCurrencyStatusUseCase(userWalletId = userWallet.walletId, cryptoCurrency.id) - yieldSupplyActivateUseCase(cryptoCurrency as CryptoCurrency.Token) + yieldSupplyActivateUseCase(cryptoCurrency) modelScope.launch { params.callback.onTransactionSent() } diff --git a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/subcomponents/stopearning/model/YieldSupplyStopEarningModel.kt b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/subcomponents/stopearning/model/YieldSupplyStopEarningModel.kt index 4204a8bc55..ff7bb1fa17 100644 --- a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/subcomponents/stopearning/model/YieldSupplyStopEarningModel.kt +++ b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/subcomponents/stopearning/model/YieldSupplyStopEarningModel.kt @@ -136,7 +136,7 @@ internal class YieldSupplyStopEarningModel @Inject constructor( ) }, ifRight = { - yieldSupplyDeactivateUseCase(cryptoCurrency as CryptoCurrency.Token) + yieldSupplyDeactivateUseCase(cryptoCurrency) params.callback.onTransactionSent() }, )