From 96b4a464624802d7f1b9f24ffd8fb96d6b2b8971 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 15 May 2025 11:39:28 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../api/common/response/ApiResponseExt.kt | 9 +++++++++ .../datasource/api/tangemTech/TangemTechApi.kt | 4 ++-- .../markets/DefaultMarketsTokenRepository.kt | 2 +- .../data/markets/MarketsBatchUpdateFetcher.kt | 16 ++++------------ .../referral/data/ReferralRepositoryImpl.kt | 5 +++-- .../feature/referral/analytics/ReferralEvents.kt | 11 ++++++----- .../feature/referral/model/ReferralModel.kt | 5 ++++- .../referral/models/ReferralStateHolder.kt | 2 +- 8 files changed, 30 insertions(+), 24 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/common/response/ApiResponseExt.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/response/ApiResponseExt.kt index 9fc9554c4d..0caae8ba1a 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/common/response/ApiResponseExt.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/response/ApiResponseExt.kt @@ -10,4 +10,13 @@ fun ApiResponse.fold(onSuccess: (T) -> R, onError: (ApiRes is ApiResponse.Error -> onError(cause) is ApiResponse.Success -> onSuccess(data) } +} + +inline fun catchApiResponseError(onError: (ApiResponseError) -> Unit, block: () -> T): T { + return try { + block() + } catch (e: ApiResponseError) { + onError(e) + throw e + } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt index 7b474dd442..48a8dfff98 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt @@ -55,11 +55,11 @@ interface TangemTechApi { /** Returns referral status by [walletId] */ @GET("referral/{walletId}") - suspend fun getReferralStatus(@Path("walletId") walletId: String): ReferralResponse + suspend fun getReferralStatus(@Path("walletId") walletId: String): ApiResponse /** Make user referral, requires [StartReferralBody] */ @POST("referral") - suspend fun startReferral(@Body startReferralBody: StartReferralBody): ReferralResponse + suspend fun startReferral(@Body startReferralBody: StartReferralBody): ApiResponse @GET("quotes") suspend fun getQuotes( 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 3eb641be45..c06cb808da 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 @@ -113,7 +113,7 @@ internal class DefaultMarketsTokenRepository( tangemTechApi = tangemTechApi, marketsApi = marketsApi, analyticsEventHandler = analyticsEventHandler, - onApiError = { + onApiResponseError = { analyticsEventHandler.send(createListErrorEvent(it).toEvent()) }, ) diff --git a/data/markets/src/main/java/com/tangem/data/markets/MarketsBatchUpdateFetcher.kt b/data/markets/src/main/java/com/tangem/data/markets/MarketsBatchUpdateFetcher.kt index 6a9952d71f..3b5e662379 100644 --- a/data/markets/src/main/java/com/tangem/data/markets/MarketsBatchUpdateFetcher.kt +++ b/data/markets/src/main/java/com/tangem/data/markets/MarketsBatchUpdateFetcher.kt @@ -7,6 +7,7 @@ import com.tangem.data.markets.converters.TokenMarketChartsConverter 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.catchApiResponseError import com.tangem.datasource.api.common.response.getOrThrow import com.tangem.datasource.api.markets.TangemTechMarketsApi import com.tangem.datasource.api.markets.models.response.TokenMarketChartListResponse @@ -25,7 +26,7 @@ internal class MarketsBatchUpdateFetcher( private val marketsApi: TangemTechMarketsApi, private val tangemTechApi: TangemTechApi, private val analyticsEventHandler: AnalyticsEventHandler, - private val onApiError: (ApiResponseError) -> Unit, + private val onApiResponseError: (ApiResponseError) -> Unit, ) : BatchUpdateFetcher, TokenMarketUpdateRequest> { override suspend fun BatchUpdateFetcher.UpdateContext>.fetchUpdateAsync( @@ -41,7 +42,7 @@ internal class MarketsBatchUpdateFetcher( val updateTasks = idsToUpdate.map { batchIds -> async { retryOnError { - catchApiError(onApiError) { + catchApiResponseError(onApiResponseError) { marketsApi.getCoinsListCharts( coinIds = batchIds.second.joinToString(separator = ","), interval = updateRequest.interval.toRequestParam(), @@ -71,7 +72,7 @@ internal class MarketsBatchUpdateFetcher( } is TokenMarketUpdateRequest.UpdateQuotes -> { val quotesRes = retryOnError { - catchApiError(onApiError) { + catchApiResponseError(onApiResponseError) { tangemTechApi.getQuotes( currencyId = updateRequest.currencyId, coinIds = idsToUpdate.map { it.second }.flatten().joinToString(separator = ","), @@ -133,13 +134,4 @@ internal class MarketsBatchUpdateFetcher( } } } - - private inline fun catchApiError(onError: (ApiResponseError) -> Unit, block: () -> T): T { - return try { - block() - } catch (e: ApiResponseError) { - onError(e) - throw e - } - } } \ No newline at end of file diff --git a/features/referral/data/src/main/java/com/tangem/feature/referral/data/ReferralRepositoryImpl.kt b/features/referral/data/src/main/java/com/tangem/feature/referral/data/ReferralRepositoryImpl.kt index 279d0632bf..39650996ba 100644 --- a/features/referral/data/src/main/java/com/tangem/feature/referral/data/ReferralRepositoryImpl.kt +++ b/features/referral/data/src/main/java/com/tangem/feature/referral/data/ReferralRepositoryImpl.kt @@ -5,6 +5,7 @@ import com.tangem.blockchain.common.Token import com.tangem.blockchainsdk.utils.ExcludedBlockchains import com.tangem.blockchainsdk.utils.fromNetworkId import com.tangem.data.common.currency.CryptoCurrencyFactory +import com.tangem.datasource.api.common.response.getOrThrow import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.api.tangemTech.models.StartReferralBody import com.tangem.datasource.local.userwallet.UserWalletsStore @@ -38,7 +39,7 @@ internal class ReferralRepositoryImpl @Inject constructor( val referralData = referralConverter.convert( referralApi.getReferralStatus( walletId = walletId, - ), + ).getOrThrow(), ) referralStatus[walletId] = referralData @@ -66,7 +67,7 @@ internal class ReferralRepositoryImpl @Inject constructor( tokenId = tokenId, address = address, ), - ), + ).getOrThrow(), ) referralStatus[walletId] = referralData referralData diff --git a/features/referral/impl/src/main/java/com/tangem/feature/referral/analytics/ReferralEvents.kt b/features/referral/impl/src/main/java/com/tangem/feature/referral/analytics/ReferralEvents.kt index a5d37a1b19..20a2fe5ecd 100644 --- a/features/referral/impl/src/main/java/com/tangem/feature/referral/analytics/ReferralEvents.kt +++ b/features/referral/impl/src/main/java/com/tangem/feature/referral/analytics/ReferralEvents.kt @@ -4,11 +4,12 @@ import com.tangem.core.analytics.models.AnalyticsEvent sealed class ReferralEvents(event: String) : AnalyticsEvent(REFERRAL_PROGRAM_CATEGORY, event) { - object ReferralScreenOpened : ReferralEvents(event = "Referral Screen Opened") - object ClickParticipate : ReferralEvents(event = "Button - Participate") - object ClickCopy : ReferralEvents(event = "Button - Copy") - object ClickShare : ReferralEvents(event = "Button - Share") - object ClickTaC : ReferralEvents(event = "Link - TaC") + data object ReferralScreenOpened : ReferralEvents(event = "Referral Screen Opened") + data object ClickParticipate : ReferralEvents(event = "Button - Participate") + data object ClickCopy : ReferralEvents(event = "Button - Copy") + data object ClickShare : ReferralEvents(event = "Button - Share") + data object ClickTaC : ReferralEvents(event = "Link - TaC") + data object ParticipateSuccessful : ReferralEvents(event = "Participate Successful") } private const val REFERRAL_PROGRAM_CATEGORY = "Referral Program" \ No newline at end of file diff --git a/features/referral/impl/src/main/java/com/tangem/feature/referral/model/ReferralModel.kt b/features/referral/impl/src/main/java/com/tangem/feature/referral/model/ReferralModel.kt index a2379d3f8a..943c75b40d 100644 --- a/features/referral/impl/src/main/java/com/tangem/feature/referral/model/ReferralModel.kt +++ b/features/referral/impl/src/main/java/com/tangem/feature/referral/model/ReferralModel.kt @@ -91,7 +91,10 @@ internal class ReferralModel @Inject constructor( uiState = uiState.copy(referralInfoState = ReferralInfoState.Loading) modelScope.launch { runCatching { referralInteractor.startReferral(params.userWalletId) } - .onSuccess(::showContent) + .onSuccess { + analyticsEventHandler.send(ReferralEvents.ParticipateSuccessful) + showContent(it) + } .onFailure { throwable -> if (throwable is ReferralError.UserCancelledException) { lastReferralData?.let { referralData -> diff --git a/features/referral/impl/src/main/java/com/tangem/feature/referral/models/ReferralStateHolder.kt b/features/referral/impl/src/main/java/com/tangem/feature/referral/models/ReferralStateHolder.kt index 2029309da1..77bf7443e4 100644 --- a/features/referral/impl/src/main/java/com/tangem/feature/referral/models/ReferralStateHolder.kt +++ b/features/referral/impl/src/main/java/com/tangem/feature/referral/models/ReferralStateHolder.kt @@ -39,7 +39,7 @@ internal data class ReferralStateHolder( val onParticipateClicked: () -> Unit, ) : ReferralInfoState, ReferralInfoContentState - object Loading : ReferralInfoState + data object Loading : ReferralInfoState } data class ErrorSnackbar(