diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/promotion/models/PromotionInfoResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/promotion/models/PromoBannerResponse.kt similarity index 95% rename from core/datasource/src/main/java/com/tangem/datasource/api/promotion/models/PromotionInfoResponse.kt rename to core/datasource/src/main/java/com/tangem/datasource/api/promotion/models/PromoBannerResponse.kt index 668a77c321..90caaabe5a 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/promotion/models/PromotionInfoResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/promotion/models/PromoBannerResponse.kt @@ -4,7 +4,7 @@ import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -data class PromotionInfoResponse( +data class PromoBannerResponse( @Json(name = "name") val name: String, @Json(name = "all") val bannerState: BannerState?, ) { 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 d173c69c57..3b08465384 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 @@ -1,6 +1,7 @@ package com.tangem.datasource.api.tangemTech import com.tangem.datasource.api.common.response.ApiResponse +import com.tangem.datasource.api.promotion.models.PromoBannerResponse import com.tangem.datasource.api.promotion.models.StoryContentResponse import com.tangem.datasource.api.tangemTech.models.* import com.tangem.datasource.api.tangemTech.models.account.GetWalletAccountsResponse @@ -163,4 +164,12 @@ interface TangemTechApi { @Header("If-None-Match") eTag: String? = null, ): ApiResponse // endregion + + // region promo banners + @GET("/v1/promotion") + suspend fun getPromoBanner( + @Query("programName") name: String, + @Header("Cache-Control") cacheControl: String = "max-age=600", + ): ApiResponse + // endregion } \ No newline at end of file diff --git a/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt b/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt index f58b3d0613..09b1d25af8 100644 --- a/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt +++ b/data/promo/src/main/java/com/tangem/data/promo/DefaultPromoRepository.kt @@ -1,5 +1,6 @@ package com.tangem.data.promo +import com.tangem.data.promo.converters.PromoBannerConverter import com.tangem.data.promo.converters.StoryContentResponseConverter import com.tangem.datasource.api.common.response.getOrThrow import com.tangem.datasource.api.tangemTech.TangemTechApi @@ -12,6 +13,7 @@ import com.tangem.datasource.local.preferences.utils.store import com.tangem.datasource.local.promo.PromoStoriesStore import com.tangem.domain.models.wallet.UserWalletId import com.tangem.domain.promo.PromoRepository +import com.tangem.domain.promo.models.PromoBanner import com.tangem.domain.promo.models.PromoId import com.tangem.domain.promo.models.StoryContent import com.tangem.feature.referral.domain.ReferralRepository @@ -22,6 +24,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.withContext import kotlinx.coroutines.withTimeoutOrNull +import com.tangem.utils.coroutines.runCatching internal class DefaultPromoRepository( private val tangemApi: TangemTechApi, @@ -32,6 +35,7 @@ internal class DefaultPromoRepository( ) : PromoRepository { private val storyContentConverter = StoryContentResponseConverter() + private val promoBannerConverter = PromoBannerConverter() override fun isReadyToShowWalletPromo(userWalletId: UserWalletId, promoId: PromoId): Flow { return appPreferencesStore.get( @@ -42,7 +46,11 @@ internal class DefaultPromoRepository( PromoId.Referral -> runCatching { !referralRepository.isReferralParticipant(userWalletId) && shouldShow }.getOrDefault(false) - PromoId.Sepa -> shouldShow + PromoId.Sepa -> { + val isActive = getSepaPromoBanner()?.isActive ?: false + + isActive && shouldShow + } } } } @@ -118,7 +126,16 @@ internal class DefaultPromoRepository( ) } + private suspend fun getSepaPromoBanner(): PromoBanner? { + return runCatching(dispatchers.io) { + promoBannerConverter.convert( + tangemApi.getPromoBanner(SEPA_NAME).getOrThrow(), + ) + }.getOrNull() + } + private companion object { + const val SEPA_NAME = "sepa" const val STORIES_LOAD_DELAY = 1000L } } \ No newline at end of file diff --git a/data/promo/src/main/java/com/tangem/data/promo/converters/PromoResponseConverter.kt b/data/promo/src/main/java/com/tangem/data/promo/converters/PromoBannerConverter.kt similarity index 74% rename from data/promo/src/main/java/com/tangem/data/promo/converters/PromoResponseConverter.kt rename to data/promo/src/main/java/com/tangem/data/promo/converters/PromoBannerConverter.kt index cc418e808c..1128472f33 100644 --- a/data/promo/src/main/java/com/tangem/data/promo/converters/PromoResponseConverter.kt +++ b/data/promo/src/main/java/com/tangem/data/promo/converters/PromoBannerConverter.kt @@ -1,13 +1,13 @@ package com.tangem.data.promo.converters -import com.tangem.datasource.api.promotion.models.PromotionInfoResponse +import com.tangem.datasource.api.promotion.models.PromoBannerResponse import com.tangem.domain.promo.models.PromoBanner import com.tangem.utils.converter.Converter import org.joda.time.DateTime -class PromoResponseConverter : Converter { +class PromoBannerConverter : Converter { - override fun convert(value: PromotionInfoResponse): PromoBanner? { + override fun convert(value: PromoBannerResponse): PromoBanner? { val bannerState = value.bannerState ?: return null return PromoBanner( name = value.name,