diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt index 916be59d74..330762e864 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt @@ -45,15 +45,6 @@ interface TangemTechApi { @GET("v1/geo") suspend fun getUserCountryCode(): GeoResponse - @GET("v1/user-tokens/{user-id}") - suspend fun getUserTokens(@Path(value = "user-id") userId: String): ApiResponse - - @PUT("v1/user-tokens/{user-id}") - suspend fun saveUserTokens( - @Path(value = "user-id") userId: String, - @Body userTokens: UserTokensResponse, - ): ApiResponse - @PUT("/v1/wallets/{walletId}/tokens") suspend fun saveTokens( @Path(value = "walletId") userId: String, @@ -138,14 +129,8 @@ interface TangemTechApi { @PATCH("v1/user-wallets/wallets/{wallet_id}") suspend fun updateWallet(@Path("wallet_id") walletId: String, @Body body: WalletBody): ApiResponse - @POST("v1/user-wallets/wallets/create-and-connect-by-appuid/{application_id}") - suspend fun associateApplicationIdWithWallets( - @Path("application_id") applicationId: String, - @Body body: List, - ): ApiResponse - @PUT("/v1/user-wallets/applications/{application_id}/wallets") - suspend fun associateApplicationIdWithWalletsV2( + suspend fun associateApplicationIdWithWallets( @Path("application_id") applicationId: String, @Body body: AssociateApplicationIdWithWalletsBody, ): ApiResponse diff --git a/data/common/src/main/kotlin/com/tangem/data/common/tokens/UserTokensBackwardCompatibility.kt b/data/common/src/main/kotlin/com/tangem/data/common/tokens/UserTokensBackwardCompatibility.kt index f9c12f4d03..1ba380c53d 100644 --- a/data/common/src/main/kotlin/com/tangem/data/common/tokens/UserTokensBackwardCompatibility.kt +++ b/data/common/src/main/kotlin/com/tangem/data/common/tokens/UserTokensBackwardCompatibility.kt @@ -11,23 +11,6 @@ import com.tangem.datasource.api.tangemTech.models.UserTokensResponse */ class UserTokensBackwardCompatibility { - fun applyCompatibilityAndGetUpdated(userTokensResponse: UserTokensResponse): UserTokensResponse { - return userTokensResponse.copy( - tokens = userTokensResponse.tokens.map { token -> - val oldSavedId = NETWORKS_TO_OLD_SAVED_IDS[token.networkId] - if (oldSavedId != null && token.id == oldSavedId) { - Blockchain.fromNetworkId(token.networkId)?.let { blockchain -> - token.copy( - id = blockchain.toCoinId(), - ) - } ?: token - } else { - token - } - }, - ) - } - fun applyCompatibilityAndGetUpdated(tokens: List): List { return tokens.map { token -> val oldSavedId = NETWORKS_TO_OLD_SAVED_IDS[token.networkId] diff --git a/data/wallets/src/main/java/com/tangem/data/wallets/DefaultWalletsRepository.kt b/data/wallets/src/main/java/com/tangem/data/wallets/DefaultWalletsRepository.kt index 8d90aedc75..e2fac0c166 100644 --- a/data/wallets/src/main/java/com/tangem/data/wallets/DefaultWalletsRepository.kt +++ b/data/wallets/src/main/java/com/tangem/data/wallets/DefaultWalletsRepository.kt @@ -362,7 +362,7 @@ internal class DefaultWalletsRepository( override suspend fun associateWallets(applicationId: String, wallets: List) = withContext(dispatchers.io) { val associateApplicationIdWithWallets: suspend () -> ApiResponse = { - tangemTechApi.associateApplicationIdWithWalletsV2( + tangemTechApi.associateApplicationIdWithWallets( applicationId = applicationId, body = AssociateApplicationIdWithWalletsBody( walletIds = wallets.map { it.walletId.stringValue }.distinct(), diff --git a/data/wallets/src/test/java/com/tangem/data/wallets/DefaultWalletsRepositoryTest.kt b/data/wallets/src/test/java/com/tangem/data/wallets/DefaultWalletsRepositoryTest.kt index 74d60d237c..639b115e55 100644 --- a/data/wallets/src/test/java/com/tangem/data/wallets/DefaultWalletsRepositoryTest.kt +++ b/data/wallets/src/test/java/com/tangem/data/wallets/DefaultWalletsRepositoryTest.kt @@ -186,7 +186,7 @@ class DefaultWalletsRepositoryTest { inner class AssociateWallets { @Test - fun `should convert and send to API V2`() = runTest { + fun `should convert and send to associateApplicationIdWithWallets`() = runTest { // Arrange val applicationId = "test_app_id" val wallet1Id = "1234567890abcdef" @@ -202,7 +202,7 @@ class DefaultWalletsRepositoryTest { ) coEvery { - tangemTechApi.associateApplicationIdWithWalletsV2(eq(applicationId), any()) + tangemTechApi.associateApplicationIdWithWallets(eq(applicationId), any()) } returns ApiResponse.Success(Unit) // Act @@ -210,7 +210,7 @@ class DefaultWalletsRepositoryTest { // Assert coVerify(exactly = 1) { - tangemTechApi.associateApplicationIdWithWalletsV2( + tangemTechApi.associateApplicationIdWithWallets( applicationId = eq(applicationId), body = match { body -> body.walletIds.size == 2 && diff --git a/domain/account/status/src/main/java/com/tangem/domain/account/status/di/AccountStatusUseCaseModule.kt b/domain/account/status/src/main/java/com/tangem/domain/account/status/di/AccountStatusUseCaseModule.kt index e2b9696c89..31d9b0d3b4 100644 --- a/domain/account/status/src/main/java/com/tangem/domain/account/status/di/AccountStatusUseCaseModule.kt +++ b/domain/account/status/src/main/java/com/tangem/domain/account/status/di/AccountStatusUseCaseModule.kt @@ -3,13 +3,11 @@ package com.tangem.domain.account.status.di import com.tangem.domain.account.repository.AccountsCRUDRepository import com.tangem.domain.account.status.supplier.MultiAccountStatusListSupplier import com.tangem.domain.account.status.supplier.SingleAccountStatusListSupplier -import com.tangem.domain.account.status.usecase.GetFeePaidCryptoCurrencyStatusSyncUseCase import com.tangem.domain.account.status.usecase.* import com.tangem.domain.account.status.utils.CryptoCurrencyBalanceFetcher import com.tangem.domain.account.status.utils.CryptoCurrencyMetadataCleaner import com.tangem.domain.account.supplier.SingleAccountListSupplier import com.tangem.domain.common.wallets.UserWalletsListRepository -import com.tangem.utils.coroutines.AppCoroutineScope import com.tangem.domain.express.ExpressServiceFetcher import com.tangem.domain.networks.multi.MultiNetworkStatusFetcher import com.tangem.domain.networks.multi.MultiNetworkStatusSupplier @@ -23,6 +21,7 @@ import com.tangem.domain.tokens.GetCryptoCurrencyActionsUseCase import com.tangem.domain.tokens.repository.CurrenciesRepository import com.tangem.domain.walletmanager.WalletManagersFacade import com.tangem.domain.wallets.derivations.DerivationsRepository +import com.tangem.utils.coroutines.AppCoroutineScope import com.tangem.utils.coroutines.CoroutineDispatcherProvider import dagger.Module import dagger.Provides @@ -76,10 +75,10 @@ internal object AccountStatusUseCaseModule { @Provides @Singleton - fun provideGetWalletTotalBalanceUseCaseV2( + fun provideGetWalletTotalBalanceUseCase( multiAccountStatusListSupplier: MultiAccountStatusListSupplier, - ): GetWalletTotalBalanceUseCaseV2 { - return GetWalletTotalBalanceUseCaseV2( + ): GetWalletTotalBalanceUseCase { + return GetWalletTotalBalanceUseCase( multiAccountStatusListSupplier = multiAccountStatusListSupplier, ) } diff --git a/domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/GetWalletTotalBalanceUseCaseV2.kt b/domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/GetWalletTotalBalanceUseCase.kt similarity index 97% rename from domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/GetWalletTotalBalanceUseCaseV2.kt rename to domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/GetWalletTotalBalanceUseCase.kt index 0bae08d46c..8bc2138974 100644 --- a/domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/GetWalletTotalBalanceUseCaseV2.kt +++ b/domain/account/status/src/main/java/com/tangem/domain/account/status/usecase/GetWalletTotalBalanceUseCase.kt @@ -15,7 +15,7 @@ import kotlinx.coroutines.flow.map * * @param multiAccountStatusListSupplier Supplier that provides the status list for multiple accounts. */ -class GetWalletTotalBalanceUseCaseV2( +class GetWalletTotalBalanceUseCase( private val multiAccountStatusListSupplier: MultiAccountStatusListSupplier, ) { diff --git a/domain/kyc/models/.gitignore b/domain/kyc/models/.gitignore deleted file mode 100644 index 796b96d1c4..0000000000 --- a/domain/kyc/models/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/domain/kyc/models/build.gradle.kts b/domain/kyc/models/build.gradle.kts deleted file mode 100644 index 6b18f3f83f..0000000000 --- a/domain/kyc/models/build.gradle.kts +++ /dev/null @@ -1,9 +0,0 @@ -plugins { - alias(deps.plugins.kotlin.jvm) - alias(deps.plugins.kotlin.serialization) - id("configuration") -} - -dependencies { - implementation(deps.kotlin.serialization) -} \ No newline at end of file diff --git a/domain/tokens/detekt-baseline-debug.xml b/domain/tokens/detekt-baseline-debug.xml deleted file mode 100644 index 3c148b5f78..0000000000 --- a/domain/tokens/detekt-baseline-debug.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - BooleanPropertyNaming:TokenActionsState.kt$TokenActionsState.ActionState.Swap$val showBadge: Boolean - CanBeNonNullable:BaseActionsFactory.kt$BaseActionsFactory$requirementsDeferred: Deferred<AssetRequirementsCondition?>? - CanBeNonNullable:CommonActionsFactory.kt$CommonActionsFactory$swapUnavailableReasonDeferred: Deferred<ScenarioUnavailabilityReason>? - ExplicitCollectionElementAccessMethod:GetWalletTotalBalanceUseCase.kt$GetWalletTotalBalanceUseCase$walletBalanceCache.put(userWalletId, content) - MultilineLambdaItParameter:BaseCurrencyStatusOperations.kt$BaseCurrencyStatusOperations${ singleQuoteStatusSupplier(params = SingleQuoteStatusProducer.Params(rawCurrencyId = it)) .firstOrNull() } - MultilineLambdaItParameter:BaseCurrencyStatusOperations.kt$BaseCurrencyStatusOperations${ val exception = IllegalStateException("$it") Error.DataError(exception) } - MultilineLambdaItParameter:FetchCurrencyStatusUseCase.kt$FetchCurrencyStatusUseCase${ when (it) { is StakingIdFactory.Error.UnableToGetAddress -> raise(IllegalStateException("$it")) StakingIdFactory.Error.UnsupportedCurrency -> Unit.right() } return@either } - MultilineLambdaItParameter:GetBalanceNotEnoughForFeeWarningUseCase.kt$GetBalanceNotEnoughForFeeWarningUseCase${ it is CryptoCurrency.Token && it.contractAddress.equals(feePaidToken.contractAddress, ignoreCase = true) && it.network.derivationPath == tokenStatus.currency.network.derivationPath } - MultilineLambdaItParameter:GetCryptoCurrencyActionsUseCase.kt$GetCryptoCurrencyActionsUseCase${ TokenActionsState( walletId = userWallet.walletId, cryptoCurrencyStatus = cryptoCurrencyStatus, states = it.toList(), ) } - MultilineLambdaItParameter:GetWalletTotalBalanceUseCase.kt$GetWalletTotalBalanceUseCase${ Timber.e("failed to load balances with error: $it") TotalFiatBalance.Failed } - MultilineLambdaItParameter:PriceChangeCalculator.kt$PriceChangeCalculator${ val weight = it.value.fiatAmount.orZero().divide(balance, 2, RoundingMode.HALF_UP) val priceChange = it.value.priceChange.orZero() weight * priceChange } - MultilineLambdaItParameter:WalletBalanceFetcher.kt$WalletBalanceFetcher${ val stakingId = stakingIdFactory.create(userWalletId = userWalletId, cryptoCurrency = it) if (stakingId.isLeft { it is StakingIdFactory.Error.UnableToGetAddress }) { Timber.e("Unable to get staking ID for user wallet $userWalletId and currency ${it.id}") } stakingId } - NamedArguments:ApplyTokenListSortingUseCase.kt$ApplyTokenListSortingUseCase$saveTokens(userWalletId, currencies, isGrouped, isSortedByBalance) - NoNameShadowing:WalletBalanceFetcher.kt$WalletBalanceFetcher${ it is StakingIdFactory.Error.UnableToGetAddress } - NullableBooleanCheck:GetCurrencyCheckUseCase.kt$GetCurrencyCheckUseCase$recipientAddress?.let { currencyChecksRepository.checkIfAccountFunded( userWalletId, network, recipientAddress, ) } ?: false - SuspendFunWithFlowReturnType:BaseCurrencyStatusOperations.kt$BaseCurrencyStatusOperations$suspend - SuspendFunWithFlowReturnType:GetNetworkCoinStatusUseCase.kt$GetNetworkCoinStatusUseCase$suspend - SuspendFunWithFlowReturnType:GetSingleCryptoCurrencyStatusUseCase.kt$GetSingleCryptoCurrencyStatusUseCase$suspend - UnnecessaryAbstractClass:MultiWalletCryptoCurrenciesSupplier.kt$MultiWalletCryptoCurrenciesSupplier$MultiWalletCryptoCurrenciesSupplier - UnsafeCallOnNullableType:CommonActionsFactory.kt$CommonActionsFactory$swapUnavailableReasonDeferred!! - - diff --git a/domain/tokens/models/detekt-baseline-main.xml b/domain/tokens/models/detekt-baseline-main.xml deleted file mode 100644 index 80759d1dfb..0000000000 --- a/domain/tokens/models/detekt-baseline-main.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - ObjectExtendsThrowable:RemoveCurrencyError.kt$RemoveCurrencyError$HasLinkedTokens : RemoveCurrencyError - UseEmptyCounterpart:PromoAnalyticsEvent.kt$PromoAnalyticsEvent$mapOf() - UseEmptyCounterpart:TokenExchangeAnalyticsEvent.kt$TokenExchangeAnalyticsEvent$mapOf() - UseEmptyCounterpart:TokenOnrampAnalyticsEvent.kt$TokenOnrampAnalyticsEvent$mapOf() - UseEmptyCounterpart:TokenReceiveAnalyticsEvent.kt$TokenReceiveAnalyticsEvent$mapOf() - UseEmptyCounterpart:TokenReceiveNewAnalyticsEvent.kt$TokenReceiveNewAnalyticsEvent$mapOf() - UseEmptyCounterpart:TokenScreenAnalyticsEvent.kt$TokenScreenAnalyticsEvent$mapOf() - - diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt index df7fde5ad2..56073246a8 100644 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt +++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/PromoAnalyticsEvent.kt @@ -5,7 +5,7 @@ import com.tangem.core.analytics.models.AnalyticsParam sealed class PromoAnalyticsEvent( event: String, - params: Map = mapOf(), + params: Map = emptyMap(), ) : AnalyticsEvent(category = "Promotion", event = event, params = params) { data class NoticePromotionBanner( private val source: AnalyticsParam.ScreensSources, diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenExchangeAnalyticsEvent.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenExchangeAnalyticsEvent.kt index 6206a29df4..18356a99ed 100644 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenExchangeAnalyticsEvent.kt +++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenExchangeAnalyticsEvent.kt @@ -8,7 +8,7 @@ import com.tangem.core.analytics.models.AnalyticsParam.Key.TOKEN_PARAM class TokenExchangeAnalyticsEvent( event: String, - params: Map = mapOf(), + params: Map = emptyMap(), ) : AnalyticsEvent("Token", event, params) { class CexTxStatusOpened(token: String, provider: String) : TokenScreenAnalyticsEvent( diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenOnrampAnalyticsEvent.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenOnrampAnalyticsEvent.kt index 8261c75b29..838e4dfa75 100644 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenOnrampAnalyticsEvent.kt +++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenOnrampAnalyticsEvent.kt @@ -7,7 +7,7 @@ import com.tangem.core.analytics.models.AnalyticsParam.Key.TOKEN_PARAM sealed class TokenOnrampAnalyticsEvent( event: String, - params: Map = mapOf(), + params: Map = emptyMap(), ) : AnalyticsEvent("Onramp", event, params) { class OnrampStatusOpened(tokenSymbol: String, provider: String, fiatCurrency: String) : TokenOnrampAnalyticsEvent( diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenReceiveAnalyticsEvent.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenReceiveAnalyticsEvent.kt index 7de884bf84..d0767447dd 100644 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenReceiveAnalyticsEvent.kt +++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenReceiveAnalyticsEvent.kt @@ -5,7 +5,7 @@ import com.tangem.core.analytics.models.AnalyticsParam.Key.TOKEN_PARAM sealed class TokenReceiveAnalyticsEvent( event: String, - params: Map = mapOf(), + params: Map = emptyMap(), ) : AnalyticsEvent("Token / Receive", event, params) { class ReceiveScreenOpened(token: String) : TokenReceiveAnalyticsEvent( diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenReceiveNewAnalyticsEvent.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenReceiveNewAnalyticsEvent.kt index 5916c680aa..bd66565b40 100644 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenReceiveNewAnalyticsEvent.kt +++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenReceiveNewAnalyticsEvent.kt @@ -9,7 +9,7 @@ import com.tangem.core.analytics.models.AnalyticsParam.Key.TOKEN_PARAM sealed class TokenReceiveNewAnalyticsEvent( event: String, - params: Map = mapOf(), + params: Map = emptyMap(), ) : AnalyticsEvent("Token / Receive", event, params) { class ReceiveScreenOpened( diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenScreenAnalyticsEvent.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenScreenAnalyticsEvent.kt index 41a0965407..c2c7e8aa7c 100644 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenScreenAnalyticsEvent.kt +++ b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/analytics/TokenScreenAnalyticsEvent.kt @@ -14,7 +14,7 @@ import com.tangem.domain.tokens.model.ScenarioUnavailabilityReason */ sealed class TokenScreenAnalyticsEvent( event: String, - params: Map = mapOf(), + params: Map = emptyMap(), ) : AnalyticsEvent("Token", event, params) { /** Legacy event. It has a unique category, but it also is sent on TokenScreen */ diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/remove/RemoveCurrencyError.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/remove/RemoveCurrencyError.kt deleted file mode 100644 index 8af9ed12ea..0000000000 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/remove/RemoveCurrencyError.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.tangem.domain.tokens.model.remove - -sealed class RemoveCurrencyError : Throwable() { - data class DataError(override val cause: Throwable) : RemoveCurrencyError() - - object HasLinkedTokens : RemoveCurrencyError() -} \ No newline at end of file diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/staking/YieldExtentions.kt b/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/staking/YieldExtentions.kt deleted file mode 100644 index 1005b86690..0000000000 --- a/domain/tokens/models/src/main/java/com/tangem/domain/tokens/model/staking/YieldExtentions.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.tangem.domain.tokens.model.staking - -import com.tangem.domain.models.currency.CryptoCurrency -import com.tangem.domain.staking.model.stakekit.Yield - -fun Yield.getCurrentToken(rawCurrencyId: CryptoCurrency.RawID?) = - tokens.firstOrNull { rawCurrencyId?.value == it.coinGeckoId } ?: token \ No newline at end of file diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetBalanceNotEnoughForFeeWarningUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetBalanceNotEnoughForFeeWarningUseCase.kt index 4f7dbc4e74..c825f0b25a 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetBalanceNotEnoughForFeeWarningUseCase.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetBalanceNotEnoughForFeeWarningUseCase.kt @@ -89,10 +89,10 @@ class GetBalanceNotEnoughForFeeWarningUseCase( ) .orEmpty() - val token = tokens.find { - it is CryptoCurrency.Token && - it.contractAddress.equals(feePaidToken.contractAddress, ignoreCase = true) && - it.network.derivationPath == tokenStatus.currency.network.derivationPath + val token = tokens.find { currency -> + currency is CryptoCurrency.Token && + currency.contractAddress.equals(feePaidToken.contractAddress, ignoreCase = true) && + currency.network.derivationPath == tokenStatus.currency.network.derivationPath } return if (token != null) { diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCryptoCurrencyActionsUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCryptoCurrencyActionsUseCase.kt index 3fa0898e2b..670d069a89 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCryptoCurrencyActionsUseCase.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCryptoCurrencyActionsUseCase.kt @@ -106,11 +106,11 @@ class GetCryptoCurrencyActionsUseCase( } } } - .map { + .map { states -> TokenActionsState( walletId = userWallet.walletId, cryptoCurrencyStatus = cryptoCurrencyStatus, - states = it.toList(), + states = states.toList(), ) } .flowOn(dispatchers.default) diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyCheckUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyCheckUseCase.kt index e1073f1bd0..8cd50559ec 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyCheckUseCase.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyCheckUseCase.kt @@ -36,13 +36,15 @@ class GetCurrencyCheckUseCase( currencyStatus = feeCurrencyStatus, balanceAfterTransaction = feeCurrencyBalanceAfterTransaction ?: BigDecimal.ZERO, ) - val isAccountFunded = recipientAddress?.let { + val isAccountFunded = if (recipientAddress != null) { currencyChecksRepository.checkIfAccountFunded( - userWalletId, - network, - recipientAddress, + userWalletId = userWalletId, + network = network, + address = recipientAddress, ) - } ?: false + } else { + false + } val utxoAmountLimit = if (currency is CryptoCurrency.Coin && amount != null && fee != null) { currencyChecksRepository.checkUtxoAmountLimit( userWalletId = userWalletId, diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/MultiWalletCryptoCurrenciesSupplier.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/MultiWalletCryptoCurrenciesSupplier.kt index 23b3fa5580..a6aef73dd6 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/MultiWalletCryptoCurrenciesSupplier.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/MultiWalletCryptoCurrenciesSupplier.kt @@ -14,6 +14,7 @@ import com.tangem.domain.tokens.MultiWalletCryptoCurrenciesProducer as Producer * [REDACTED_AUTHOR] */ +@Suppress("UnnecessaryAbstractClass") abstract class MultiWalletCryptoCurrenciesSupplier( override val factory: FlowProducer.Factory, override val keyCreator: (Producer.Params) -> String, diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/BaseActionsFactory.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/BaseActionsFactory.kt index c78daffbe3..b69c0ad6d6 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/BaseActionsFactory.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/BaseActionsFactory.kt @@ -137,6 +137,7 @@ internal open class BaseActionsFactory( * @param isAddressAvailable indicates whether the address is available * @param requirementsDeferred a deferred object containing the asset requirements condition */ + @Suppress("CanBeNonNullable") protected suspend fun ActionAvailabilityBuilder.addReceiveAction( isAddressAvailable: Boolean, requirementsDeferred: Deferred?, diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/CommonActionsFactory.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/CommonActionsFactory.kt index e90b41cbd4..a5ee00426b 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/CommonActionsFactory.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/CommonActionsFactory.kt @@ -140,6 +140,7 @@ internal class CommonActionsFactory( } } + @Suppress("CanBeNonNullable") private suspend fun createSwapAction( userWallet: UserWallet, cryptoCurrencyStatus: CryptoCurrencyStatus, @@ -153,7 +154,7 @@ internal class CommonActionsFactory( if (!isMultiCurrency) { return ActionState.Swap( unavailabilityReason = ScenarioUnavailabilityReason.SingleWallet, - showBadge = false, + shouldShowBadge = false, ) } @@ -161,21 +162,23 @@ internal class CommonActionsFactory( cryptoCurrency.isCustom -> { ActionState.Swap( unavailabilityReason = ScenarioUnavailabilityReason.CustomToken(cryptoCurrency.name), - showBadge = false, + shouldShowBadge = false, ) } cryptoCurrencyStatus.value is CryptoCurrencyStatus.NoQuote -> { ActionState.Swap( unavailabilityReason = ScenarioUnavailabilityReason.TokenNoQuotes(cryptoCurrency.name), - showBadge = false, + shouldShowBadge = false, ) } else -> { - val reason = swapUnavailableReasonDeferred!!.await() + val reason = requireNotNull(swapUnavailableReasonDeferred) { + "swapUnavailableReasonDeferred must not be null for available swap action" + }.await() return ActionState.Swap( unavailabilityReason = reason, - showBadge = reason == ScenarioUnavailabilityReason.None && shouldShowSwapStories, + shouldShowBadge = reason == ScenarioUnavailabilityReason.None && shouldShowSwapStories, ) } } diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/OutdatedDataActionsFactory.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/OutdatedDataActionsFactory.kt index 91ae07242d..9c5659e1d0 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/OutdatedDataActionsFactory.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/OutdatedDataActionsFactory.kt @@ -150,7 +150,7 @@ internal class OutdatedDataActionsFactory( sources.networkSource == StatusSource.ONLY_CACHE -> ScenarioUnavailabilityReason.UsedOutdatedData else -> ScenarioUnavailabilityReason.DataLoading // CACHE source always when loading }, - showBadge = false, + shouldShowBadge = false, ) } diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/UnreachableActionsFactory.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/UnreachableActionsFactory.kt index 411ee415a2..11a8155d1d 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/UnreachableActionsFactory.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/actions/UnreachableActionsFactory.kt @@ -64,7 +64,7 @@ internal class UnreachableActionsFactory( ActionState.Send(unavailabilityReason = ScenarioUnavailabilityReason.Unreachable), ActionState.Swap( unavailabilityReason = ScenarioUnavailabilityReason.Unreachable, - showBadge = false, + shouldShowBadge = false, ), ActionState.Sell(unavailabilityReason = ScenarioUnavailabilityReason.Unreachable), ActionState.Stake(unavailabilityReason = ScenarioUnavailabilityReason.Unreachable, option = null), diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/model/TokenActionsState.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/model/TokenActionsState.kt index 1cea4893f6..1f3284661e 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/model/TokenActionsState.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/model/TokenActionsState.kt @@ -29,7 +29,7 @@ data class TokenActionsState( data class Swap( override val unavailabilityReason: ScenarioUnavailabilityReason, - val showBadge: Boolean, + val shouldShowBadge: Boolean, ) : ActionState() data class Send(override val unavailabilityReason: ScenarioUnavailabilityReason) : ActionState() diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/PriceChangeCalculator.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/PriceChangeCalculator.kt index 41ba3d4e24..5b4ee8efdf 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/PriceChangeCalculator.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/operations/PriceChangeCalculator.kt @@ -50,9 +50,9 @@ object PriceChangeCalculator { return createZeroPriceChange(source = walletTotalFiatBalance.source).lceContent() } - val total = statuses.sumOf { - val weight = it.value.fiatAmount.orZero().divide(balance, 2, RoundingMode.HALF_UP) - val priceChange = it.value.priceChange.orZero() + val total = statuses.sumOf { status -> + val weight = status.value.fiatAmount.orZero().divide(balance, 2, RoundingMode.HALF_UP) + val priceChange = status.value.priceChange.orZero() weight * priceChange }.stripTrailingZeros() diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/wallet/WalletBalanceFetcher.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/wallet/WalletBalanceFetcher.kt index 51ea9c7ea3..e20203e84e 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/wallet/WalletBalanceFetcher.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/wallet/WalletBalanceFetcher.kt @@ -189,11 +189,11 @@ class WalletBalanceFetcher internal constructor( userWalletId: UserWalletId, currencies: Set, ): Either = either { - val maybeStakingIds = currencies.map { - val stakingId = stakingIdFactory.create(userWalletId = userWalletId, cryptoCurrency = it) + val maybeStakingIds = currencies.map { currency -> + val stakingId = stakingIdFactory.create(userWalletId = userWalletId, cryptoCurrency = currency) if (stakingId.isLeft { it is StakingIdFactory.Error.UnableToGetAddress }) { - Timber.e("Unable to get staking ID for user wallet $userWalletId and currency ${it.id}") + Timber.e("Unable to get staking ID for user wallet $userWalletId and currency ${currency.id}") } stakingId diff --git a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/market/details/portfolio/impl/model/PortfolioTokenUMConverter.kt b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/market/details/portfolio/impl/model/PortfolioTokenUMConverter.kt index 8041823bc4..2a078e38ed 100644 --- a/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/market/details/portfolio/impl/model/PortfolioTokenUMConverter.kt +++ b/features/feed/impl/src/main/kotlin/com/tangem/features/feed/components/market/details/portfolio/impl/model/PortfolioTokenUMConverter.kt @@ -111,7 +111,7 @@ internal class PortfolioTokenUMConverter( if (action.unavailabilityReason == ScenarioUnavailabilityReason.None) { when (action) { is TokenActionsState.ActionState.Buy -> QuickActionUM.Buy - is TokenActionsState.ActionState.Swap -> QuickActionUM.Exchange(action.showBadge) + is TokenActionsState.ActionState.Swap -> QuickActionUM.Exchange(action.shouldShowBadge) is TokenActionsState.ActionState.Receive -> QuickActionUM.Receive is TokenActionsState.ActionState.Stake -> QuickActionUM.Stake is TokenActionsState.ActionState.YieldMode -> QuickActionUM.YieldMode(action.apy) diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsActionButtonsConverter.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsActionButtonsConverter.kt index 50052f3557..c7b29743fa 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsActionButtonsConverter.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsActionButtonsConverter.kt @@ -54,7 +54,7 @@ internal class TokenDetailsActionButtonsConverter( TokenDetailsActionButton.Swap( dimContent = action.unavailabilityReason != ScenarioUnavailabilityReason.None, onClick = { clickIntents.onSwapClick(action.unavailabilityReason) }, - showBadge = action.showBadge, + showBadge = action.shouldShowBadge, ) } else -> { diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/utils/DefaultUserWalletsFetcher.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/utils/DefaultUserWalletsFetcher.kt index 0242c1bf72..b014375088 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/utils/DefaultUserWalletsFetcher.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/utils/DefaultUserWalletsFetcher.kt @@ -6,7 +6,7 @@ import com.tangem.common.ui.userwallet.state.UserWalletItemUM import com.tangem.core.decompose.ui.UiMessageSender import com.tangem.core.ui.extensions.resourceReference import com.tangem.core.ui.message.SnackbarMessage -import com.tangem.domain.account.status.usecase.GetWalletTotalBalanceUseCaseV2 +import com.tangem.domain.account.status.usecase.GetWalletTotalBalanceUseCase import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase import com.tangem.domain.appcurrency.error.SelectedAppCurrencyError import com.tangem.domain.appcurrency.model.AppCurrency @@ -37,7 +37,7 @@ import kotlinx.coroutines.flow.* @Suppress("LongParameterList") internal class DefaultUserWalletsFetcher @AssistedInject constructor( getWalletsUseCase: GetWalletsUseCase, - private val getWalletTotalBalanceUseCaseV2: GetWalletTotalBalanceUseCaseV2, + private val getWalletTotalBalanceUseCase: GetWalletTotalBalanceUseCase, private val getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase, private val getBalanceHidingSettingsUseCase: GetBalanceHidingSettingsUseCase, @Assisted private val onWalletClick: (UserWalletId) -> Unit, @@ -99,7 +99,7 @@ internal class DefaultUserWalletsFetcher @AssistedInject constructor( // We should not load balances in auth mode flowOf(Lce.Loading(walletIds.associateWith { TotalFiatBalance.Loading })) } else { - getWalletTotalBalanceUseCaseV2(userWalletIds = walletIds) + getWalletTotalBalanceUseCase(userWalletIds = walletIds) } }