Updated on 2026-08-14

This commit is contained in:
Tangem 2025-09-29 22:23:18 +04:00
parent a1bce4b52c
commit 08521b6c11
12 changed files with 230 additions and 90 deletions

View file

@ -7,13 +7,16 @@ import com.tangem.data.account.fetcher.DefaultWalletAccountsFetcher
import com.tangem.data.account.repository.DefaultAccountsCRUDRepository
import com.tangem.data.account.store.AccountsResponseStoreFactory
import com.tangem.data.account.store.ArchivedAccountsStoreFactory
import com.tangem.data.account.tokens.DefaultMainAccountTokensMigration
import com.tangem.data.common.account.WalletAccountsFetcher
import com.tangem.data.common.account.WalletAccountsSaver
import com.tangem.data.common.cache.etag.ETagsStore
import com.tangem.data.common.currency.UserTokensSaver
import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.datasource.local.userwallet.UserWalletsStore
import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles
import com.tangem.domain.account.repository.AccountsCRUDRepository
import com.tangem.domain.account.tokens.MainAccountTokensMigration
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import dagger.Module
import dagger.Provides
@ -61,4 +64,16 @@ internal object AccountDataModule {
@Provides
@Singleton
fun provideWalletAccountsSaver(impl: DefaultWalletAccountsFetcher): WalletAccountsSaver = impl
@Provides
@Singleton
fun provideMainAccountTokensMigration(
accountsResponseStoreFactory: AccountsResponseStoreFactory,
userTokensSaver: UserTokensSaver,
): MainAccountTokensMigration {
return DefaultMainAccountTokensMigration(
accountsResponseStoreFactory = accountsResponseStoreFactory,
userTokensSaver = userTokensSaver,
)
}
}

View file

