From 5514e3a195731c4f7a2e6d8e908bb26e0337fd94 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 6 Nov 2025 22:12:26 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../api/tangemTech/YieldSupplyApi.kt | 2 ++ .../supply/DefaultYieldSupplyRepository.kt | 28 +++++++++++-------- .../yield/supply/YieldSupplyRepository.kt | 6 +++- .../usecase/YieldSupplyActivateUseCase.kt | 18 ++++++++---- .../impl/main/model/YieldSupplyModel.kt | 6 +++- .../model/YieldSupplyStartEarningModel.kt | 6 +++- ...SupplyStartEarningFeeContentTransformer.kt | 4 +-- 7 files changed, 48 insertions(+), 22 deletions(-) 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 6ed56e4ce7..baaa9e2bd7 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 @@ -8,6 +8,7 @@ import com.tangem.datasource.api.tangemTech.models.YieldSupplyMarketTokenDto import com.tangem.datasource.api.tangemTech.models.YieldTokenChartResponse import retrofit2.http.Body import retrofit2.http.GET +import retrofit2.http.Header import retrofit2.http.POST import retrofit2.http.Path import retrofit2.http.Query @@ -34,6 +35,7 @@ interface YieldSupplyApi { @POST("api/v1/module/activate") suspend fun activateYieldModule( @Body body: YieldSupplyChangeTokenStatusBody, + @Header("userWalletId") userWalletId: String, ): ApiResponse @POST("api/v1/module/deactivate") 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 84d2441b9e..cdc6d867fc 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 @@ -76,18 +76,22 @@ internal class DefaultYieldSupplyRepository( (walletManager as? YieldSupplyProvider)?.isSupported() ?: false } - override suspend fun activateProtocol(cryptoCurrencyToken: CryptoCurrency.Token, address: String): Boolean = - withContext(dispatchers.io) { - val chainId = Blockchain.fromNetworkId(cryptoCurrencyToken.network.backendId)?.getChainId() - ?: error("Chain id is required for evm's") - yieldSupplyApi.activateYieldModule( - YieldSupplyChangeTokenStatusBody( - tokenAddress = cryptoCurrencyToken.contractAddress, - chainId = chainId, - userAddress = address, - ), - ).getOrThrow().isActive - } + override suspend fun activateProtocol( + userWalletId: UserWalletId, + cryptoCurrencyToken: CryptoCurrency.Token, + address: String, + ): Boolean = withContext(dispatchers.io) { + val chainId = Blockchain.fromNetworkId(cryptoCurrencyToken.network.backendId)?.getChainId() + ?: error("Chain id is required for evm's") + yieldSupplyApi.activateYieldModule( + body = YieldSupplyChangeTokenStatusBody( + tokenAddress = cryptoCurrencyToken.contractAddress, + chainId = chainId, + userAddress = address, + ), + userWalletId = userWalletId.stringValue, + ).getOrThrow().isActive + } override suspend fun deactivateProtocol(cryptoCurrencyToken: CryptoCurrency.Token, address: String): Boolean = withContext(dispatchers.io) { 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 2a62e896fd..7fbbc6d543 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 @@ -46,7 +46,11 @@ interface YieldSupplyRepository { * May throw on network/backend errors or if required chain id cannot be resolved. */ @Throws - suspend fun activateProtocol(cryptoCurrencyToken: CryptoCurrency.Token, address: String): Boolean + suspend fun activateProtocol( + userWalletId: UserWalletId, + cryptoCurrencyToken: CryptoCurrency.Token, + address: String, + ): Boolean /** * Deactivate yield protocol for the specified token. 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 5b2126f395..f91c10b983 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 @@ -2,15 +2,23 @@ package com.tangem.domain.yield.supply.usecase import arrow.core.Either import com.tangem.domain.models.currency.CryptoCurrency +import com.tangem.domain.models.wallet.UserWalletId import com.tangem.domain.yield.supply.YieldSupplyRepository class YieldSupplyActivateUseCase( private val yieldSupplyRepository: YieldSupplyRepository, ) { - suspend operator fun invoke(cryptoCurrency: CryptoCurrency, address: String): Either = - Either.catch { - val token = cryptoCurrency as? CryptoCurrency.Token ?: error("Token expected") - yieldSupplyRepository.activateProtocol(token, address) - } + suspend operator fun invoke( + userWalletId: UserWalletId, + cryptoCurrency: CryptoCurrency, + address: String, + ): Either = Either.catch { + val token = cryptoCurrency as? CryptoCurrency.Token ?: error("Token expected") + yieldSupplyRepository.activateProtocol( + userWalletId = userWalletId, + cryptoCurrencyToken = token, + address = address, + ) + } } \ 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 b7e828f6fd..2360b55d2d 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 @@ -311,7 +311,11 @@ internal class YieldSupplyModel @Inject constructor( val address = cryptoCurrencyStatus.value.networkAddress?.defaultAddress?.value ?: return modelScope.launch(dispatchers.default) { if (cryptoCurrencyStatus.value.yieldSupplyStatus?.isActive == true) { - yieldSupplyActivateUseCase(token, address).onRight { + yieldSupplyActivateUseCase( + userWalletId = userWallet.walletId, + cryptoCurrency = token, + address = address, + ).onRight { lastYieldSupplyStatus = cryptoCurrencyStatus.value.yieldSupplyStatus } } else { 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 bb8781d903..e890ae8bc5 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 @@ -278,7 +278,11 @@ internal class YieldSupplyStartEarningModel @Inject constructor( val address = cryptoCurrencyStatus.value.networkAddress?.defaultAddress?.value if (address != null) { - yieldSupplyActivateUseCase(cryptoCurrency, address) + yieldSupplyActivateUseCase( + userWalletId = userWallet.walletId, + cryptoCurrency = cryptoCurrency, + address = address, + ) } modelScope.launch { diff --git a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/subcomponents/startearning/model/transformers/YieldSupplyStartEarningFeeContentTransformer.kt b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/subcomponents/startearning/model/transformers/YieldSupplyStartEarningFeeContentTransformer.kt index 8c189f61d8..782c6b2d3e 100644 --- a/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/subcomponents/startearning/model/transformers/YieldSupplyStartEarningFeeContentTransformer.kt +++ b/features/yield-supply/impl/src/main/java/com/tangem/features/yield/supply/impl/subcomponents/startearning/model/transformers/YieldSupplyStartEarningFeeContentTransformer.kt @@ -37,11 +37,11 @@ internal class YieldSupplyStartEarningFeeContentTransformer( val feeFiat = feeFiatRate?.let(feeValue::multiply) val feeFiatValueText = feeFiat.format { fiat(appCurrency.code, appCurrency.symbol) } - val estimatedFeeFiat = feeFiatRate?.let(estimatedFeeValue::multiply) + val estimatedFeeFiat = estimatedFeeValue val estimatedFeeFiatValueText = estimatedFeeFiat.format { fiat(appCurrency.code, appCurrency.symbol) } val tokenCryptoFee = tokenFiatRate?.let { rate -> - estimatedFeeFiat?.divide(rate, cryptoCurrency.decimals, RoundingMode.HALF_UP) + estimatedFeeFiat.divide(rate, cryptoCurrency.decimals, RoundingMode.HALF_UP) } val tokenCryptoFeeValueText = tokenCryptoFee.format { crypto(cryptoCurrency) } val tokenFiatFeeValueText = estimatedFeeFiat.format { fiat(appCurrency.code, appCurrency.symbol) }