Updated on 2026-08-14
This commit is contained in:
parent
a8f084ae88
commit
4d5b9b87e6
12 changed files with 105 additions and 17 deletions
40
data/common/src/main/kotlin/com/tangem/data/common/cache/etag/DefaultETagsStore.kt
vendored
Normal file
40
data/common/src/main/kotlin/com/tangem/data/common/cache/etag/DefaultETagsStore.kt
vendored
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
package com.tangem.data.common.cache.etag
|
||||
|
||||
import androidx.datastore.preferences.core.Preferences
|
||||
import androidx.datastore.preferences.core.stringPreferencesKey
|
||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.datasource.local.preferences.utils.getSyncOrNull
|
||||
import com.tangem.datasource.local.preferences.utils.store
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
import timber.log.Timber
|
||||
|
||||
/**
|
||||
* Default implementation of the [ETagsStore] interface for managing ETag values
|
||||
*
|
||||
* @property appPreferencesStore the preferences store used for saving and retrieving ETag values
|
||||
*/
|
||||
internal class DefaultETagsStore(
|
||||
private val appPreferencesStore: AppPreferencesStore,
|
||||
) : ETagsStore {
|
||||
|
||||
override suspend fun getSyncOrNull(userWalletId: UserWalletId, key: ETagsStore.Key): String? {
|
||||
val key = getAccountsETagKey(userWalletId = userWalletId, key = key)
|
||||
|
||||
return appPreferencesStore.getSyncOrNull(key = key)
|
||||
}
|
||||
|
||||
override suspend fun store(userWalletId: UserWalletId, key: ETagsStore.Key, value: String) {
|
||||
if (value.isBlank()) {
|
||||
Timber.e("ETag value is blank, not storing it. userWalletId: $userWalletId, key: $key")
|
||||
return
|
||||
}
|
||||
|
||||
val key = getAccountsETagKey(userWalletId = userWalletId, key = key)
|
||||
|
||||
appPreferencesStore.store(key = key, value = value)
|
||||
}
|
||||
|
||||
private fun getAccountsETagKey(userWalletId: UserWalletId, key: ETagsStore.Key): Preferences.Key<String> {
|
||||
return stringPreferencesKey(name = "etag_${key}_${userWalletId.stringValue}")
|
||||
}
|
||||
}
|
||||
34
data/common/src/main/kotlin/com/tangem/data/common/cache/etag/ETagsStore.kt
vendored
Normal file
34
data/common/src/main/kotlin/com/tangem/data/common/cache/etag/ETagsStore.kt
vendored
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
package com.tangem.data.common.cache.etag
|
||||
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
|
||||
/**
|
||||
* Interface for working with ETag (Entity Tag), which is used for data caching and validation.
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
interface ETagsStore {
|
||||
|
||||
/**
|
||||
* Retrieves the stored ETag value for the specified wallet and key
|
||||
*
|
||||
* @param userWalletId identifier of the user wallet
|
||||
* @param key the key for which to get the ETag value
|
||||
*/
|
||||
suspend fun getSyncOrNull(userWalletId: UserWalletId, key: Key): String?
|
||||
|
||||
/**
|
||||
* Stores the ETag value for the specified wallet and key
|
||||
*
|
||||
* @param userWalletId identifier of the user wallet
|
||||
* @param key the key for which to get the ETag value
|
||||
*/
|
||||
suspend fun store(userWalletId: UserWalletId, key: Key, value: String)
|
||||
|
||||
/** Enumeration of possible keys for storing ETag values */
|
||||
enum class Key {
|
||||
WalletAccounts,
|
||||
UserTokens,
|
||||
;
|
||||
}
|
||||
}
|
||||
|
|
@ -50,9 +50,9 @@ object UserTokensResponseAccountIdEnricher {
|
|||
|
||||
if (enrichedTokens.isEmpty()) return tokens
|
||||
|
||||
val enrichedTokenMap = enrichedTokens.associateBy { it }
|
||||
return tokens.map { token ->
|
||||
val enrichedToken = enrichedTokens.firstOrNull { it == token }
|
||||
enrichedToken ?: token
|
||||
enrichedTokenMap[token] ?: token
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
package com.tangem.data.common.di
|
||||
|
||||
import com.tangem.blockchainsdk.utils.ExcludedBlockchains
|
||||
import com.tangem.data.common.cache.etag.DefaultETagsStore
|
||||
import com.tangem.data.common.cache.etag.ETagsStore
|
||||
import com.tangem.data.common.currency.*
|
||||
import com.tangem.data.common.quote.DefaultQuotesFetcher
|
||||
import com.tangem.data.common.quote.QuotesFetcher
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
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
|
||||
|
|
@ -76,4 +79,10 @@ internal object DataCommonModule {
|
|||
fun provideQuotesFetcher(tangemTechApi: TangemTechApi, dispatchers: CoroutineDispatcherProvider): QuotesFetcher {
|
||||
return DefaultQuotesFetcher(tangemTechApi = tangemTechApi, dispatchers = dispatchers)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideETagsStore(appPreferencesStore: AppPreferencesStore): ETagsStore {
|
||||
return DefaultETagsStore(appPreferencesStore = appPreferencesStore)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue