From 902d80d1f1da55d865100f0fa6cc33edec824a1a Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 1 Nov 2024 19:07:02 +0400 Subject: [PATCH] Updated on 2026-08-14 --- data/markets/build.gradle.kts | 1 + .../data/markets/DefaultMarketsTokenRepository.kt | 14 ++++++++++++-- .../tangem/data/markets/di/MarketsDataModule.kt | 5 +++++ .../details/impl/model/MarketsTokenDetailsModel.kt | 6 +++--- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/data/markets/build.gradle.kts b/data/markets/build.gradle.kts index 5378b4b964..ba16c78bf0 100644 --- a/data/markets/build.gradle.kts +++ b/data/markets/build.gradle.kts @@ -33,6 +33,7 @@ dependencies { // region Others dependencies implementation(deps.kotlin.coroutines) + implementation(deps.jodatime) implementation(deps.moshi) implementation(deps.moshi.kotlin) implementation(deps.timber) 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 2a8c0ed1d7..25703406d5 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 @@ -5,6 +5,7 @@ import com.tangem.blockchainsdk.compatibility.applyL2Compatibility import com.tangem.blockchainsdk.compatibility.getTokenIdIfL2Network import com.tangem.blockchainsdk.utils.fromNetworkId import com.tangem.core.analytics.api.AnalyticsEventHandler +import com.tangem.data.common.cache.CacheRegistry import com.tangem.data.common.currency.CryptoCurrencyFactory import com.tangem.data.common.currency.getNetwork import com.tangem.data.common.utils.retryOnError @@ -13,8 +14,10 @@ import com.tangem.data.markets.converters.* import com.tangem.datasource.api.common.response.ApiResponseError 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.api.tangemTech.TangemTechApi import com.tangem.datasource.api.tangemTech.TangemTechApi.Companion.marketsQuoteFields +import com.tangem.datasource.local.datastore.RuntimeStateStore import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.markets.* import com.tangem.domain.markets.repositories.MarketsTokenRepository @@ -27,12 +30,15 @@ import kotlinx.coroutines.withContext import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicLong +@Suppress("LongParameterList") internal class DefaultMarketsTokenRepository( private val marketsApi: TangemTechMarketsApi, private val tangemTechApi: TangemTechApi, private val userWalletsStore: UserWalletsStore, private val dispatcherProvider: CoroutineDispatcherProvider, private val analyticsEventHandler: AnalyticsEventHandler, + private val cacheRegistry: CacheRegistry, + private val tokenExchangesStore: RuntimeStateStore>, ) : MarketsTokenRepository { private fun createTokenMarketsFetcher(firstBatchSize: Int, nextBatchSize: Int) = LimitOffsetBatchFetcher( @@ -266,9 +272,13 @@ internal class DefaultMarketsTokenRepository( override suspend fun getTokenExchanges(tokenId: String): List { return withContext(dispatcherProvider.io) { - val response = marketsApi.getCoinExchanges(coinId = tokenId).getOrThrow() + cacheRegistry.invokeOnExpire(key = "coins/$tokenId/exchanges", skipCache = false) { + val response = marketsApi.getCoinExchanges(coinId = tokenId).getOrThrow() - TokenMarketExchangeConverter.convertList(input = response.exchanges) + tokenExchangesStore.store(value = response.exchanges) + } + + TokenMarketExchangeConverter.convertList(input = tokenExchangesStore.get().value) } } 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 fa4e3d492f..056e3c82f7 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 @@ -1,9 +1,11 @@ package com.tangem.data.markets.di import com.tangem.core.analytics.api.AnalyticsEventHandler +import com.tangem.data.common.cache.CacheRegistry import com.tangem.data.markets.DefaultMarketsTokenRepository import com.tangem.datasource.api.markets.TangemTechMarketsApi import com.tangem.datasource.api.tangemTech.TangemTechApi +import com.tangem.datasource.local.datastore.RuntimeStateStore import com.tangem.datasource.local.userwallet.UserWalletsStore import com.tangem.domain.markets.repositories.MarketsTokenRepository import com.tangem.utils.coroutines.CoroutineDispatcherProvider @@ -25,6 +27,7 @@ internal object MarketsDataModule { userWalletsStore: UserWalletsStore, dispatchers: CoroutineDispatcherProvider, analyticsEventHandler: AnalyticsEventHandler, + cacheRegistry: CacheRegistry, ): MarketsTokenRepository { return DefaultMarketsTokenRepository( marketsApi = marketsApi, @@ -32,6 +35,8 @@ internal object MarketsDataModule { dispatcherProvider = dispatchers, userWalletsStore = userWalletsStore, analyticsEventHandler = analyticsEventHandler, + cacheRegistry = cacheRegistry, + tokenExchangesStore = RuntimeStateStore(defaultValue = emptyList()), ) } } \ No newline at end of file diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/MarketsTokenDetailsModel.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/MarketsTokenDetailsModel.kt index 11ae6093f5..9d7e300646 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/MarketsTokenDetailsModel.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/details/impl/model/MarketsTokenDetailsModel.kt @@ -531,11 +531,11 @@ internal class MarketsTokenDetailsModel @Inject constructor( showBottomSheet(content = ExchangesBottomSheetContent.Loading(exchangesCount)) - // Delay to show the bottom sheet - delay(timeMillis = 800L) - val maybeExchanges = getTokenExchangesUseCase(tokenId = params.token.id) + // Delay to show the bottom sheet + delay(timeMillis = 400L) + updateExchangeBSContent(maybeExchanges = maybeExchanges, exchangesCount = exchangesCount) } }