Updated on 2026-08-14

This commit is contained in:
Tangem 2024-10-02 10:51:52 +03:00
parent 86cc752581
commit 3e8d721915

View file

@ -10,11 +10,6 @@ import com.tangem.data.common.currency.getNetwork
import com.tangem.data.common.utils.retryOnError import com.tangem.data.common.utils.retryOnError
import com.tangem.data.markets.analytics.MarketsDataAnalyticsEvent import com.tangem.data.markets.analytics.MarketsDataAnalyticsEvent
import com.tangem.data.markets.converters.* import com.tangem.data.markets.converters.*
import com.tangem.data.markets.converters.TokenChartConverter
import com.tangem.data.markets.converters.TokenMarketInfoConverter
import com.tangem.data.markets.converters.TokenMarketListConverter
import com.tangem.data.markets.converters.TokenQuotesShortConverter
import com.tangem.data.markets.converters.toRequestParam
import com.tangem.datasource.api.common.response.ApiResponseError import com.tangem.datasource.api.common.response.ApiResponseError
import com.tangem.datasource.api.common.response.getOrThrow import com.tangem.datasource.api.common.response.getOrThrow
import com.tangem.datasource.api.markets.TangemTechMarketsApi import com.tangem.datasource.api.markets.TangemTechMarketsApi
@ -29,6 +24,7 @@ import com.tangem.domain.wallets.models.UserWalletId
import com.tangem.pagination.* import com.tangem.pagination.*
import com.tangem.pagination.fetcher.LimitOffsetBatchFetcher import com.tangem.pagination.fetcher.LimitOffsetBatchFetcher
import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.withContext
import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicInteger
import java.util.concurrent.atomic.AtomicLong import java.util.concurrent.atomic.AtomicLong
@ -125,7 +121,7 @@ internal class DefaultMarketsTokenRepository(
interval: PriceChangeInterval, interval: PriceChangeInterval,
tokenId: String, tokenId: String,
tokenSymbol: String, tokenSymbol: String,
): TokenChart { ) = withContext(dispatcherProvider.io) {
val mappedTokenId = getTokenIdIfL2Network(tokenId) val mappedTokenId = getTokenIdIfL2Network(tokenId)
val response = marketsApi.getCoinChart( val response = marketsApi.getCoinChart(
currency = fiatCurrencyCode, currency = fiatCurrencyCode,
@ -142,7 +138,7 @@ internal class DefaultMarketsTokenRepository(
response.getOrThrow() response.getOrThrow()
} }
return TokenChartConverter.convert( return@withContext TokenChartConverter.convert(
interval = interval, interval = interval,
value = result, value = result,
@ -162,7 +158,7 @@ internal class DefaultMarketsTokenRepository(
interval: PriceChangeInterval, interval: PriceChangeInterval,
tokenId: String, tokenId: String,
tokenSymbol: String, tokenSymbol: String,
): TokenChart { ) = withContext(dispatcherProvider.io) {
val mappedTokenId = getTokenIdIfL2Network(tokenId) val mappedTokenId = getTokenIdIfL2Network(tokenId)
val response = marketsApi.getCoinsListCharts( val response = marketsApi.getCoinsListCharts(
coinIds = mappedTokenId, coinIds = mappedTokenId,
@ -176,7 +172,7 @@ internal class DefaultMarketsTokenRepository(
) )
} }
return TokenChartConverter.convert( return@withContext TokenChartConverter.convert(
interval = interval, interval = interval,
value = chart, value = chart,
@ -196,7 +192,7 @@ internal class DefaultMarketsTokenRepository(
tokenId: String, tokenId: String,
tokenSymbol: String, tokenSymbol: String,
languageCode: String, languageCode: String,
): TokenMarketInfo { ) = withContext(dispatcherProvider.io) {
val response = marketsApi.getCoinMarketData( val response = marketsApi.getCoinMarketData(
currency = fiatCurrencyCode, currency = fiatCurrencyCode,
coinId = tokenId, coinId = tokenId,
@ -213,29 +209,30 @@ internal class DefaultMarketsTokenRepository(
} }
val resultResponse = result.applyL2Compatibility(tokenId) val resultResponse = result.applyL2Compatibility(tokenId)
return TokenMarketInfoConverter.convert(resultResponse) return@withContext TokenMarketInfoConverter.convert(resultResponse)
} }
override suspend fun getTokenQuotes(fiatCurrencyCode: String, tokenId: String, tokenSymbol: String): TokenQuotes { override suspend fun getTokenQuotes(fiatCurrencyCode: String, tokenId: String, tokenSymbol: String) =
// for second markets iteration we should use extended api method with all required fields withContext(dispatcherProvider.io) {
val response = tangemTechApi.getQuotes( // for second markets iteration we should use extended api method with all required fields
currencyId = fiatCurrencyCode, val response = tangemTechApi.getQuotes(
coinIds = tokenId, currencyId = fiatCurrencyCode,
fields = marketsQuoteFields.joinToString(separator = ","), coinIds = tokenId,
) fields = marketsQuoteFields.joinToString(separator = ","),
)
val result = catchApiErrorAndSendEvent( val result = catchApiErrorAndSendEvent(
errorEvent = MarketsDataAnalyticsEvent.Details.Error( errorEvent = MarketsDataAnalyticsEvent.Details.Error(
request = MarketsDataAnalyticsEvent.Details.Error.Request.Info, request = MarketsDataAnalyticsEvent.Details.Error.Request.Info,
tokenSymbol = tokenSymbol, tokenSymbol = tokenSymbol,
), ),
) { ) {
response.getOrThrow() response.getOrThrow()
}
return@withContext TokenQuotesShortConverter.convert(tokenId, result).toFull()
} }
return TokenQuotesShortConverter.convert(tokenId, result).toFull()
}
override suspend fun createCryptoCurrency( override suspend fun createCryptoCurrency(
userWalletId: UserWalletId, userWalletId: UserWalletId,
token: TokenMarketParams, token: TokenMarketParams,