diff --git a/data/common/src/main/kotlin/com/tangem/data/common/currency/DefaultCardCryptoCurrencyFactory.kt b/data/common/src/main/kotlin/com/tangem/data/common/currency/DefaultCardCryptoCurrencyFactory.kt index 2d7a8855d7..c10ff92538 100644 --- a/data/common/src/main/kotlin/com/tangem/data/common/currency/DefaultCardCryptoCurrencyFactory.kt +++ b/data/common/src/main/kotlin/com/tangem/data/common/currency/DefaultCardCryptoCurrencyFactory.kt @@ -6,9 +6,9 @@ import com.tangem.blockchainsdk.utils.toNetworkId import com.tangem.data.common.account.WalletAccountsFetcher import com.tangem.data.common.tokens.getDefaultWalletBlockchains import com.tangem.datasource.local.token.UserTokensResponseStore -import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles import com.tangem.domain.card.common.util.cardTypesResolver +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.demo.models.DemoConfig import com.tangem.domain.models.account.DerivationIndex import com.tangem.domain.models.currency.CryptoCurrency @@ -29,7 +29,7 @@ import com.tangem.domain.models.wallet.isMultiCurrency internal class DefaultCardCryptoCurrencyFactory( private val demoConfig: DemoConfig, private val excludedBlockchains: ExcludedBlockchains, - private val userWalletsStore: UserWalletsStore, + private val userWalletsListRepository: UserWalletsListRepository, private val accountsFeatureToggles: AccountsFeatureToggles, private val walletAccountsFetcher: WalletAccountsFetcher, private val userTokensResponseStore: UserTokensResponseStore, @@ -42,7 +42,7 @@ internal class DefaultCardCryptoCurrencyFactory( userWalletId: UserWalletId, networks: Set, ): Map> { - val userWallet = userWalletsStore.getSyncStrict(key = userWalletId) + val userWallet = userWalletsListRepository.getSyncStrict(id = userWalletId) // multi-currency wallet if (userWallet !is UserWallet.Cold || userWallet.isMultiCurrency) { @@ -67,7 +67,7 @@ internal class DefaultCardCryptoCurrencyFactory( } override suspend fun createByRawId(userWalletId: UserWalletId, network: Network.RawID): List { - val userWallet = userWalletsStore.getSyncStrict(key = userWalletId) + val userWallet = userWalletsListRepository.getSyncStrict(id = userWalletId) val blockchain = network.toBlockchain() diff --git a/data/common/src/main/kotlin/com/tangem/data/common/currency/UserTokensSaver.kt b/data/common/src/main/kotlin/com/tangem/data/common/currency/UserTokensSaver.kt index 11d6ab08c9..f203b6bb3c 100644 --- a/data/common/src/main/kotlin/com/tangem/data/common/currency/UserTokensSaver.kt +++ b/data/common/src/main/kotlin/com/tangem/data/common/currency/UserTokensSaver.kt @@ -11,8 +11,8 @@ import com.tangem.datasource.api.tangemTech.models.UserTokensResponse import com.tangem.datasource.api.tangemTech.models.WalletType import com.tangem.datasource.local.appsflyer.AppsFlyerStore import com.tangem.datasource.local.token.UserTokensResponseStore -import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.models.wallet.UserWalletId import com.tangem.utils.coroutines.CoroutineDispatcherProvider @@ -24,7 +24,7 @@ import timber.log.Timber @Suppress("LongParameterList") class UserTokensSaver( private val tangemTechApi: TangemTechApi, - private val userWalletsStore: UserWalletsStore, + private val userWalletsListRepository: UserWalletsListRepository, private val userTokensResponseStore: UserTokensResponseStore, private val dispatchers: CoroutineDispatcherProvider, private val addressesEnricher: UserTokensResponseAddressesEnricher, @@ -59,7 +59,7 @@ class UserTokensSaver( useEnricher: Boolean = true, onFailSend: () -> Unit = {}, ) = withContext(dispatchers.io) { - val userWallet = userWalletsStore.getSyncOrNull(key = userWalletId) + val userWallet = userWalletsListRepository.getSyncOrNull(id = userWalletId) if (userWallet == null) { Timber.e("UserWallet with id $userWalletId not found. Cannot push tokens.") diff --git a/data/common/src/main/kotlin/com/tangem/data/common/di/DataCommonModule.kt b/data/common/src/main/kotlin/com/tangem/data/common/di/DataCommonModule.kt index c81b908703..9ce3a6b121 100644 --- a/data/common/src/main/kotlin/com/tangem/data/common/di/DataCommonModule.kt +++ b/data/common/src/main/kotlin/com/tangem/data/common/di/DataCommonModule.kt @@ -13,8 +13,8 @@ import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.local.appsflyer.AppsFlyerStore import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.datasource.local.token.UserTokensResponseStore -import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.demo.models.DemoConfig import com.tangem.domain.walletmanager.WalletManagersFacade import com.tangem.domain.wallets.repository.WalletsRepository @@ -36,7 +36,7 @@ internal object DataCommonModule { @Singleton fun provideCardCryptoCurrencyFactory( excludedBlockchains: ExcludedBlockchains, - userWalletsStore: UserWalletsStore, + userWalletsListRepository: UserWalletsListRepository, accountsFeatureToggles: AccountsFeatureToggles, walletAccountsFetcher: WalletAccountsFetcher, userTokensResponseStore: UserTokensResponseStore, @@ -45,7 +45,7 @@ internal object DataCommonModule { return DefaultCardCryptoCurrencyFactory( demoConfig = DemoConfig, excludedBlockchains = excludedBlockchains, - userWalletsStore = userWalletsStore, + userWalletsListRepository = userWalletsListRepository, accountsFeatureToggles = accountsFeatureToggles, walletAccountsFetcher = walletAccountsFetcher, userTokensResponseStore = userTokensResponseStore, @@ -71,7 +71,7 @@ internal object DataCommonModule { @Singleton fun provideUserTokensSaver( tangemTechApi: TangemTechApi, - userWalletsStore: UserWalletsStore, + userWalletsListRepository: UserWalletsListRepository, userTokensResponseStore: UserTokensResponseStore, dispatchers: CoroutineDispatcherProvider, addressesEnricher: UserTokensResponseAddressesEnricher, @@ -81,7 +81,7 @@ internal object DataCommonModule { ): UserTokensSaver { return UserTokensSaver( tangemTechApi = tangemTechApi, - userWalletsStore = userWalletsStore, + userWalletsListRepository = userWalletsListRepository, userTokensResponseStore = userTokensResponseStore, dispatchers = dispatchers, addressesEnricher = addressesEnricher, @@ -109,13 +109,13 @@ internal object DataCommonModule { @Provides @Singleton fun provideWalletServerBinder( - userWalletsStore: UserWalletsStore, + userWalletsListRepository: UserWalletsListRepository, appsFlyerStore: AppsFlyerStore, tangemTechApi: TangemTechApi, dispatchers: CoroutineDispatcherProvider, ): WalletServerBinder { return DefaultWalletServerBinder( - userWalletsStore = userWalletsStore, + userWalletsListRepository = userWalletsListRepository, appsFlyerStore = appsFlyerStore, tangemTechApi = tangemTechApi, dispatchers = dispatchers, diff --git a/data/common/src/main/kotlin/com/tangem/data/common/wallet/DefaultWalletServerBinder.kt b/data/common/src/main/kotlin/com/tangem/data/common/wallet/DefaultWalletServerBinder.kt index f34c04f916..ee977ee128 100644 --- a/data/common/src/main/kotlin/com/tangem/data/common/wallet/DefaultWalletServerBinder.kt +++ b/data/common/src/main/kotlin/com/tangem/data/common/wallet/DefaultWalletServerBinder.kt @@ -4,21 +4,21 @@ import com.tangem.datasource.api.common.response.ApiResponse import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.api.tangemTech.converters.WalletIdBodyConverter import com.tangem.datasource.local.appsflyer.AppsFlyerStore -import com.tangem.datasource.local.userwallet.UserWalletsStore +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.models.wallet.UserWalletId import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.withContext internal class DefaultWalletServerBinder( - private val userWalletsStore: UserWalletsStore, + private val userWalletsListRepository: UserWalletsListRepository, private val appsFlyerStore: AppsFlyerStore, private val tangemTechApi: TangemTechApi, private val dispatchers: CoroutineDispatcherProvider, ) : WalletServerBinder { override suspend fun bind(userWalletId: UserWalletId): ApiResponse? { - val userWallet = userWalletsStore.getSyncOrNull(key = userWalletId) ?: return null + val userWallet = userWalletsListRepository.getSyncOrNull(id = userWalletId) ?: return null return bind(userWallet) } diff --git a/data/common/src/test/kotlin/com/tangem/data/common/currency/DefaultCardCryptoCurrencyFactoryTest.kt b/data/common/src/test/kotlin/com/tangem/data/common/currency/DefaultCardCryptoCurrencyFactoryTest.kt index 1d2b947799..28aafd0069 100644 --- a/data/common/src/test/kotlin/com/tangem/data/common/currency/DefaultCardCryptoCurrencyFactoryTest.kt +++ b/data/common/src/test/kotlin/com/tangem/data/common/currency/DefaultCardCryptoCurrencyFactoryTest.kt @@ -12,10 +12,10 @@ import com.tangem.data.common.account.WalletAccountsFetcher import com.tangem.data.common.network.NetworkFactory import com.tangem.datasource.api.tangemTech.models.UserTokensResponse import com.tangem.datasource.local.token.UserTokensResponseStore -import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles import com.tangem.domain.card.common.util.cardTypesResolver import com.tangem.domain.card.configs.GenericCardConfig +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.demo.models.DemoConfig import com.tangem.domain.models.currency.CryptoCurrency import com.tangem.domain.models.network.Network @@ -36,7 +36,7 @@ import org.junit.jupiter.params.ParameterizedTest @TestInstance(TestInstance.Lifecycle.PER_CLASS) internal class DefaultCardCryptoCurrencyFactoryTest { - private val userWalletsStore: UserWalletsStore = mockk() + private val userWalletsListRepository: UserWalletsListRepository = mockk() private val userTokensResponseStore: UserTokensResponseStore = mockk() private val excludedBlockchains = ExcludedBlockchains() private val accountsFeatureToggles = mockk() @@ -45,7 +45,7 @@ internal class DefaultCardCryptoCurrencyFactoryTest { private val factory = DefaultCardCryptoCurrencyFactory( demoConfig = DemoConfig, excludedBlockchains = excludedBlockchains, - userWalletsStore = userWalletsStore, + userWalletsListRepository = userWalletsListRepository, userTokensResponseStore = userTokensResponseStore, responseCryptoCurrenciesFactory = ResponseCryptoCurrenciesFactory( networkFactory = NetworkFactory(excludedBlockchains = excludedBlockchains), @@ -63,7 +63,7 @@ internal class DefaultCardCryptoCurrencyFactoryTest { @BeforeEach fun init() { - clearMocks(userWalletsStore, userTokensResponseStore, accountsFeatureToggles, walletAccountsFetcher, iconUri) + clearMocks(userWalletsListRepository, userTokensResponseStore, accountsFeatureToggles, walletAccountsFetcher, iconUri) mockkStatic(Uri::class) every { Uri.parse(any()) } returns iconUri @@ -82,7 +82,7 @@ internal class DefaultCardCryptoCurrencyFactoryTest { val network = ethereum.network every { accountsFeatureToggles.isFeatureEnabled } returns false - coEvery { userWalletsStore.getSyncStrict(key = userWallet.walletId) } returns userWallet + coEvery { userWalletsListRepository.getSyncStrict(id = userWallet.walletId) } returns userWallet coEvery { userTokensResponseStore.getSyncOrNull(userWallet.walletId) } returns userTokensResponse // Act @@ -94,7 +94,7 @@ internal class DefaultCardCryptoCurrencyFactoryTest { Truth.assertThat(actual).isEqualTo(expected) coVerifyOrder { - userWalletsStore.getSyncStrict(key = userWallet.walletId) + userWalletsListRepository.getSyncStrict(id = userWallet.walletId) userTokensResponseStore.getSyncOrNull(userWalletId = userWallet.walletId) } } @@ -131,7 +131,7 @@ internal class DefaultCardCryptoCurrencyFactoryTest { // Arrange val userWallet = createSingleWallet() - coEvery { userWalletsStore.getSyncStrict(key = userWallet.walletId) } returns userWallet + coEvery { userWalletsListRepository.getSyncStrict(id = userWallet.walletId) } returns userWallet // Act val actual = factory.create(userWalletId = userWallet.walletId, network = model.network) @@ -142,7 +142,7 @@ internal class DefaultCardCryptoCurrencyFactoryTest { Truth.assertThat(actual).isEqualTo(expected) coVerifyOrder { - userWalletsStore.getSyncStrict(key = userWallet.walletId) + userWalletsListRepository.getSyncStrict(id = userWallet.walletId) userWallet.scanResponse.cardTypesResolver.getBlockchain() } @@ -169,7 +169,7 @@ internal class DefaultCardCryptoCurrencyFactoryTest { // Arrange val userWallet = MockUserWalletFactory.createSingleWalletWithToken() - coEvery { userWalletsStore.getSyncStrict(key = userWallet.walletId) } returns userWallet + coEvery { userWalletsListRepository.getSyncStrict(id = userWallet.walletId) } returns userWallet // Act val actual = factory.create(userWalletId = userWallet.walletId, network = model.network) @@ -186,7 +186,7 @@ internal class DefaultCardCryptoCurrencyFactoryTest { Truth.assertThat(actual).isEqualTo(expected) coVerifyOrder { - userWalletsStore.getSyncStrict(key = userWallet.walletId) + userWalletsListRepository.getSyncStrict(id = userWallet.walletId) userWallet.scanResponse.cardTypesResolver.getBlockchain() } diff --git a/data/common/src/test/kotlin/com/tangem/data/common/currency/UserTokensSaverTest.kt b/data/common/src/test/kotlin/com/tangem/data/common/currency/UserTokensSaverTest.kt index 6c79df0d81..9623d72208 100644 --- a/data/common/src/test/kotlin/com/tangem/data/common/currency/UserTokensSaverTest.kt +++ b/data/common/src/test/kotlin/com/tangem/data/common/currency/UserTokensSaverTest.kt @@ -8,8 +8,8 @@ import com.tangem.datasource.api.tangemTech.models.UserTokensResponse import com.tangem.datasource.api.tangemTech.models.WalletType import com.tangem.datasource.local.appsflyer.AppsFlyerStore import com.tangem.datasource.local.token.UserTokensResponseStore -import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.models.wallet.UserWalletId import com.tangem.utils.coroutines.TestingCoroutineDispatcherProvider @@ -23,7 +23,7 @@ import org.junit.jupiter.api.TestInstance class UserTokensSaverTest { private val tangemTechApi: TangemTechApi = mockk() - private val userWalletsStore: UserWalletsStore = mockk(relaxUnitFun = true) + private val userWalletsListRepository: UserWalletsListRepository = mockk(relaxUnitFun = true) private val userTokensResponseStore: UserTokensResponseStore = mockk(relaxed = true) private val enricher: UserTokensResponseAddressesEnricher = mockk() private val accountsFeatureToggles = mockk { @@ -34,7 +34,7 @@ class UserTokensSaverTest { private val userTokensSaver: UserTokensSaver = UserTokensSaver( tangemTechApi = tangemTechApi, - userWalletsStore = userWalletsStore, + userWalletsListRepository = userWalletsListRepository, userTokensResponseStore = userTokensResponseStore, dispatchers = TestingCoroutineDispatcherProvider(), addressesEnricher = enricher, @@ -48,7 +48,7 @@ class UserTokensSaverTest { fun resetMocks() { clearMocks( tangemTechApi, - userWalletsStore, + userWalletsListRepository, userTokensResponseStore, enricher, walletServerBinder, @@ -119,7 +119,7 @@ class UserTokensSaverTest { var onFailSendCalled = false every { accountsFeatureToggles.isFeatureEnabled } returns true - coEvery { userWalletsStore.getSyncOrNull(userWalletId) } returns userWallet + coEvery { userWalletsListRepository.getSyncOrNull(userWalletId) } returns userWallet coEvery { enricher(userWalletId, response) } returns enrichedResponse coEvery { tangemTechApi.saveTokens(any(), any()) } returns ApiResponse.Error(error) as ApiResponse @@ -165,7 +165,7 @@ class UserTokensSaverTest { walletType = WalletType.COLD, ) - coEvery { userWalletsStore.getSyncOrNull(userWalletId) } returns userWallet + coEvery { userWalletsListRepository.getSyncOrNull(userWalletId) } returns userWallet coEvery { enricher(userWalletId, response) } returns enrichedResponse coEvery { tangemTechApi.saveTokens(userWalletId.stringValue, enrichedResponse) diff --git a/data/common/src/test/kotlin/com/tangem/data/common/wallet/DefaultWalletServerBinderTest.kt b/data/common/src/test/kotlin/com/tangem/data/common/wallet/DefaultWalletServerBinderTest.kt index 6da352653b..e599ae0254 100644 --- a/data/common/src/test/kotlin/com/tangem/data/common/wallet/DefaultWalletServerBinderTest.kt +++ b/data/common/src/test/kotlin/com/tangem/data/common/wallet/DefaultWalletServerBinderTest.kt @@ -7,7 +7,7 @@ import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.api.tangemTech.models.WalletIdBody import com.tangem.datasource.api.tangemTech.models.WalletType import com.tangem.datasource.local.appsflyer.AppsFlyerStore -import com.tangem.datasource.local.userwallet.UserWalletsStore +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.models.wallet.UserWalletId import com.tangem.domain.wallets.models.AppsFlyerConversionData @@ -26,13 +26,13 @@ import org.junit.jupiter.api.TestInstance @TestInstance(TestInstance.Lifecycle.PER_CLASS) internal class DefaultWalletServerBinderTest { - private val userWalletsStore: UserWalletsStore = mockk() + private val userWalletsListRepository: UserWalletsListRepository = mockk() private val appsFlyerStore: AppsFlyerStore = mockk() private val tangemTechApi: TangemTechApi = mockk() private val dispatchers: CoroutineDispatcherProvider = TestingCoroutineDispatcherProvider() private val binder = DefaultWalletServerBinder( - userWalletsStore = userWalletsStore, + userWalletsListRepository = userWalletsListRepository, appsFlyerStore = appsFlyerStore, tangemTechApi = tangemTechApi, dispatchers = dispatchers @@ -47,7 +47,7 @@ internal class DefaultWalletServerBinderTest { @AfterEach fun tearDown() { - clearMocks(userWalletsStore, appsFlyerStore, tangemTechApi) + clearMocks(userWalletsListRepository, appsFlyerStore, tangemTechApi) } @Nested @@ -65,7 +65,7 @@ internal class DefaultWalletServerBinderTest { ) val apiResponse = ApiResponse.Success(Unit) - coEvery { userWalletsStore.getSyncOrNull(userWalletId) } returns userWallet + coEvery { userWalletsListRepository.getSyncOrNull(userWalletId) } returns userWallet coEvery { appsFlyerStore.get() } returns conversionData coEvery { tangemTechApi.createWallet(requestBody) } returns apiResponse @@ -74,22 +74,22 @@ internal class DefaultWalletServerBinderTest { Truth.assertThat(actual).isEqualTo(apiResponse) coVerifyOrder { - userWalletsStore.getSyncOrNull(userWalletId) + userWalletsListRepository.getSyncOrNull(userWalletId) appsFlyerStore.get() tangemTechApi.createWallet(requestBody) } } @Test - fun `bind will skipped if userWalletsStore returns null`() = runTest { - coEvery { userWalletsStore.getSyncOrNull(userWalletId) } returns null + fun `bind will skipped if userWalletsListRepository returns null`() = runTest { + coEvery { userWalletsListRepository.getSyncOrNull(userWalletId) } returns null val actual = binder.bind(userWalletId = userWalletId) Truth.assertThat(actual).isEqualTo(null) coVerifyOrder { - userWalletsStore.getSyncOrNull(userWalletId) + userWalletsListRepository.getSyncOrNull(userWalletId) } coVerify(inverse = true) { @@ -107,7 +107,7 @@ internal class DefaultWalletServerBinderTest { ) val apiResponse = ApiResponse.Success(Unit) - coEvery { userWalletsStore.getSyncOrNull(userWalletId) } returns userWallet + coEvery { userWalletsListRepository.getSyncOrNull(userWalletId) } returns userWallet coEvery { appsFlyerStore.get() } returns null coEvery { tangemTechApi.createWallet(requestBody) } returns apiResponse @@ -116,7 +116,7 @@ internal class DefaultWalletServerBinderTest { Truth.assertThat(actual).isEqualTo(apiResponse) coVerifyOrder { - userWalletsStore.getSyncOrNull(userWalletId) + userWalletsListRepository.getSyncOrNull(userWalletId) appsFlyerStore.get() tangemTechApi.createWallet(requestBody) } @@ -133,7 +133,7 @@ internal class DefaultWalletServerBinderTest { ) val apiResponse = ApiResponse.Error(ApiResponseError.TimeoutException()) as ApiResponse - coEvery { userWalletsStore.getSyncOrNull(userWalletId) } returns userWallet + coEvery { userWalletsListRepository.getSyncOrNull(userWalletId) } returns userWallet coEvery { appsFlyerStore.get() } returns conversionData coEvery { tangemTechApi.createWallet(requestBody) } returns apiResponse @@ -142,7 +142,7 @@ internal class DefaultWalletServerBinderTest { Truth.assertThat(actual).isEqualTo(apiResponse) coVerifyOrder { - userWalletsStore.getSyncOrNull(userWalletId) + userWalletsListRepository.getSyncOrNull(userWalletId) appsFlyerStore.get() tangemTechApi.createWallet(requestBody) } diff --git a/data/markets/src/main/java/com/tangem/data/markets/DefaultMarketsTokenRepository.kt b/data/markets/src/main/java/com/tangem/data/markets/DefaultMarketsTokenRepository.kt index 9c1b3be3f1..f3a58f68e2 100644 --- a/data/markets/src/main/java/com/tangem/data/markets/DefaultMarketsTokenRepository.kt +++ b/data/markets/src/main/java/com/tangem/data/markets/DefaultMarketsTokenRepository.kt @@ -19,8 +19,8 @@ import com.tangem.datasource.api.common.response.getOrThrow import com.tangem.datasource.api.markets.TangemTechMarketsApi import com.tangem.datasource.api.markets.models.response.TokenMarketExchangesResponse import com.tangem.datasource.local.datastore.RuntimeStateStore -import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.appcurrency.model.AppCurrency +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.markets.* import com.tangem.domain.markets.repositories.MarketsTokenRepository import com.tangem.domain.models.account.DerivationIndex @@ -38,7 +38,7 @@ import java.util.concurrent.atomic.AtomicLong internal class DefaultMarketsTokenRepository( private val marketsApi: TangemTechMarketsApi, private val quotesFetcher: QuotesFetcher, - private val userWalletsStore: UserWalletsStore, + private val userWalletsListRepository: UserWalletsListRepository, private val dispatcherProvider: CoroutineDispatcherProvider, private val analyticsEventHandler: AnalyticsEventHandler, private val cacheRegistry: CacheRegistry, @@ -251,7 +251,7 @@ internal class DefaultMarketsTokenRepository( network: TokenMarketInfo.Network, accountIndex: DerivationIndex?, ): CryptoCurrency? { - val userWallet = userWalletsStore.getSyncOrNull(userWalletId) ?: error("UserWalletId [$userWalletId] not found") + val userWallet = userWalletsListRepository.getSyncStrict(userWalletId) val blockchain = Blockchain.fromNetworkId(network.networkId) ?: error("Unknown network [${network.networkId}]") return if (network.contractAddress == null) { diff --git a/data/markets/src/main/java/com/tangem/data/markets/di/MarketsDataModule.kt b/data/markets/src/main/java/com/tangem/data/markets/di/MarketsDataModule.kt index 7632ec2cb1..1e216b4717 100644 --- a/data/markets/src/main/java/com/tangem/data/markets/di/MarketsDataModule.kt +++ b/data/markets/src/main/java/com/tangem/data/markets/di/MarketsDataModule.kt @@ -8,7 +8,7 @@ import com.tangem.data.common.quote.QuotesFetcher import com.tangem.data.markets.DefaultMarketsTokenRepository import com.tangem.datasource.api.markets.TangemTechMarketsApi import com.tangem.datasource.local.datastore.RuntimeStateStore -import com.tangem.datasource.local.userwallet.UserWalletsStore +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.markets.repositories.MarketsTokenRepository import com.tangem.utils.coroutines.CoroutineDispatcherProvider import dagger.Module @@ -26,7 +26,7 @@ internal object MarketsDataModule { fun provideMarketsTokenRepository( marketsApi: TangemTechMarketsApi, quotesFetcher: QuotesFetcher, - userWalletsStore: UserWalletsStore, + userWalletsListRepository: UserWalletsListRepository, dispatchers: CoroutineDispatcherProvider, analyticsEventHandler: AnalyticsEventHandler, cacheRegistry: CacheRegistry, @@ -37,7 +37,7 @@ internal object MarketsDataModule { marketsApi = marketsApi, quotesFetcher = quotesFetcher, dispatcherProvider = dispatchers, - userWalletsStore = userWalletsStore, + userWalletsListRepository = userWalletsListRepository, analyticsEventHandler = analyticsEventHandler, cacheRegistry = cacheRegistry, tokenExchangesStore = RuntimeStateStore(defaultValue = emptyList()), diff --git a/data/networks/build.gradle.kts b/data/networks/build.gradle.kts index c61859dc69..90ca5576e0 100644 --- a/data/networks/build.gradle.kts +++ b/data/networks/build.gradle.kts @@ -24,11 +24,12 @@ dependencies { // endregion // region Project - Domain - implementation(projects.domain.legacy) - implementation(projects.domain.walletManager) implementation(projects.domain.card) - api(projects.domain.models) + implementation(projects.domain.common) + implementation(projects.domain.legacy) + implementation(projects.domain.models) implementation(projects.domain.networks) + implementation(projects.domain.walletManager) // endregion // region Project - Libs diff --git a/data/networks/src/main/java/com/tangem/data/networks/multi/DefaultMultiNetworkStatusProducer.kt b/data/networks/src/main/java/com/tangem/data/networks/multi/DefaultMultiNetworkStatusProducer.kt index 895dc129a7..f0546b2d68 100644 --- a/data/networks/src/main/java/com/tangem/data/networks/multi/DefaultMultiNetworkStatusProducer.kt +++ b/data/networks/src/main/java/com/tangem/data/networks/multi/DefaultMultiNetworkStatusProducer.kt @@ -4,7 +4,7 @@ import arrow.core.Option import arrow.core.some import com.tangem.data.common.network.NetworkFactory import com.tangem.data.networks.store.NetworksStatusesStore -import com.tangem.datasource.local.userwallet.UserWalletsStore +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.core.flow.FlowProducerTools import com.tangem.domain.models.network.NetworkStatus import com.tangem.domain.networks.multi.MultiNetworkStatusProducer @@ -28,7 +28,7 @@ internal class DefaultMultiNetworkStatusProducer @AssistedInject constructor( @Assisted val params: MultiNetworkStatusProducer.Params, override val flowProducerTools: FlowProducerTools, private val networksStatusesStore: NetworksStatusesStore, - private val userWalletsStore: UserWalletsStore, + private val userWalletsListRepository: UserWalletsListRepository, private val networkFactory: NetworkFactory, private val dispatchers: CoroutineDispatcherProvider, ) : MultiNetworkStatusProducer { @@ -39,7 +39,7 @@ internal class DefaultMultiNetworkStatusProducer @AssistedInject constructor( return networksStatusesStore.get(userWalletId = params.userWalletId) .distinctUntilChanged() .mapNotNull { statuses -> - val userWallet = userWalletsStore.getSyncOrNull(params.userWalletId) + val userWallet = userWalletsListRepository.getSyncOrNull(params.userWalletId) if (userWallet == null) { Timber.e("Unable to get UserWallet with provided ID: ${params.userWalletId}") diff --git a/data/networks/src/test/java/com/tangem/data/networks/multi/DefaultMultiNetworkStatusProducerTest.kt b/data/networks/src/test/java/com/tangem/data/networks/multi/DefaultMultiNetworkStatusProducerTest.kt index aa5c37e306..f677f10935 100644 --- a/data/networks/src/test/java/com/tangem/data/networks/multi/DefaultMultiNetworkStatusProducerTest.kt +++ b/data/networks/src/test/java/com/tangem/data/networks/multi/DefaultMultiNetworkStatusProducerTest.kt @@ -9,8 +9,8 @@ import com.tangem.data.common.network.NetworkFactory import com.tangem.data.networks.models.SimpleNetworkStatus import com.tangem.data.networks.store.NetworksStatusesStore import com.tangem.data.networks.toSimple -import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.card.configs.GenericCardConfig +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.core.flow.FlowProducerTools import com.tangem.domain.models.network.NetworkStatus import com.tangem.domain.networks.multi.MultiNetworkStatusProducer @@ -33,7 +33,7 @@ internal class DefaultMultiNetworkStatusProducerTest { private val params = MultiNetworkStatusProducer.Params(userWalletId = userWallet.walletId) private val networksStatusesStore = mockk() - private val userWalletsStore = mockk() + private val userWalletsListRepository = mockk() private val networkFactory = mockk() private val dispatchers = TestingCoroutineDispatcherProvider() private val flowProducerTools: FlowProducerTools = mockk() @@ -41,7 +41,7 @@ internal class DefaultMultiNetworkStatusProducerTest { private val producer = DefaultMultiNetworkStatusProducer( params = params, networksStatusesStore = networksStatusesStore, - userWalletsStore = userWalletsStore, + userWalletsListRepository = userWalletsListRepository, networkFactory = networkFactory, dispatchers = dispatchers, flowProducerTools = flowProducerTools, @@ -49,7 +49,7 @@ internal class DefaultMultiNetworkStatusProducerTest { @BeforeEach fun resetMocks() { - clearMocks(networksStatusesStore, userWalletsStore, networkFactory) + clearMocks(networksStatusesStore, userWalletsListRepository, networkFactory) } @Test @@ -65,7 +65,7 @@ internal class DefaultMultiNetworkStatusProducerTest { val networksStatusesFlow = flowOf(simpleStatuses) every { networksStatusesStore.get(params.userWalletId) } returns networksStatusesFlow - every { userWalletsStore.getSyncOrNull(params.userWalletId) } returns userWallet + every { userWalletsListRepository.getSyncOrNull(params.userWalletId) } returns userWallet every { networkFactory.create( @@ -94,7 +94,7 @@ internal class DefaultMultiNetworkStatusProducerTest { verifyOrder { networksStatusesStore.get(params.userWalletId) - userWalletsStore.getSyncOrNull(params.userWalletId) + userWalletsListRepository.getSyncOrNull(params.userWalletId) networkFactory.create( networkId = simpleStatuses.first().id, derivationPath = simpleStatuses.first().id.derivationPath, @@ -129,7 +129,7 @@ internal class DefaultMultiNetworkStatusProducerTest { // region every every { networksStatusesStore.get(params.userWalletId) } returns networksStatusesFlow - every { userWalletsStore.getSyncOrNull(params.userWalletId) } returns userWallet + every { userWalletsListRepository.getSyncOrNull(params.userWalletId) } returns userWallet every { networkFactory.create( networkId = simpleStatuses.first().id, @@ -177,7 +177,7 @@ internal class DefaultMultiNetworkStatusProducerTest { Truth.assertThat(actual1.first()).isEqualTo(expected1) verifyOrder { - userWalletsStore.getSyncOrNull(params.userWalletId) + userWalletsListRepository.getSyncOrNull(params.userWalletId) networkFactory.create( networkId = simpleStatuses.first().id, derivationPath = simpleStatuses.first().id.derivationPath, @@ -202,7 +202,7 @@ internal class DefaultMultiNetworkStatusProducerTest { Truth.assertThat(actual2).isEqualTo(expected2) verifyOrder { - userWalletsStore.getSyncOrNull(params.userWalletId) + userWalletsListRepository.getSyncOrNull(params.userWalletId) networkFactory.create( networkId = updatedSimpleStatuses.first().id, derivationPath = updatedSimpleStatuses.first().id.derivationPath, @@ -230,7 +230,7 @@ internal class DefaultMultiNetworkStatusProducerTest { // region every every { networksStatusesStore.get(params.userWalletId) } returns networksStatusesFlow - every { userWalletsStore.getSyncOrNull(params.userWalletId) } returns userWallet + every { userWalletsListRepository.getSyncOrNull(params.userWalletId) } returns userWallet every { networkFactory.create( @@ -263,7 +263,7 @@ internal class DefaultMultiNetworkStatusProducerTest { Truth.assertThat(actual1.first()).isEqualTo(expected1) verifyOrder { - userWalletsStore.getSyncOrNull(params.userWalletId) + userWalletsListRepository.getSyncOrNull(params.userWalletId) networkFactory.create( networkId = simpleStatuses.first().id, derivationPath = simpleStatuses.first().id.derivationPath, @@ -312,7 +312,7 @@ internal class DefaultMultiNetworkStatusProducerTest { // region every every { networksStatusesStore.get(params.userWalletId) } returns networksStatusesFlow - every { userWalletsStore.getSyncOrNull(params.userWalletId) } returns userWallet + every { userWalletsListRepository.getSyncOrNull(params.userWalletId) } returns userWallet every { networkFactory.create( networkId = simpleStatuses.first().id, @@ -340,7 +340,7 @@ internal class DefaultMultiNetworkStatusProducerTest { Truth.assertThat(actual1.first()).isEqualTo(expected1) verifyOrder(inverse = true) { - userWalletsStore.getSyncOrNull(any()) + userWalletsListRepository.getSyncOrNull(any()) networkFactory.create(networkId = any(), derivationPath = any(), userWallet = any()) } @@ -354,7 +354,7 @@ internal class DefaultMultiNetworkStatusProducerTest { Truth.assertThat(actual2.first()).isEqualTo(expected2) verifyOrder { - userWalletsStore.getSyncOrNull(params.userWalletId) + userWalletsListRepository.getSyncOrNull(params.userWalletId) networkFactory.create( networkId = simpleStatuses.first().id, derivationPath = simpleStatuses.first().id.derivationPath, @@ -382,7 +382,7 @@ internal class DefaultMultiNetworkStatusProducerTest { Truth.assertThat(actual.first()).isEqualTo(expected) verify { networksStatusesStore.get(params.userWalletId) } - verify(inverse = true) { userWalletsStore.getSyncOrNull(params.userWalletId) } + verify(inverse = true) { userWalletsListRepository.getSyncOrNull(params.userWalletId) } } @Test @@ -398,7 +398,7 @@ internal class DefaultMultiNetworkStatusProducerTest { val networksStatusesFlow = flowOf(simpleStatuses) every { networksStatusesStore.get(params.userWalletId) } returns networksStatusesFlow - every { userWalletsStore.getSyncOrNull(params.userWalletId) } returns userWallet + every { userWalletsListRepository.getSyncOrNull(params.userWalletId) } returns userWallet coEvery { networkFactory.create(networkId = any(), any(), any()) } returns null // Act @@ -411,7 +411,7 @@ internal class DefaultMultiNetworkStatusProducerTest { verifyOrder { networksStatusesStore.get(params.userWalletId) - userWalletsStore.getSyncOrNull(params.userWalletId) + userWalletsListRepository.getSyncOrNull(params.userWalletId) networkFactory.create( networkId = simpleStatuses.first().id, derivationPath = simpleStatuses.first().id.derivationPath, diff --git a/data/onramp/detekt-baseline-debug.xml b/data/onramp/detekt-baseline-debug.xml deleted file mode 100644 index ec3fa17add..0000000000 --- a/data/onramp/detekt-baseline-debug.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - BooleanPropertyNaming:DefaultOnrampRepository.kt$DefaultOnrampRepository$val cachedValue = onrampSepaAvailabilityStore.getSyncOrNull(key) - MultilineLambdaItParameter:DefaultHotCryptoRepository.kt$DefaultHotCryptoRepository${ Timber.e(it, "Unable to fetch hot crypto") analyticsEventHandler.send( event = MainScreenAnalyticsEvent.HotTokenError( errorCode = (it as? ApiResponseError.HttpException)?.code?.numericCode?.toString().orEmpty(), ), ) } - MultilineLambdaItParameter:DefaultHotCryptoRepository.kt$DefaultHotCryptoRepository${ if (it.id == OLD_POLYGON_NAME) { it.copy(id = NEW_POLYGON_NAME) } else { it } } - MultilineLambdaItParameter:DefaultHotCryptoRepository.kt$DefaultHotCryptoRepository${ val userWallet = userWalletsStore.getSyncOrNull(userWalletId) ?: error("UserWalletId [$userWalletId] not found") HotCryptoCurrencyConverter( userWallet = userWallet, imageHost = it.imageHost, excludedBlockchains = excludedBlockchains, ) .convertList(input = it.tokens) .filterNotNull() } - MultilineLambdaItParameter:DefaultOnrampRepository.kt$DefaultOnrampRepository${ Timber.w(it, "Unable to fetch express providers") throw it } - MultilineLambdaItParameter:DefaultOnrampRepository.kt$DefaultOnrampRepository${ Timber.w(it, "Unable to fetch onramp pairs") throw it } - MultilineLambdaItParameter:DefaultOnrampRepository.kt$DefaultOnrampRepository${ Timber.w(it, "Unable to fetch onramp payment methods") throw it } - UnnecessaryLet:DefaultOnrampRepository.kt$DefaultOnrampRepository$let(countryConverter::convert) - UnnecessaryLet:DefaultOnrampRepository.kt$DefaultOnrampRepository$let(paymentMethodsConverter::convertList) - UnnecessaryLet:DefaultOnrampRepository.kt$DefaultOnrampRepository$let(statusConverter::convert) - UseOrEmpty:DefaultOnrampTransactionRepository.kt$DefaultOnrampTransactionRepository$stored ?: emptySet() - - diff --git a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultHotCryptoRepository.kt b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultHotCryptoRepository.kt index 5b985a43fc..aa5a415297 100644 --- a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultHotCryptoRepository.kt +++ b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultHotCryptoRepository.kt @@ -18,10 +18,10 @@ import com.tangem.datasource.api.tangemTech.models.account.toUserTokensResponse import com.tangem.datasource.appcurrency.AppCurrencyResponseStore import com.tangem.datasource.exchangeservice.hotcrypto.HotCryptoResponseStore import com.tangem.datasource.local.token.UserTokensResponseStore -import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles import com.tangem.domain.card.common.extensions.canHandleBlockchain import com.tangem.domain.card.common.extensions.canHandleToken +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.models.wallet.UserWalletId import com.tangem.domain.onramp.model.HotCryptoCurrency @@ -54,7 +54,7 @@ import timber.log.Timber internal class DefaultHotCryptoRepository( private val excludedBlockchains: ExcludedBlockchains, private val hotCryptoResponseStore: HotCryptoResponseStore, - private val userWalletsStore: UserWalletsStore, + private val userWalletsListRepository: UserWalletsListRepository, private val tangemTechApi: TangemTechApi, private val appCurrencyResponseStore: AppCurrencyResponseStore, private val accountsFeatureToggles: AccountsFeatureToggles, @@ -88,22 +88,22 @@ internal class DefaultHotCryptoRepository( return hotCryptoResponseStore.get() .map { it[userWalletId] } .filterNotNull() - .map { - val userWallet = userWalletsStore.getSyncOrNull(userWalletId) + .map { response -> + val userWallet = userWalletsListRepository.getSyncOrNull(userWalletId) ?: error("UserWalletId [$userWalletId] not found") HotCryptoCurrencyConverter( userWallet = userWallet, - imageHost = it.imageHost, + imageHost = response.imageHost, excludedBlockchains = excludedBlockchains, ) - .convertList(input = it.tokens) + .convertList(input = response.tokens) .filterNotNull() } } private fun getWalletsWithTokensFlow(): Flow>> { - return userWalletsStore.userWallets.flatMapLatest { userWallets -> + return userWalletsListRepository.loadAndGet().flatMapLatest { userWallets -> val flows = userWallets.map { userWallet -> if (accountsFeatureToggles.isFeatureEnabled) { walletAccountsFetcher.get(userWalletId = userWallet.walletId).map { it.toUserTokensResponse() } @@ -131,12 +131,13 @@ internal class DefaultHotCryptoRepository( tangemTechApi.getHotCrypto(currencyId = appCurrencyId).getOrThrow() } .onSuccess { Timber.d("HotCrypto is successfully updated") } - .onFailure { - Timber.e(it, "Unable to fetch hot crypto") + .onFailure { throwable -> + Timber.e(throwable, "Unable to fetch hot crypto") + val httpException = throwable as? ApiResponseError.HttpException analyticsEventHandler.send( event = MainScreenAnalyticsEvent.HotTokenError( - errorCode = (it as? ApiResponseError.HttpException)?.code?.numericCode?.toString().orEmpty(), + errorCode = httpException?.code?.numericCode?.toString().orEmpty(), ), ) } @@ -164,11 +165,11 @@ internal class DefaultHotCryptoRepository( } private fun List.applyTokensIdMigrations(): List { - return this.map { - if (it.id == OLD_POLYGON_NAME) { - it.copy(id = NEW_POLYGON_NAME) + return this.map { token -> + if (token.id == OLD_POLYGON_NAME) { + token.copy(id = NEW_POLYGON_NAME) } else { - it + token } } } diff --git a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt index be4b3d4460..bf07c9a118 100644 --- a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt +++ b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampRepository.kt @@ -138,7 +138,7 @@ internal class DefaultOnrampRepository( } } - val country = onrampApi.getCountryByIp( + val response = onrampApi.getCountryByIp( userWalletId = userWallet.walletId.stringValue, refCode = ExpressUtils.getRefCode( userWallet = userWallet, @@ -146,7 +146,8 @@ internal class DefaultOnrampRepository( ), ) .getOrThrow() - .let(countryConverter::convert) + + val country = countryConverter.convert(response) onrampCurrentCountryByIPStore.store(country) @@ -154,7 +155,7 @@ internal class DefaultOnrampRepository( } override suspend fun getStatus(userWallet: UserWallet, txId: String): OnrampStatus = withContext(dispatchers.io) { - onrampApi.getStatus( + val response = onrampApi.getStatus( userWalletId = userWallet.walletId.stringValue, refCode = ExpressUtils.getRefCode( userWallet = userWallet, @@ -163,7 +164,8 @@ internal class DefaultOnrampRepository( txId = txId, ) .getOrThrow() - .let(statusConverter::convert) + + statusConverter.convert(response) } override suspend fun saveDefaultCurrency(currency: OnrampCurrency) = withContext(dispatchers.io) { @@ -218,9 +220,9 @@ internal class DefaultOnrampRepository( ), ).bind() }, - onError = { - Timber.w(it, "Unable to fetch onramp payment methods") - throw it + onError = { error -> + Timber.w(error, "Unable to fetch onramp payment methods") + throw error }, ) paymentMethodsStore.store(PAYMENT_METHODS_KEY, response.removeApplePay()) @@ -253,9 +255,9 @@ internal class DefaultOnrampRepository( ), ).bind() }, - onError = { - Timber.w(it, "Unable to fetch onramp pairs") - throw it + onError = { error -> + Timber.w(error, "Unable to fetch onramp pairs") + throw error }, ) } @@ -270,9 +272,9 @@ internal class DefaultOnrampRepository( ), ).bind() }, - onError = { - Timber.w(it, "Unable to fetch express providers") - throw it + onError = { error -> + Timber.w(error, "Unable to fetch express providers") + throw error }, ) } @@ -291,10 +293,10 @@ internal class DefaultOnrampRepository( cryptoCurrency = cryptoCurrency, ) - val cachedValue = onrampSepaAvailabilityStore.getSyncOrNull(key) + val isCachedValue = onrampSepaAvailabilityStore.getSyncOrNull(key) - if (cachedValue != null) { - return@withContext cachedValue + if (isCachedValue != null) { + return@withContext isCachedValue } val onrampPairs = @@ -318,9 +320,9 @@ internal class DefaultOnrampRepository( ), ).bind() }, - onError = { - Timber.w(it, "Unable to fetch onramp pairs") - throw it + onError = { error -> + Timber.w(error, "Unable to fetch onramp pairs") + throw error }, ) @@ -525,9 +527,11 @@ internal class DefaultOnrampRepository( } private suspend fun getPaymentMethods(): List { - return requireNotNull(paymentMethodsStore.getSyncOrNull(PAYMENT_METHODS_KEY)) { + val methods = requireNotNull(paymentMethodsStore.getSyncOrNull(PAYMENT_METHODS_KEY)) { "Onramp payment methods is absent in storage" - }.let(paymentMethodsConverter::convertList) + } + + return paymentMethodsConverter.convertList(methods) } private fun createOnrampTransaction( diff --git a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampTransactionRepository.kt b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampTransactionRepository.kt index 782b4b7b5b..77c3740a75 100644 --- a/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampTransactionRepository.kt +++ b/data/onramp/src/main/java/com/tangem/data/onramp/DefaultOnrampTransactionRepository.kt @@ -100,7 +100,7 @@ internal class DefaultOnrampTransactionRepository( mutablePreferences.setObjectSet( key = PreferencesKeys.ONRAMP_TRANSACTIONS_STATUSES_KEY, - value = stored ?: emptySet(), + value = stored.orEmpty(), ) } } diff --git a/data/onramp/src/main/java/com/tangem/data/onramp/di/OnrampDataModule.kt b/data/onramp/src/main/java/com/tangem/data/onramp/di/OnrampDataModule.kt index a4e93fec4f..88a6e8f021 100644 --- a/data/onramp/src/main/java/com/tangem/data/onramp/di/OnrampDataModule.kt +++ b/data/onramp/src/main/java/com/tangem/data/onramp/di/OnrampDataModule.kt @@ -28,8 +28,8 @@ import com.tangem.datasource.local.onramp.sepa.OnrampCurrentCountryByIPStore import com.tangem.datasource.local.onramp.sepa.OnrampSepaAvailabilityStore import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.datasource.local.token.UserTokensResponseStore -import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.onramp.repositories.* import com.tangem.domain.walletmanager.WalletManagersFacade import com.tangem.utils.coroutines.CoroutineDispatcherProvider @@ -105,7 +105,7 @@ internal object OnrampDataModule { fun provideHotCryptoRepository( excludedBlockchains: ExcludedBlockchains, hotCryptoResponseStore: HotCryptoResponseStore, - userWalletsStore: UserWalletsStore, + userWalletsListRepository: UserWalletsListRepository, tangemTechApi: TangemTechApi, appCurrencyResponseStore: AppCurrencyResponseStore, dispatchers: CoroutineDispatcherProvider, @@ -117,7 +117,7 @@ internal object OnrampDataModule { return DefaultHotCryptoRepository( excludedBlockchains = excludedBlockchains, hotCryptoResponseStore = hotCryptoResponseStore, - userWalletsStore = userWalletsStore, + userWalletsListRepository = userWalletsListRepository, tangemTechApi = tangemTechApi, appCurrencyResponseStore = appCurrencyResponseStore, dispatchers = dispatchers, diff --git a/data/tokens/detekt-baseline-debug.xml b/data/tokens/detekt-baseline-debug.xml deleted file mode 100644 index bc443d0652..0000000000 --- a/data/tokens/detekt-baseline-debug.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - MultilineLambdaItParameter:CustomTokensMerger.kt$CustomTokensMerger${ Timber.e(it, "Unable to fetch token:\n$token") null } - NullableToStringCall:AccountListCryptoCurrenciesFetcher.kt$AccountListCryptoCurrenciesFetcher$${this::class.simpleName} - NullableToStringCall:DefaultMultiWalletCryptoCurrenciesFetcher.kt$DefaultMultiWalletCryptoCurrenciesFetcher$${this::class.simpleName} - UseOrEmpty:DefaultYieldSupplyWarningsViewedRepository.kt$DefaultYieldSupplyWarningsViewedRepository$appPreferencesStore.getObjectSet<String>(PreferencesKeys.YIELD_SUPPLY_WARNINGS_STATES_KEY).firstOrNull() ?: emptySet() - - diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/AccountListCryptoCurrenciesFetcher.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/AccountListCryptoCurrenciesFetcher.kt index bf34ca207d..2eb230d05d 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/AccountListCryptoCurrenciesFetcher.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/AccountListCryptoCurrenciesFetcher.kt @@ -4,11 +4,10 @@ import arrow.core.Either import arrow.core.right import com.tangem.data.common.account.WalletAccountsFetcher import com.tangem.datasource.api.tangemTech.models.account.flattenTokens -import com.tangem.datasource.local.userwallet.UserWalletsStore +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.core.utils.catchOn import com.tangem.domain.express.ExpressServiceFetcher import com.tangem.domain.express.models.ExpressAsset -import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.models.wallet.isMultiCurrency import com.tangem.domain.tokens.MultiWalletCryptoCurrenciesFetcher import com.tangem.domain.tokens.MultiWalletCryptoCurrenciesFetcher.Params @@ -17,7 +16,7 @@ import com.tangem.utils.coroutines.CoroutineDispatcherProvider /** * Implementation of [MultiWalletCryptoCurrenciesFetcher] that fetches crypto currencies of all accounts * - * @property userWalletsStore [UserWallet]'s store + * @property userWalletsListRepository repository to get user wallets * @property walletAccountsFetcher instance of [WalletAccountsFetcher] to fetch accounts for a multi wallet * @property expressServiceFetcher fetcher of express service * @property dispatchers dispatchers @@ -25,7 +24,7 @@ import com.tangem.utils.coroutines.CoroutineDispatcherProvider [REDACTED_AUTHOR] */ internal class AccountListCryptoCurrenciesFetcher( - private val userWalletsStore: UserWalletsStore, + private val userWalletsListRepository: UserWalletsListRepository, private val walletAccountsFetcher: WalletAccountsFetcher, private val expressServiceFetcher: ExpressServiceFetcher, private val dispatchers: CoroutineDispatcherProvider, @@ -33,7 +32,7 @@ internal class AccountListCryptoCurrenciesFetcher( override suspend fun invoke(params: Params): Either { return Either.catchOn(dispatchers.default) { - val userWallet = userWalletsStore.getSyncStrict(key = params.userWalletId) + val userWallet = userWalletsListRepository.getSyncStrict(id = params.userWalletId) if (!userWallet.isMultiCurrency) error("${this::class.simpleName} supports only multi-currency wallet") diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/DefaultMultiWalletCryptoCurrenciesFetcher.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/DefaultMultiWalletCryptoCurrenciesFetcher.kt index 8fc010aa4d..8e1b04b9bb 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/DefaultMultiWalletCryptoCurrenciesFetcher.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/DefaultMultiWalletCryptoCurrenciesFetcher.kt @@ -10,7 +10,7 @@ import com.tangem.datasource.api.common.response.ApiResponseError import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.api.tangemTech.models.UserTokensResponse import com.tangem.datasource.local.token.UserTokensResponseStore -import com.tangem.datasource.local.userwallet.UserWalletsStore +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.core.utils.catchOn import com.tangem.domain.demo.models.DemoConfig import com.tangem.domain.express.ExpressServiceFetcher @@ -26,7 +26,6 @@ import timber.log.Timber /** * Default implementation of [MultiWalletCryptoCurrenciesFetcher] * - * @property userWalletsStore [UserWallet]'s store * @property tangemTechApi Tangem Tech API * @property userTokensResponseStore store of [UserTokensResponse] * @property userTokensSaver user tokens saver @@ -39,7 +38,7 @@ import timber.log.Timber @Suppress("LongParameterList") internal class DefaultMultiWalletCryptoCurrenciesFetcher( private val demoConfig: DemoConfig, - private val userWalletsStore: UserWalletsStore, + private val userWalletsListRepository: UserWalletsListRepository, private val tangemTechApi: TangemTechApi, private val customTokensMerger: CustomTokensMerger, private val userTokensResponseStore: UserTokensResponseStore, @@ -52,7 +51,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcher( private val userTokensResponseFactory = UserTokensResponseFactory() override suspend fun invoke(params: Params) = Either.catchOn(dispatchers.default) { - val userWallet = userWalletsStore.getSyncStrict(key = params.userWalletId) + val userWallet = userWalletsListRepository.getSyncStrict(id = params.userWalletId) if (!userWallet.isMultiCurrency) error("${this::class.simpleName} supports only multi-currency wallet") diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/di/MultiWalletCryptoCurrenciesFetcherModule.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/di/MultiWalletCryptoCurrenciesFetcherModule.kt index 8d06bf0af1..e3e6f70446 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/di/MultiWalletCryptoCurrenciesFetcherModule.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/di/MultiWalletCryptoCurrenciesFetcherModule.kt @@ -8,8 +8,8 @@ import com.tangem.data.tokens.DefaultMultiWalletCryptoCurrenciesFetcher import com.tangem.data.tokens.utils.CustomTokensMerger import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.local.token.UserTokensResponseStore -import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.demo.models.DemoConfig import com.tangem.domain.express.ExpressServiceFetcher import com.tangem.domain.tokens.MultiWalletCryptoCurrenciesFetcher @@ -29,7 +29,7 @@ internal class MultiWalletCryptoCurrenciesFetcherModule { fun provideMultiWalletCryptoCurrenciesFetcher( accountsFeatureToggles: AccountsFeatureToggles, tangemTechApi: TangemTechApi, - userWalletsStore: UserWalletsStore, + userWalletsListRepository: UserWalletsListRepository, userTokensResponseStore: UserTokensResponseStore, userTokensSaver: UserTokensSaver, cardCryptoCurrencyFactory: CardCryptoCurrencyFactory, @@ -39,7 +39,7 @@ internal class MultiWalletCryptoCurrenciesFetcherModule { ): MultiWalletCryptoCurrenciesFetcher { return if (accountsFeatureToggles.isFeatureEnabled) { AccountListCryptoCurrenciesFetcher( - userWalletsStore = userWalletsStore, + userWalletsListRepository = userWalletsListRepository, walletAccountsFetcher = walletAccountsFetcher, expressServiceFetcher = expressServiceFetcher, dispatchers = dispatchers, @@ -47,7 +47,7 @@ internal class MultiWalletCryptoCurrenciesFetcherModule { } else { DefaultMultiWalletCryptoCurrenciesFetcher( demoConfig = DemoConfig, - userWalletsStore = userWalletsStore, + userWalletsListRepository = userWalletsListRepository, tangemTechApi = tangemTechApi, customTokensMerger = CustomTokensMerger( tangemTechApi = tangemTechApi, diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/di/TokensDataModule.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/di/TokensDataModule.kt index 8c0efab318..f30629e0d4 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/di/TokensDataModule.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/di/TokensDataModule.kt @@ -13,8 +13,8 @@ import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.datasource.local.token.TokenReceiveWarningActionStore import com.tangem.datasource.local.token.UserTokensResponseStore -import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.express.ExpressServiceFetcher import com.tangem.domain.tokens.MultiWalletCryptoCurrenciesSupplier import com.tangem.domain.tokens.repository.CurrenciesRepository @@ -39,7 +39,7 @@ internal object TokensDataModule { fun provideCurrenciesRepository( tangemTechApi: TangemTechApi, userTokensResponseStore: UserTokensResponseStore, - userWalletsStore: UserWalletsStore, + userWalletsListRepository: UserWalletsListRepository, walletManagersFacade: WalletManagersFacade, cacheRegistry: CacheRegistry, dispatchers: CoroutineDispatcherProvider, @@ -53,7 +53,7 @@ internal object TokensDataModule { ): CurrenciesRepository { return DefaultCurrenciesRepository( tangemTechApi = tangemTechApi, - userWalletsStore = userWalletsStore, + userWalletsListRepository = userWalletsListRepository, walletManagersFacade = walletManagersFacade, cacheRegistry = cacheRegistry, userTokensResponseStore = userTokensResponseStore, diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt index ffb98afb6c..c8755050b6 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt @@ -13,10 +13,10 @@ import com.tangem.datasource.api.common.response.getOrThrow import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.api.tangemTech.models.UserTokensResponse import com.tangem.datasource.local.token.UserTokensResponseStore -import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles import com.tangem.domain.card.CardTypesResolver import com.tangem.domain.card.common.util.cardTypesResolver +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.core.error.DataError import com.tangem.domain.demo.models.DemoConfig import com.tangem.domain.express.ExpressServiceFetcher @@ -41,7 +41,7 @@ import com.tangem.blockchain.common.FeePaidCurrency as FeePaidSdkCurrency @Suppress("LargeClass", "LongParameterList", "TooManyFunctions") internal class DefaultCurrenciesRepository( private val tangemTechApi: TangemTechApi, - private val userWalletsStore: UserWalletsStore, + private val userWalletsListRepository: UserWalletsListRepository, private val walletManagersFacade: WalletManagersFacade, private val cacheRegistry: CacheRegistry, private val expressServiceFetcher: ExpressServiceFetcher, @@ -104,7 +104,7 @@ internal class DefaultCurrenciesRepository( ) fetchExpressAssetsByNetworkIds( - userWallet = userWalletsStore.getSyncStrict(key = userWalletId), + userWallet = userWalletsListRepository.getSyncStrict(id = userWalletId), userTokens = updatedResponse, ) @@ -194,7 +194,7 @@ internal class DefaultCurrenciesRepository( override fun getWalletCurrenciesUpdates(userWalletId: UserWalletId): Flow> { return channelFlow { - val userWallet = userWalletsStore.getSyncStrict(userWalletId) + val userWallet = userWalletsListRepository.getSyncStrict(userWalletId) if (userWallet.isMultiCurrency) { getMultiCurrencyWalletCurrenciesUpdates(userWalletId).collect(::send) @@ -211,7 +211,7 @@ internal class DefaultCurrenciesRepository( refresh: Boolean, ): CryptoCurrency { return withContext(dispatchers.io) { - val userWallet = userWalletsStore.getSyncStrict(userWalletId) + val userWallet = userWalletsListRepository.getSyncStrict(userWalletId) userWallet.requireColdWallet() ensureIsCorrectUserWallet(userWallet, isMultiCurrencyWalletExpected = false) @@ -234,7 +234,7 @@ internal class DefaultCurrenciesRepository( refresh: Boolean, ): List { return withContext(dispatchers.io) { - val userWallet = userWalletsStore.getSyncStrict(userWalletId) + val userWallet = userWalletsListRepository.getSyncStrict(userWalletId) val scanResponse = userWallet.requireColdWallet().scanResponse val currencies = if (scanResponse.cardTypesResolver.isSingleWalletWithToken()) { @@ -261,7 +261,7 @@ internal class DefaultCurrenciesRepository( id: CryptoCurrency.ID, ): CryptoCurrency { return withContext(dispatchers.io) { - val userWallet = userWalletsStore.getSyncStrict(userWalletId) + val userWallet = userWalletsListRepository.getSyncStrict(userWalletId) userWallet.requireColdWallet() ensureIsCorrectUserWallet(userWallet, isMultiCurrencyWalletExpected = false) @@ -277,7 +277,7 @@ internal class DefaultCurrenciesRepository( private fun getMultiCurrencyWalletCurrenciesUpdates(userWalletId: UserWalletId): Flow> { return channelFlow { - val userWallet = userWalletsStore.getSyncStrict(userWalletId) + val userWallet = userWalletsListRepository.getSyncStrict(userWalletId) ensureIsCorrectUserWallet(userWallet, isMultiCurrencyWalletExpected = true) getMultiCurrencyWalletCurrencies(userWallet) @@ -290,7 +290,7 @@ internal class DefaultCurrenciesRepository( userWalletId: UserWalletId, refresh: Boolean, ): List = withContext(dispatchers.io) { - val userWallet = userWalletsStore.getSyncStrict(userWalletId) + val userWallet = userWalletsListRepository.getSyncStrict(userWalletId) ensureIsCorrectUserWallet(userWallet, isMultiCurrencyWalletExpected = true) fetchTokensIfCacheExpired(userWallet, refresh) @@ -344,7 +344,7 @@ internal class DefaultCurrenciesRepository( derivationPath: Network.DerivationPath, ): CryptoCurrency.Coin { return withContext(dispatchers.io) { - val userWallet = userWalletsStore.getSyncStrict(userWalletId) + val userWallet = userWalletsListRepository.getSyncStrict(userWalletId) ensureIsCorrectUserWallet(userWallet = userWallet, isMultiCurrencyWalletExpected = true) fetchTokensIfCacheExpired(userWallet = userWallet, refresh = false) @@ -378,7 +378,7 @@ internal class DefaultCurrenciesRepository( override fun isTokensGrouped(userWalletId: UserWalletId): Flow { return channelFlow { - val userWallet = userWalletsStore.getSyncStrict(userWalletId) + val userWallet = userWalletsListRepository.getSyncStrict(userWalletId) if (userWallet.isMultiCurrency) { getSavedUserTokensResponse(userWalletId) @@ -394,7 +394,7 @@ internal class DefaultCurrenciesRepository( override fun isTokensSortedByBalance(userWalletId: UserWalletId): Flow { return channelFlow { - val userWallet = userWalletsStore.getSyncStrict(userWalletId) + val userWallet = userWalletsListRepository.getSyncStrict(userWalletId) if (userWallet.isMultiCurrency) { getSavedUserTokensResponse(userWalletId) @@ -481,7 +481,7 @@ internal class DefaultCurrenciesRepository( contractAddress: String, networkId: String, ): CryptoCurrency.Token { - val userWallet = userWalletsStore.getSyncStrict(userWalletId) + val userWallet = userWalletsListRepository.getSyncStrict(userWalletId) val token = withContext(dispatchers.io) { val foundToken = tangemTechApi.getCoins( contractAddress = contractAddress, @@ -513,7 +513,7 @@ internal class DefaultCurrenciesRepository( override fun getAllWalletsCryptoCurrencies( currencyRawId: CryptoCurrency.RawID, ): Flow>> { - return userWalletsStore.userWallets.flatMapLatest { userWallets -> + return userWalletsListRepository.loadAndGet().flatMapLatest { userWallets -> userWallets.filter { it.isMultiCurrency } .forEach { fetchTokensIfCacheExpired(userWallet = it, refresh = false) } @@ -589,7 +589,7 @@ internal class DefaultCurrenciesRepository( } override fun getCardTypesResolver(userWalletId: UserWalletId): CardTypesResolver? { - return (userWalletsStore.getSyncStrict(userWalletId) as? UserWallet.Cold)?.cardTypesResolver + return (userWalletsListRepository.getSyncStrict(userWalletId) as? UserWallet.Cold)?.cardTypesResolver } private fun getMultiCurrencyWalletCurrencies(userWallet: UserWallet): Flow> { @@ -711,7 +711,7 @@ internal class DefaultCurrenciesRepository( ) private fun ensureIsCorrectUserWallet(userWalletId: UserWalletId, isMultiCurrencyWalletExpected: Boolean) { - val userWallet = userWalletsStore.getSyncStrict(userWalletId) + val userWallet = userWalletsListRepository.getSyncStrict(userWalletId) ensureIsCorrectUserWallet(userWallet, isMultiCurrencyWalletExpected) } diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultYieldSupplyWarningsViewedRepository.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultYieldSupplyWarningsViewedRepository.kt index 193bbb03c6..c9662d98f7 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultYieldSupplyWarningsViewedRepository.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultYieldSupplyWarningsViewedRepository.kt @@ -14,8 +14,8 @@ internal class DefaultYieldSupplyWarningsViewedRepository( ) : YieldSupplyWarningsViewedRepository { override suspend fun getViewedWarnings(): Set = withContext(dispatchers.io) { - appPreferencesStore.getObjectSet(PreferencesKeys.YIELD_SUPPLY_WARNINGS_STATES_KEY).firstOrNull() - ?: emptySet() + appPreferencesStore.getObjectSet(PreferencesKeys.YIELD_SUPPLY_WARNINGS_STATES_KEY) + .firstOrNull().orEmpty() } override suspend fun view(symbol: String) = withContext(dispatchers.io) { diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/utils/CustomTokensMerger.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/utils/CustomTokensMerger.kt index 2467b477da..4d0cf9c1fc 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/utils/CustomTokensMerger.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/utils/CustomTokensMerger.kt @@ -104,8 +104,8 @@ internal class CustomTokensMerger( networkIds = token.networkId, ).bind() }, - onError = { - Timber.e(it, "Unable to fetch token:\n$token") + onError = { error -> + Timber.e(error, "Unable to fetch token:\n$token") null }, ) diff --git a/data/tokens/src/test/kotlin/com/tangem/data/tokens/AccountListCryptoCurrenciesFetcherTest.kt b/data/tokens/src/test/kotlin/com/tangem/data/tokens/AccountListCryptoCurrenciesFetcherTest.kt index 7535e139d9..3e544d681b 100644 --- a/data/tokens/src/test/kotlin/com/tangem/data/tokens/AccountListCryptoCurrenciesFetcherTest.kt +++ b/data/tokens/src/test/kotlin/com/tangem/data/tokens/AccountListCryptoCurrenciesFetcherTest.kt @@ -4,7 +4,7 @@ import arrow.core.left import arrow.core.right import com.tangem.data.common.account.WalletAccountsFetcher import com.tangem.datasource.api.tangemTech.models.account.GetWalletAccountsResponse -import com.tangem.datasource.local.userwallet.UserWalletsStore +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.express.ExpressServiceFetcher import com.tangem.domain.models.wallet.UserWallet import com.tangem.domain.models.wallet.UserWalletId @@ -22,13 +22,13 @@ import org.junit.jupiter.api.TestInstance @TestInstance(TestInstance.Lifecycle.PER_CLASS) internal class AccountListCryptoCurrenciesFetcherTest { - private val userWalletsStore: UserWalletsStore = mockk(relaxUnitFun = true) + private val userWalletsListRepository: UserWalletsListRepository = mockk(relaxUnitFun = true) private val walletAccountsFetcher: WalletAccountsFetcher = mockk(relaxUnitFun = true) private val expressServiceFetcher: ExpressServiceFetcher = mockk() private val dispatchers = TestingCoroutineDispatcherProvider() private val fetcher = AccountListCryptoCurrenciesFetcher( - userWalletsStore = userWalletsStore, + userWalletsListRepository = userWalletsListRepository, walletAccountsFetcher = walletAccountsFetcher, expressServiceFetcher = expressServiceFetcher, dispatchers = dispatchers, @@ -36,7 +36,7 @@ internal class AccountListCryptoCurrenciesFetcherTest { @BeforeEach fun resetMocks() { - clearMocks(userWalletsStore, walletAccountsFetcher) + clearMocks(userWalletsListRepository, walletAccountsFetcher) } @Test @@ -44,7 +44,7 @@ internal class AccountListCryptoCurrenciesFetcherTest { // Arrange val params = MultiWalletCryptoCurrenciesFetcher.Params(userWalletId = userWalletId) val mockUserWallet = mockk { every { isMultiCurrency } returns false } - every { userWalletsStore.getSyncStrict(key = params.userWalletId) } returns mockUserWallet + every { userWalletsListRepository.getSyncStrict(id = params.userWalletId) } returns mockUserWallet // Act val actual = fetcher(params) @@ -55,7 +55,7 @@ internal class AccountListCryptoCurrenciesFetcherTest { ).left() assertEither(actual, expected) - verify { userWalletsStore.getSyncStrict(key = params.userWalletId) } + verify { userWalletsListRepository.getSyncStrict(id = params.userWalletId) } coVerify(inverse = true) { walletAccountsFetcher.fetch(any()) } } @@ -66,7 +66,7 @@ internal class AccountListCryptoCurrenciesFetcherTest { val mockUserWallet = mockk { every { isMultiCurrency } returns true } val response = mockk(relaxed = true) - every { userWalletsStore.getSyncStrict(key = params.userWalletId) } returns mockUserWallet + every { userWalletsListRepository.getSyncStrict(id = params.userWalletId) } returns mockUserWallet coEvery { walletAccountsFetcher.fetch(userWalletId = params.userWalletId) } returns response coEvery { expressServiceFetcher.fetch(userWallet = mockUserWallet, assetIds = emptySet()) } returns Unit.right() @@ -77,7 +77,7 @@ internal class AccountListCryptoCurrenciesFetcherTest { assertEitherRight(actual) coVerify(ordering = Ordering.SEQUENCE) { - userWalletsStore.getSyncStrict(key = params.userWalletId) + userWalletsListRepository.getSyncStrict(id = params.userWalletId) walletAccountsFetcher.fetch(userWalletId = params.userWalletId) expressServiceFetcher.fetch(userWallet = mockUserWallet, assetIds = emptySet()) } @@ -90,7 +90,7 @@ internal class AccountListCryptoCurrenciesFetcherTest { val mockUserWallet = mockk { every { isMultiCurrency } returns true } val error = RuntimeException("fetch error") - every { userWalletsStore.getSyncStrict(key = params.userWalletId) } returns mockUserWallet + every { userWalletsListRepository.getSyncStrict(id = params.userWalletId) } returns mockUserWallet coEvery { walletAccountsFetcher.fetch(userWalletId = params.userWalletId) } throws error // Act @@ -101,7 +101,7 @@ internal class AccountListCryptoCurrenciesFetcherTest { assertEither(actual, expected) coVerify(ordering = Ordering.SEQUENCE) { - userWalletsStore.getSyncStrict(key = params.userWalletId) + userWalletsListRepository.getSyncStrict(id = params.userWalletId) walletAccountsFetcher.fetch(userWalletId = params.userWalletId) } } diff --git a/data/tokens/src/test/kotlin/com/tangem/data/tokens/DefaultMultiWalletCryptoCurrenciesFetcherTest.kt b/data/tokens/src/test/kotlin/com/tangem/data/tokens/DefaultMultiWalletCryptoCurrenciesFetcherTest.kt index 991d4f40f5..b0a5170a5a 100644 --- a/data/tokens/src/test/kotlin/com/tangem/data/tokens/DefaultMultiWalletCryptoCurrenciesFetcherTest.kt +++ b/data/tokens/src/test/kotlin/com/tangem/data/tokens/DefaultMultiWalletCryptoCurrenciesFetcherTest.kt @@ -13,7 +13,7 @@ import com.tangem.datasource.api.common.response.ApiResponseError import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.api.tangemTech.models.UserTokensResponse import com.tangem.datasource.local.token.UserTokensResponseStore -import com.tangem.datasource.local.userwallet.UserWalletsStore +import com.tangem.domain.common.wallets.UserWalletsListRepository import com.tangem.domain.demo.models.DemoConfig import com.tangem.domain.express.ExpressServiceFetcher import com.tangem.domain.express.models.ExpressAsset @@ -38,7 +38,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { private val cryptoCurrencyFactory = MockCryptoCurrencyFactory() private val userTokensResponseFactory = UserTokensResponseFactory() - private val userWalletsStore: UserWalletsStore = mockk(relaxUnitFun = true) + private val userWalletsListRepository: UserWalletsListRepository = mockk(relaxUnitFun = true) private val tangemTechApi: TangemTechApi = mockk() private val customTokensMerger: CustomTokensMerger = mockk() private val userTokensResponseStore: UserTokensResponseStore = mockk(relaxUnitFun = true) @@ -48,7 +48,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { private val fetcher = DefaultMultiWalletCryptoCurrenciesFetcher( demoConfig = DemoConfig, - userWalletsStore = userWalletsStore, + userWalletsListRepository = userWalletsListRepository, tangemTechApi = tangemTechApi, customTokensMerger = customTokensMerger, userTokensResponseStore = userTokensResponseStore, @@ -61,7 +61,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { @BeforeEach fun resetMocks() { clearMocks( - userWalletsStore, + userWalletsListRepository, tangemTechApi, userTokensResponseStore, userTokensSaver, @@ -79,7 +79,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { every { isMultiCurrency } returns false } - every { userWalletsStore.getSyncStrict(params.userWalletId) } returns mockUserWallet + every { userWalletsListRepository.getSyncStrict(params.userWalletId) } returns mockUserWallet // Act val actual = fetcher(params) @@ -90,7 +90,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { ).left() assertEither(actual, expected) - verifyOrder { userWalletsStore.getSyncStrict(key = params.userWalletId) } + verifyOrder { userWalletsListRepository.getSyncStrict(id = params.userWalletId) } coVerify(inverse = true) { userTokensResponseStore.getSyncOrNull(any()) } @@ -121,7 +121,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { ), ) - every { userWalletsStore.getSyncStrict(params.userWalletId) } returns mockUserWallet + every { userWalletsListRepository.getSyncStrict(params.userWalletId) } returns mockUserWallet coEvery { userTokensResponseStore.getSyncOrNull(userWalletId = params.userWalletId) } returns null every { cardCryptoCurrencyFactory.createDefaultCoinsForMultiCurrencyWallet(mockUserWallet) @@ -145,7 +145,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { assertEither(actual, expected) coVerifyOrder { - userWalletsStore.getSyncStrict(key = params.userWalletId) + userWalletsListRepository.getSyncStrict(id = params.userWalletId) userTokensResponseStore.getSyncOrNull(userWalletId = params.userWalletId) cardCryptoCurrencyFactory.createDefaultCoinsForMultiCurrencyWallet(mockUserWallet) customTokensMerger.mergeIfPresented(userWalletId = params.userWalletId, response = userTokensResponse) @@ -169,7 +169,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { data = defaultResponse.copy(group = UserTokensResponse.GroupType.TOKEN), ) - every { userWalletsStore.getSyncStrict(params.userWalletId) } returns mockUserWallet + every { userWalletsListRepository.getSyncStrict(params.userWalletId) } returns mockUserWallet coEvery { userTokensResponseStore.getSyncOrNull(userWalletId = params.userWalletId) } returns defaultResponse coEvery { tangemTechApi.getUserTokens(userId = params.userWalletId.stringValue) } returns apiResponse coEvery { @@ -191,7 +191,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { assertEither(actual, expected) coVerifyOrder { - userWalletsStore.getSyncStrict(key = params.userWalletId) + userWalletsListRepository.getSyncStrict(id = params.userWalletId) userTokensResponseStore.getSyncOrNull(userWalletId = params.userWalletId) tangemTechApi.getUserTokens(userId = params.userWalletId.stringValue) customTokensMerger.mergeIfPresented(userWalletId = params.userWalletId, response = apiResponse.data) @@ -219,7 +219,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { data = defaultResponse.copy(group = UserTokensResponse.GroupType.TOKEN), ) - every { userWalletsStore.getSyncStrict(params.userWalletId) } returns mockUserWallet + every { userWalletsListRepository.getSyncStrict(params.userWalletId) } returns mockUserWallet coEvery { tangemTechApi.getUserTokens(userId = params.userWalletId.stringValue) } returns apiResponse coEvery { customTokensMerger.mergeIfPresented(userWalletId = params.userWalletId, response = apiResponse.data) @@ -240,7 +240,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { assertEither(actual, expected) coVerifyOrder { - userWalletsStore.getSyncStrict(key = params.userWalletId) + userWalletsListRepository.getSyncStrict(id = params.userWalletId) tangemTechApi.getUserTokens(userId = params.userWalletId.stringValue) customTokensMerger.mergeIfPresented(userWalletId = params.userWalletId, response = apiResponse.data) userTokensSaver.store(userWalletId = params.userWalletId, response = apiResponse.data) @@ -283,7 +283,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { ), ) - every { userWalletsStore.getSyncStrict(params.userWalletId) } returns mockUserWallet + every { userWalletsListRepository.getSyncStrict(params.userWalletId) } returns mockUserWallet coEvery { tangemTechApi.getUserTokens(userId = params.userWalletId.stringValue) } returns apiResponse coEvery { userTokensResponseStore.getSyncOrNull(userWalletId = userWalletId) } returns null coEvery { @@ -308,7 +308,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { assertEither(actual, expected) coVerifyOrder { - userWalletsStore.getSyncStrict(key = params.userWalletId) + userWalletsListRepository.getSyncStrict(id = params.userWalletId) tangemTechApi.getUserTokens(userId = params.userWalletId.stringValue) userTokensResponseStore.getSyncOrNull(userWalletId = userWalletId) customTokensMerger.mergeIfPresented(userWalletId = params.userWalletId, response = userTokensResponse) @@ -337,7 +337,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { cause = ApiResponseError.TimeoutException(), ) as ApiResponse - every { userWalletsStore.getSyncStrict(params.userWalletId) } returns mockUserWallet + every { userWalletsListRepository.getSyncStrict(params.userWalletId) } returns mockUserWallet coEvery { tangemTechApi.getUserTokens(userId = params.userWalletId.stringValue) } returns apiResponse coEvery { userTokensResponseStore.getSyncOrNull(userWalletId = userWalletId) } returns defaultResponse coEvery { @@ -359,7 +359,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { assertEither(actual, expected) coVerifyOrder { - userWalletsStore.getSyncStrict(key = params.userWalletId) + userWalletsListRepository.getSyncStrict(id = params.userWalletId) tangemTechApi.getUserTokens(userId = params.userWalletId.stringValue) userTokensResponseStore.getSyncOrNull(userWalletId = userWalletId) customTokensMerger.mergeIfPresented(userWalletId = params.userWalletId, response = defaultResponse) @@ -407,7 +407,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { ), ) - every { userWalletsStore.getSyncStrict(params.userWalletId) } returns mockUserWallet + every { userWalletsListRepository.getSyncStrict(params.userWalletId) } returns mockUserWallet coEvery { tangemTechApi.getUserTokens(userId = params.userWalletId.stringValue) } returns apiResponse coEvery { userTokensResponseStore.getSyncOrNull(userWalletId = userWalletId) } returns null coEvery { @@ -432,7 +432,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { assertEither(actual, expected) coVerifyOrder { - userWalletsStore.getSyncStrict(key = params.userWalletId) + userWalletsListRepository.getSyncStrict(id = params.userWalletId) tangemTechApi.getUserTokens(userId = params.userWalletId.stringValue) userTokensResponseStore.getSyncOrNull(userWalletId = userWalletId) cardCryptoCurrencyFactory.createDefaultCoinsForMultiCurrencyWallet(mockUserWallet) @@ -463,7 +463,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { ), ) as ApiResponse - every { userWalletsStore.getSyncStrict(params.userWalletId) } returns mockUserWallet + every { userWalletsListRepository.getSyncStrict(params.userWalletId) } returns mockUserWallet coEvery { tangemTechApi.getUserTokens(userId = params.userWalletId.stringValue) } returns apiResponse coEvery { userTokensResponseStore.getSyncOrNull(userWalletId = userWalletId) } returns defaultResponse coEvery { @@ -485,7 +485,7 @@ internal class DefaultMultiWalletCryptoCurrenciesFetcherTest { assertEither(actual, expected) coVerifyOrder { - userWalletsStore.getSyncStrict(key = params.userWalletId) + userWalletsListRepository.getSyncStrict(id = params.userWalletId) tangemTechApi.getUserTokens(userId = params.userWalletId.stringValue) userTokensResponseStore.getSyncOrNull(userWalletId = userWalletId) userTokensSaver.push(userWalletId = params.userWalletId, response = defaultResponse)