Updated on 2026-08-14

This commit is contained in:
Tangem 2025-10-29 15:59:29 +04:00
parent 4215c91a37
commit df186a5f5d
9 changed files with 74 additions and 9 deletions

View file

@ -1,5 +1,6 @@
package com.tangem.data.account.di
import android.content.Context
import com.tangem.core.configtoggle.feature.FeatureTogglesManager
import com.tangem.data.account.converter.AccountConverterFactoryContainer
import com.tangem.data.account.featuretoggle.DefaultAccountsFeatureToggles
@ -21,6 +22,7 @@ import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@ -43,6 +45,7 @@ internal object AccountDataModule {
userWalletsStore: UserWalletsStore,
userTokensSaver: UserTokensSaver,
accountConverterFactoryContainer: AccountConverterFactoryContainer,
@ApplicationContext context: Context,
dispatchers: CoroutineDispatcherProvider,
): AccountsCRUDRepository {
return DefaultAccountsCRUDRepository(
@ -54,6 +57,7 @@ internal object AccountDataModule {
userTokensSaver = userTokensSaver,
archivedAccountsETagStore = RuntimeStateStore(emptyMap()),
convertersContainer = accountConverterFactoryContainer,
resources = context.resources,
dispatchers = dispatchers,
)
}

View file

@ -1,8 +1,11 @@
package com.tangem.data.account.repository
import android.content.res.Resources
import arrow.core.Option
import arrow.core.raise.option
import arrow.core.toOption
import com.tangem.common.ui.account.AccountNameUM
import com.tangem.core.res.getStringSafe
import com.tangem.data.account.converter.AccountConverterFactoryContainer
import com.tangem.data.account.converter.ArchivedAccountConverter
import com.tangem.data.account.store.AccountsResponseStore
@ -26,6 +29,7 @@ import com.tangem.domain.account.models.ArchivedAccount
import com.tangem.domain.account.repository.AccountsCRUDRepository
import com.tangem.domain.models.account.Account
import com.tangem.domain.models.account.AccountId
import com.tangem.domain.models.account.AccountName
import com.tangem.domain.models.wallet.UserWallet
import com.tangem.domain.models.wallet.UserWalletId
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
@ -48,6 +52,7 @@ internal class DefaultAccountsCRUDRepository(
private val userTokensSaver: UserTokensSaver,
private val archivedAccountsETagStore: RuntimeStateStore<Map<String, String?>>,
private val convertersContainer: AccountConverterFactoryContainer,
private val resources: Resources,
private val dispatchers: CoroutineDispatcherProvider,
) : AccountsCRUDRepository {
@ -197,6 +202,19 @@ internal class DefaultAccountsCRUDRepository(
override fun getUserWalletsSync(): List<UserWallet> = userWalletsStore.userWalletsSync
override fun checkDefaultAccountName(accountList: AccountList, accountName: AccountName) {
val hasDefaultName = accountList.accounts.any { it.accountName is AccountName.DefaultMain }
if (!hasDefaultName) return
val defaultName = resources.getStringSafe(AccountNameUM.DefaultMain.stringResId)
.let(AccountName::invoke).getOrNull()
require(defaultName != accountName) {
"Cannot use default account name \"$accountName\" for custom accounts"
}
}
private suspend fun saveETag(userWalletId: UserWalletId, apiResponse: ApiResponse<*>) {
val eTag = apiResponse.headers[ETAG_HEADER]?.firstOrNull()

View file

@ -1,5 +1,6 @@
package com.tangem.data.account.repository
import android.content.res.Resources
import arrow.core.None
import arrow.core.toOption
import com.google.common.truth.Truth
@ -59,6 +60,8 @@ class DefaultAccountsCRUDRepositoryTest {
private val accountListConverter: AccountListConverter = mockk()
private val cryptoPortfolioConverter: CryptoPortfolioConverter = mockk()
private val resources: Resources = mockk()
private val repository = DefaultAccountsCRUDRepository(
tangemTechApi = tangemTechApi,
walletAccountsSaver = walletAccountsSaver,
@ -68,6 +71,7 @@ class DefaultAccountsCRUDRepositoryTest {
userTokensSaver = userTokensSaver,
archivedAccountsETagStore = archivedAccountsETagStore,
convertersContainer = convertersContainer,
resources = resources,
dispatchers = TestingCoroutineDispatcherProvider(),
)