@ -11,6 +11,7 @@ import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.launch
import timber.log.Timber
import java.util.concurrent.ConcurrentHashMap
import javax.inject.Inject
/**
* Implementation of [MultiAccountListFetcher]
@ -20,7 +21,7 @@ import java.util.concurrent.ConcurrentHashMap
*
[REDACTED_AUTHOR]
*/
internal class DefaultMultiAccountListFetcher(
internal class DefaultMultiAccountListFetcher @Inject constructor(
private val singleAccountListFetcher: SingleAccountListFetcher,
private val userWalletsStore: UserWalletsStore,
) : MultiAccountListFetcher {

View file

@ -3,6 +3,7 @@ package com.tangem.data.account.fetcher
import arrow.core.Either
import com.tangem.data.common.account.WalletAccountsFetcher
import com.tangem.domain.account.fetcher.SingleAccountListFetcher
import javax.inject.Inject
/**
* Implementation of [SingleAccountListFetcher]
@ -11,7 +12,7 @@ import com.tangem.domain.account.fetcher.SingleAccountListFetcher
*
[REDACTED_AUTHOR]
*/
internal class DefaultSingleAccountListFetcher(
internal class DefaultSingleAccountListFetcher @Inject constructor(
private val walletAccountsFetcher: WalletAccountsFetcher,
) : SingleAccountListFetcher {

View file

@ -10,7 +10,6 @@ import com.tangem.blockchainsdk.utils.fromNetworkId
import com.tangem.data.account.store.AccountsResponseStoreFactory
import com.tangem.data.account.utils.assignTokens
import com.tangem.data.account.utils.toUserTokensResponse
import com.tangem.data.common.account.WalletAccountsSaver
import com.tangem.data.common.currency.UserTokensSaver
import com.tangem.datasource.api.tangemTech.models.UserTokensResponse
import com.tangem.datasource.api.tangemTech.models.account.GetWalletAccountsResponse
@ -28,14 +27,12 @@ import timber.log.Timber
*
* @property accountsResponseStoreFactory Factory for creating stores to access cached account responses.
* @property userTokensSaver Saver for updating user tokens in persistent storage.
* @property walletAccountsSaver Saver for updating wallet accounts in persistent storage.
*
[REDACTED_AUTHOR]
*/
internal class DefaultMainAccountTokensMigration(
private val accountsResponseStoreFactory: AccountsResponseStoreFactory,
private val userTokensSaver: UserTokensSaver,
private val walletAccountsSaver: WalletAccountsSaver,
) : MainAccountTokensMigration {
override suspend fun migrate(
@ -81,8 +78,6 @@ internal class DefaultMainAccountTokensMigration(
},
)
walletAccountsSaver.store(userWalletId = userWalletId, response = updatedResponse)
userTokensSaver.push(
userWalletId = userWalletId,
response = updatedResponse.toUserTokensResponse(),

View file

@ -8,7 +8,6 @@ import com.tangem.data.account.store.AccountsResponseStore
import com.tangem.data.account.store.AccountsResponseStoreFactory
import com.tangem.data.account.tokens.DefaultMainAccountTokensMigration
import com.tangem.data.account.utils.toUserTokensResponse
import com.tangem.data.common.account.WalletAccountsSaver
import com.tangem.data.common.currency.UserTokensSaver
import com.tangem.datasource.api.tangemTech.models.UserTokensResponse
import com.tangem.datasource.api.tangemTech.models.account.GetWalletAccountsResponse
@ -32,11 +31,9 @@ class DefaultMainAccountTokensMigrationTest {
private val accountsResponseStoreFlow = MutableStateFlow<GetWalletAccountsResponse?>(value = null)
private val userTokensSaver = mockk<UserTokensSaver>(relaxed = true)
private val walletAccountsSaver = mockk<WalletAccountsSaver>(relaxed = true)
private val migration = DefaultMainAccountTokensMigration(
accountsResponseStoreFactory = accountsResponseStoreFactory,
userTokensSaver = userTokensSaver,
walletAccountsSaver = walletAccountsSaver,
)
private val userWalletId = UserWalletId("011")
@ -50,7 +47,7 @@ class DefaultMainAccountTokensMigrationTest {
@AfterEach
fun tearDown() {
clearMocks(accountsResponseStoreFactory, accountsResponseStore, userTokensSaver, walletAccountsSaver)
clearMocks(accountsResponseStoreFactory, accountsResponseStore, userTokensSaver)
accountsResponseStoreFlow.value = null
}
@ -65,7 +62,6 @@ class DefaultMainAccountTokensMigrationTest {
coVerify(inverse = true) {
accountsResponseStoreFactory.create(any())
accountsResponseStore.data
walletAccountsSaver.store(userWalletId = any(), response = any())
userTokensSaver.push(userWalletId = any(), response = any(), onFailSend = any())
}
}
@ -85,7 +81,6 @@ class DefaultMainAccountTokensMigrationTest {
}
coVerify(inverse = true) {
walletAccountsSaver.store(userWalletId = any(), response = any())
userTokensSaver.push(userWalletId = any(), response = any(), onFailSend = any())
}
}
@ -115,7 +110,6 @@ class DefaultMainAccountTokensMigrationTest {
}
coVerify(inverse = true) {
walletAccountsSaver.store(userWalletId = any(), response = any())
userTokensSaver.push(userWalletId = any(), response = any(), onFailSend = any())
}
}
@ -151,7 +145,6 @@ class DefaultMainAccountTokensMigrationTest {
}
coVerify(inverse = true) {
walletAccountsSaver.store(userWalletId = any(), response = any())
userTokensSaver.push(userWalletId = any(), response = any(), onFailSend = any())
}
}
@ -206,7 +199,6 @@ class DefaultMainAccountTokensMigrationTest {
coVerifySequence {
accountsResponseStoreFactory.create(userWalletId)
accountsResponseStore.data
walletAccountsSaver.store(userWalletId = userWalletId, response = migratedResponse)
userTokensSaver.push(
userWalletId = userWalletId,
response = migratedResponse.toUserTokensResponse(),