diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 78cf88d7f0..3886d9f58b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -75,6 +75,7 @@ dependencies { implementation(projects.domain.markets) implementation(projects.domain.manageTokens) implementation(projects.domain.onramp) + implementation(projects.domain.promo) implementation(projects.common) implementation(projects.common.routing) diff --git a/app/src/main/java/com/tangem/tap/di/domain/PromoDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/PromoDomainModule.kt new file mode 100644 index 0000000000..ccc91c699c --- /dev/null +++ b/app/src/main/java/com/tangem/tap/di/domain/PromoDomainModule.kt @@ -0,0 +1,36 @@ +package com.tangem.tap.di.domain + +import com.tangem.domain.promo.PromoRepository +import com.tangem.domain.promo.ShouldShowRingPromoUseCase +import com.tangem.domain.promo.ShouldShowSwapPromoTokenUseCase +import com.tangem.domain.promo.ShouldShowSwapPromoWalletUseCase +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object PromoDomainModule { + + @Provides + @Singleton + fun provideShouldShowSwapPromoWalletUseCase( + promoSettingsRepository: PromoRepository, + ): ShouldShowSwapPromoWalletUseCase { + return ShouldShowSwapPromoWalletUseCase(promoSettingsRepository) + } + + @Provides + @Singleton + fun provideShouldShowRingPromoUseCase(promoRepository: PromoRepository): ShouldShowRingPromoUseCase { + return ShouldShowRingPromoUseCase(promoRepository) + } + + @Provides + @Singleton + fun provideShouldShowSwapPromoTokenUseCase(promoRepository: PromoRepository): ShouldShowSwapPromoTokenUseCase { + return ShouldShowSwapPromoTokenUseCase(promoRepository) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/di/domain/SettingsDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/SettingsDomainModule.kt index 352171f53a..6871b3101c 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/SettingsDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/SettingsDomainModule.kt @@ -8,7 +8,6 @@ import com.tangem.domain.balancehiding.repositories.BalanceHidingRepository import com.tangem.domain.settings.* import com.tangem.domain.settings.repositories.AppRatingRepository import com.tangem.domain.settings.repositories.PermissionRepository -import com.tangem.domain.settings.repositories.PromoSettingsRepository import com.tangem.domain.settings.repositories.SettingsRepository import com.tangem.domain.settings.usercountry.FetchUserCountryUseCase import com.tangem.domain.settings.usercountry.GetUserCountryUseCase @@ -117,30 +116,6 @@ internal object SettingsDomainModule { return IsWalletsScrollPreviewEnabled(settingsRepository = settingsRepository) } - @Provides - @Singleton - fun provideShouldShowSwapPromoWalletUseCase( - promoSettingsRepository: PromoSettingsRepository, - ): ShouldShowSwapPromoWalletUseCase { - return ShouldShowSwapPromoWalletUseCase(promoSettingsRepository) - } - - @Provides - @Singleton - fun provideShouldShowRingPromoUseCase( - promoSettingsRepository: PromoSettingsRepository, - ): ShouldShowRingPromoUseCase { - return ShouldShowRingPromoUseCase(promoSettingsRepository) - } - - @Provides - @Singleton - fun provideShouldShowSwapPromoTokenUseCase( - promoSettingsRepository: PromoSettingsRepository, - ): ShouldShowSwapPromoTokenUseCase { - return ShouldShowSwapPromoTokenUseCase(promoSettingsRepository) - } - @Provides @Singleton fun provideDeleteDeprecatedLogsUseCase(settingsRepository: SettingsRepository): DeleteDeprecatedLogsUseCase { diff --git a/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt index 9bea3ac624..1014dca16a 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/TokensDomainModule.kt @@ -1,12 +1,10 @@ package com.tangem.tap.di.domain import com.tangem.domain.exchange.RampStateManager -import com.tangem.domain.settings.ShouldShowSwapPromoTokenUseCase import com.tangem.domain.staking.repositories.StakingRepository import com.tangem.domain.tokens.* import com.tangem.domain.tokens.repository.* import com.tangem.domain.walletmanager.WalletManagersFacade -import com.tangem.feature.swap.domain.api.SwapRepository import com.tangem.utils.coroutines.CoroutineDispatcherProvider import dagger.Module import dagger.Provides @@ -118,13 +116,9 @@ internal object TokensDomainModule { currenciesRepository: CurrenciesRepository, quotesRepository: QuotesRepository, networksRepository: NetworksRepository, - swapRepository: SwapRepository, currencyChecksRepository: CurrencyChecksRepository, - showSwapPromoTokenUseCase: ShouldShowSwapPromoTokenUseCase, - promoRepository: PromoRepository, stakingRepository: StakingRepository, dispatchers: CoroutineDispatcherProvider, - rampStateManager: RampStateManager, ): GetCurrencyWarningsUseCase { return GetCurrencyWarningsUseCase( walletManagersFacade = walletManagersFacade, @@ -132,12 +126,8 @@ internal object TokensDomainModule { quotesRepository = quotesRepository, networksRepository = networksRepository, currencyChecksRepository = currencyChecksRepository, - swapRepository = swapRepository, - showSwapPromoTokenUseCase = showSwapPromoTokenUseCase, - promoRepository = promoRepository, stakingRepository = stakingRepository, dispatchers = dispatchers, - rampStateManager = rampStateManager, ) } diff --git a/data/promo/build.gradle.kts b/data/promo/build.gradle.kts index b11dc26ed9..03bcb7be3b 100644 --- a/data/promo/build.gradle.kts +++ b/data/promo/build.gradle.kts @@ -17,8 +17,9 @@ dependencies { implementation(deps.hilt.android) kapt(deps.hilt.kapt) - implementation(projects.domain.tokens) - implementation(projects.domain.tokens.models) + implementation(projects.domain.promo) + implementation(projects.domain.promo.models) + implementation(projects.domain.wallets.models) implementation(projects.core.datasource) implementation(projects.core.utils) 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 0a81c2200c..4714406f4d 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 @@ -3,13 +3,25 @@ package com.tangem.data.promo import com.tangem.data.promo.converters.PromoResponseConverter import com.tangem.datasource.api.common.response.getOrThrow import com.tangem.datasource.api.tangemTech.TangemTechApi -import com.tangem.domain.promo.PromoBanner -import com.tangem.domain.tokens.repository.PromoRepository +import com.tangem.datasource.local.preferences.AppPreferencesStore +import com.tangem.datasource.local.preferences.PreferencesKeys.ADDED_WALLETS_WITH_RING_KEY +import com.tangem.datasource.local.preferences.PreferencesKeys.IS_TOKEN_SWAP_PROMO_OKX_SHOW_KEY +import com.tangem.datasource.local.preferences.PreferencesKeys.IS_WALLET_SWAP_PROMO_OKX_SHOW_KEY +import com.tangem.datasource.local.preferences.PreferencesKeys.SHOULD_SHOW_RING_PROMO_KEY +import com.tangem.datasource.local.preferences.utils.get +import com.tangem.datasource.local.preferences.utils.store +import com.tangem.domain.promo.PromoRepository +import com.tangem.domain.promo.models.PromoBanner +import com.tangem.domain.wallets.models.UserWalletId import com.tangem.utils.coroutines.CoroutineDispatcherProvider import com.tangem.utils.coroutines.runCatching +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.map internal class DefaultPromoRepository( private val tangemApi: TangemTechApi, + private val appPreferencesStore: AppPreferencesStore, private val dispatchers: CoroutineDispatcherProvider, ) : PromoRepository { @@ -41,6 +53,42 @@ internal class DefaultPromoRepository( }.getOrNull() } + override fun isReadyToShowWalletSwapPromo(): Flow { + return appPreferencesStore.get(IS_WALLET_SWAP_PROMO_OKX_SHOW_KEY, true) + } + + override fun isReadyToShowTokenSwapPromo(): Flow { + return appPreferencesStore.get(IS_TOKEN_SWAP_PROMO_OKX_SHOW_KEY, true) + } + + override suspend fun setNeverToShowWalletSwapPromo() { + appPreferencesStore.store( + key = IS_WALLET_SWAP_PROMO_OKX_SHOW_KEY, + value = false, + ) + } + + override suspend fun setNeverToShowTokenSwapPromo() { + appPreferencesStore.store( + key = IS_TOKEN_SWAP_PROMO_OKX_SHOW_KEY, + value = false, + ) + } + + override fun isReadyToShowRingPromo(userWalletId: UserWalletId): Flow { + return combine( + flow = appPreferencesStore + .get(key = ADDED_WALLETS_WITH_RING_KEY, default = emptySet()) + .map { userWalletId.stringValue in it }, + flow2 = appPreferencesStore.get(key = SHOULD_SHOW_RING_PROMO_KEY, default = true), + transform = { isRingAdded, shouldShowRingPromo -> isRingAdded && shouldShowRingPromo }, + ) + } + + override suspend fun setNeverToShowRingPromo() { + appPreferencesStore.store(key = SHOULD_SHOW_RING_PROMO_KEY, value = false) + } + private companion object { private const val CHANGELLY_NAME = "changelly" private const val OKX = "okx" 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/PromoResponseConverter.kt index 151675506b..cc418e808c 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/PromoResponseConverter.kt @@ -1,7 +1,7 @@ package com.tangem.data.promo.converters import com.tangem.datasource.api.promotion.models.PromotionInfoResponse -import com.tangem.domain.promo.PromoBanner +import com.tangem.domain.promo.models.PromoBanner import com.tangem.utils.converter.Converter import org.joda.time.DateTime diff --git a/data/promo/src/main/java/com/tangem/data/promo/di/PromoDataModule.kt b/data/promo/src/main/java/com/tangem/data/promo/di/PromoDataModule.kt index 5ed2c6855f..102afaa289 100644 --- a/data/promo/src/main/java/com/tangem/data/promo/di/PromoDataModule.kt +++ b/data/promo/src/main/java/com/tangem/data/promo/di/PromoDataModule.kt @@ -2,7 +2,8 @@ package com.tangem.data.promo.di import com.tangem.data.promo.DefaultPromoRepository import com.tangem.datasource.api.tangemTech.TangemTechApi -import com.tangem.domain.tokens.repository.PromoRepository +import com.tangem.datasource.local.preferences.AppPreferencesStore +import com.tangem.domain.promo.PromoRepository import com.tangem.utils.coroutines.CoroutineDispatcherProvider import dagger.Module import dagger.Provides @@ -18,8 +19,9 @@ internal object PromoDataModule { @Singleton fun providePromoRepository( tangemTechApi: TangemTechApi, + appPreferencesStore: AppPreferencesStore, dispatchers: CoroutineDispatcherProvider, ): PromoRepository { - return DefaultPromoRepository(tangemTechApi, dispatchers) + return DefaultPromoRepository(tangemTechApi, appPreferencesStore, dispatchers) } } \ No newline at end of file diff --git a/data/settings/build.gradle.kts b/data/settings/build.gradle.kts index 992a502c03..6856b1236f 100644 --- a/data/settings/build.gradle.kts +++ b/data/settings/build.gradle.kts @@ -17,7 +17,6 @@ dependencies { implementation(projects.domain.balanceHiding.models) implementation(projects.domain.settings) - implementation(projects.domain.wallets.models) implementation(deps.androidx.datastore) diff --git a/data/settings/src/main/java/com/tangem/data/settings/DefaultPromoSettingsRepository.kt b/data/settings/src/main/java/com/tangem/data/settings/DefaultPromoSettingsRepository.kt deleted file mode 100644 index 8a2b5aa1d9..0000000000 --- a/data/settings/src/main/java/com/tangem/data/settings/DefaultPromoSettingsRepository.kt +++ /dev/null @@ -1,57 +0,0 @@ -package com.tangem.data.settings - -import com.tangem.datasource.local.preferences.AppPreferencesStore -import com.tangem.datasource.local.preferences.PreferencesKeys.ADDED_WALLETS_WITH_RING_KEY -import com.tangem.datasource.local.preferences.PreferencesKeys.IS_TOKEN_SWAP_PROMO_OKX_SHOW_KEY -import com.tangem.datasource.local.preferences.PreferencesKeys.IS_WALLET_SWAP_PROMO_OKX_SHOW_KEY -import com.tangem.datasource.local.preferences.PreferencesKeys.SHOULD_SHOW_RING_PROMO_KEY -import com.tangem.datasource.local.preferences.utils.get -import com.tangem.datasource.local.preferences.utils.store -import com.tangem.domain.settings.repositories.PromoSettingsRepository -import com.tangem.domain.wallets.models.UserWalletId -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.combine -import kotlinx.coroutines.flow.map - -/** - * Repository for showing swap promo notification. - */ -class DefaultPromoSettingsRepository( - private val appPreferencesStore: AppPreferencesStore, -) : PromoSettingsRepository { - override fun isReadyToShowWalletSwapPromo(): Flow { - return appPreferencesStore.get(IS_WALLET_SWAP_PROMO_OKX_SHOW_KEY, true) - } - - override fun isReadyToShowTokenSwapPromo(): Flow { - return appPreferencesStore.get(IS_TOKEN_SWAP_PROMO_OKX_SHOW_KEY, true) - } - - override suspend fun setNeverToShowWalletSwapPromo() { - appPreferencesStore.store( - key = IS_WALLET_SWAP_PROMO_OKX_SHOW_KEY, - value = false, - ) - } - - override suspend fun setNeverToShowTokenSwapPromo() { - appPreferencesStore.store( - key = IS_TOKEN_SWAP_PROMO_OKX_SHOW_KEY, - value = false, - ) - } - - override fun isReadyToShowRingPromo(userWalletId: UserWalletId): Flow { - return combine( - flow = appPreferencesStore - .get(key = ADDED_WALLETS_WITH_RING_KEY, default = emptySet()) - .map { userWalletId.stringValue in it }, - flow2 = appPreferencesStore.get(key = SHOULD_SHOW_RING_PROMO_KEY, default = true), - transform = { isRingAdded, shouldShowRingPromo -> isRingAdded && shouldShowRingPromo }, - ) - } - - override suspend fun setNeverToShowRingPromo() { - appPreferencesStore.store(key = SHOULD_SHOW_RING_PROMO_KEY, value = false) - } -} \ No newline at end of file diff --git a/data/settings/src/main/java/com/tangem/data/settings/di/SettingsDataModule.kt b/data/settings/src/main/java/com/tangem/data/settings/di/SettingsDataModule.kt index 0ea5bce762..4f04ee135b 100644 --- a/data/settings/src/main/java/com/tangem/data/settings/di/SettingsDataModule.kt +++ b/data/settings/src/main/java/com/tangem/data/settings/di/SettingsDataModule.kt @@ -2,14 +2,12 @@ package com.tangem.data.settings.di import com.tangem.data.settings.DefaultAppRatingRepository import com.tangem.data.settings.DefaultPermissionRepository -import com.tangem.data.settings.DefaultPromoSettingsRepository import com.tangem.data.settings.DefaultSettingsRepository import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.local.logs.AppLogsStore import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.domain.settings.repositories.AppRatingRepository import com.tangem.domain.settings.repositories.PermissionRepository -import com.tangem.domain.settings.repositories.PromoSettingsRepository import com.tangem.domain.settings.repositories.SettingsRepository import com.tangem.utils.coroutines.CoroutineDispatcherProvider import dagger.Module @@ -44,12 +42,6 @@ internal object SettingsDataModule { return DefaultAppRatingRepository(appPreferencesStore = appPreferencesStore) } - @Provides - @Singleton - fun providePromoSettingsSettingsRepository(appPreferencesStore: AppPreferencesStore): PromoSettingsRepository { - return DefaultPromoSettingsRepository(appPreferencesStore = appPreferencesStore) - } - @Provides @Singleton fun providePushPermissionRepository(appPreferencesStore: AppPreferencesStore): PermissionRepository { diff --git a/domain/promo/.gitignore b/domain/promo/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/domain/promo/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/domain/promo/build.gradle.kts b/domain/promo/build.gradle.kts new file mode 100644 index 0000000000..cefe592d97 --- /dev/null +++ b/domain/promo/build.gradle.kts @@ -0,0 +1,12 @@ +plugins { + alias(deps.plugins.kotlin.jvm) + id("configuration") +} + +dependencies { + implementation(projects.domain.promo.models) + implementation(projects.domain.wallets.models) + + implementation(deps.kotlin.coroutines) + implementation(deps.arrow.core) +} \ No newline at end of file diff --git a/domain/promo/models/.gitignore b/domain/promo/models/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/domain/promo/models/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/domain/promo/models/build.gradle.kts b/domain/promo/models/build.gradle.kts new file mode 100644 index 0000000000..fe9e75a251 --- /dev/null +++ b/domain/promo/models/build.gradle.kts @@ -0,0 +1,9 @@ +plugins { + alias(deps.plugins.kotlin.jvm) + alias(deps.plugins.kotlin.serialization) + id("configuration") +} + +dependencies { + implementation(deps.jodatime) +} \ No newline at end of file diff --git a/domain/tokens/models/src/main/java/com/tangem/domain/promo/PromoBanner.kt b/domain/promo/models/src/main/java/com/tangem/domain/promo/models/PromoBanner.kt similarity index 92% rename from domain/tokens/models/src/main/java/com/tangem/domain/promo/PromoBanner.kt rename to domain/promo/models/src/main/java/com/tangem/domain/promo/models/PromoBanner.kt index 2608085143..42ecbd01d8 100644 --- a/domain/tokens/models/src/main/java/com/tangem/domain/promo/PromoBanner.kt +++ b/domain/promo/models/src/main/java/com/tangem/domain/promo/models/PromoBanner.kt @@ -1,4 +1,4 @@ -package com.tangem.domain.promo +package com.tangem.domain.promo.models import org.joda.time.DateTime diff --git a/domain/settings/src/main/java/com/tangem/domain/settings/repositories/PromoSettingsRepository.kt b/domain/promo/src/main/java/com/tangem/domain/promo/PromoRepository.kt similarity index 60% rename from domain/settings/src/main/java/com/tangem/domain/settings/repositories/PromoSettingsRepository.kt rename to domain/promo/src/main/java/com/tangem/domain/promo/PromoRepository.kt index b68a740e09..6350df9b18 100644 --- a/domain/settings/src/main/java/com/tangem/domain/settings/repositories/PromoSettingsRepository.kt +++ b/domain/promo/src/main/java/com/tangem/domain/promo/PromoRepository.kt @@ -1,9 +1,17 @@ -package com.tangem.domain.settings.repositories +package com.tangem.domain.promo +import com.tangem.domain.promo.models.PromoBanner import com.tangem.domain.wallets.models.UserWalletId import kotlinx.coroutines.flow.Flow -interface PromoSettingsRepository { +interface PromoRepository { + + suspend fun getChangellyPromoBanner(): PromoBanner? + + suspend fun getOkxPromoBanner(): PromoBanner? + + suspend fun getRingPromoBanner(): PromoBanner? + fun isReadyToShowWalletSwapPromo(): Flow fun isReadyToShowTokenSwapPromo(): Flow diff --git a/domain/settings/src/main/java/com/tangem/domain/settings/ShouldShowRingPromoUseCase.kt b/domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowRingPromoUseCase.kt similarity index 73% rename from domain/settings/src/main/java/com/tangem/domain/settings/ShouldShowRingPromoUseCase.kt rename to domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowRingPromoUseCase.kt index 67d9174e78..6dfa5d7b2b 100644 --- a/domain/settings/src/main/java/com/tangem/domain/settings/ShouldShowRingPromoUseCase.kt +++ b/domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowRingPromoUseCase.kt @@ -1,10 +1,9 @@ -package com.tangem.domain.settings +package com.tangem.domain.promo -import com.tangem.domain.settings.repositories.PromoSettingsRepository import com.tangem.domain.wallets.models.UserWalletId import kotlinx.coroutines.flow.Flow -class ShouldShowRingPromoUseCase(private val promoSettingsRepository: PromoSettingsRepository) { +class ShouldShowRingPromoUseCase(private val promoSettingsRepository: PromoRepository) { operator fun invoke(userWalletId: UserWalletId): Flow { return promoSettingsRepository.isReadyToShowRingPromo(userWalletId) diff --git a/domain/settings/src/main/java/com/tangem/domain/settings/ShouldShowSwapPromoTokenUseCase.kt b/domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowSwapPromoTokenUseCase.kt similarity index 66% rename from domain/settings/src/main/java/com/tangem/domain/settings/ShouldShowSwapPromoTokenUseCase.kt rename to domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowSwapPromoTokenUseCase.kt index 8ede57bcf9..69908277b5 100644 --- a/domain/settings/src/main/java/com/tangem/domain/settings/ShouldShowSwapPromoTokenUseCase.kt +++ b/domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowSwapPromoTokenUseCase.kt @@ -1,9 +1,8 @@ -package com.tangem.domain.settings +package com.tangem.domain.promo -import com.tangem.domain.settings.repositories.PromoSettingsRepository import kotlinx.coroutines.flow.Flow -class ShouldShowSwapPromoTokenUseCase(private val promoSettingsRepository: PromoSettingsRepository) { +class ShouldShowSwapPromoTokenUseCase(private val promoSettingsRepository: PromoRepository) { operator fun invoke(): Flow = promoSettingsRepository.isReadyToShowTokenSwapPromo() diff --git a/domain/settings/src/main/java/com/tangem/domain/settings/ShouldShowSwapPromoWalletUseCase.kt b/domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowSwapPromoWalletUseCase.kt similarity index 66% rename from domain/settings/src/main/java/com/tangem/domain/settings/ShouldShowSwapPromoWalletUseCase.kt rename to domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowSwapPromoWalletUseCase.kt index 233277f71f..af234c43b2 100644 --- a/domain/settings/src/main/java/com/tangem/domain/settings/ShouldShowSwapPromoWalletUseCase.kt +++ b/domain/promo/src/main/java/com/tangem/domain/promo/ShouldShowSwapPromoWalletUseCase.kt @@ -1,9 +1,8 @@ -package com.tangem.domain.settings +package com.tangem.domain.promo -import com.tangem.domain.settings.repositories.PromoSettingsRepository import kotlinx.coroutines.flow.Flow -class ShouldShowSwapPromoWalletUseCase(private val promoSettingsRepository: PromoSettingsRepository) { +class ShouldShowSwapPromoWalletUseCase(private val promoSettingsRepository: PromoRepository) { operator fun invoke(): Flow = promoSettingsRepository.isReadyToShowWalletSwapPromo() diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyWarningsUseCase.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyWarningsUseCase.kt index e6975190ee..5be9720ad4 100644 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyWarningsUseCase.kt +++ b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/GetCurrencyWarningsUseCase.kt @@ -1,37 +1,30 @@ package com.tangem.domain.tokens -import com.tangem.domain.exchange.RampStateManager -import com.tangem.domain.settings.ShouldShowSwapPromoTokenUseCase import com.tangem.domain.staking.repositories.StakingRepository import com.tangem.domain.tokens.model.* import com.tangem.domain.tokens.model.warnings.CryptoCurrencyWarning import com.tangem.domain.tokens.model.warnings.HederaWarnings import com.tangem.domain.tokens.model.warnings.KaspaWarnings import com.tangem.domain.tokens.operations.CurrenciesStatusesOperations -import com.tangem.domain.tokens.repository.* +import com.tangem.domain.tokens.repository.CurrenciesRepository +import com.tangem.domain.tokens.repository.CurrencyChecksRepository +import com.tangem.domain.tokens.repository.NetworksRepository +import com.tangem.domain.tokens.repository.QuotesRepository import com.tangem.domain.transaction.models.AssetRequirementsCondition import com.tangem.domain.walletmanager.WalletManagersFacade import com.tangem.domain.wallets.models.UserWalletId -import com.tangem.feature.swap.domain.api.SwapRepository -import com.tangem.feature.swap.domain.models.domain.LeastTokenInfo import com.tangem.lib.crypto.BlockchainUtils import com.tangem.utils.coroutines.CoroutineDispatcherProvider -import com.tangem.utils.coroutines.runCatching -import com.tangem.utils.isNullOrZero import kotlinx.coroutines.flow.* import java.math.BigDecimal -@Suppress("LongParameterList", "LargeClass") +@Suppress("LongParameterList") class GetCurrencyWarningsUseCase( private val walletManagersFacade: WalletManagersFacade, private val currenciesRepository: CurrenciesRepository, private val quotesRepository: QuotesRepository, private val networksRepository: NetworksRepository, - private val swapRepository: SwapRepository, - private val rampStateManager: RampStateManager, private val stakingRepository: StakingRepository, - private val promoRepository: PromoRepository, - private val showSwapPromoTokenUseCase: ShouldShowSwapPromoTokenUseCase, private val dispatchers: CoroutineDispatcherProvider, private val currencyChecksRepository: CurrencyChecksRepository, ) { @@ -78,75 +71,6 @@ class GetCurrencyWarningsUseCase( }.flowOn(dispatchers.io) } - // disabled for now, don't use it directly in combine() to avoid blocking other notifications - @Suppress("UnusedPrivateMember") - private suspend fun getSwapPromoNotificationWarning( - operations: CurrenciesStatusesOperations, - userWalletId: UserWalletId, - currencyStatus: CryptoCurrencyStatus, - ): Flow { - val currency = currencyStatus.currency - val cryptoStatuses = operations.getCurrenciesStatusesSync() - val promoBanner = promoRepository.getOkxPromoBanner() - return combine( - flow = showSwapPromoTokenUseCase() - .conflate() - .distinctUntilChanged(), - flow2 = flowOf(rampStateManager.availableForSwap(userWalletId, currency)) - .conflate() - .distinctUntilChanged(), - ) { shouldShowSwapPromo, isExchangeable -> - promoBanner ?: return@combine null - val showPromoBanner = promoBanner.isActive && shouldShowSwapPromo - if (showPromoBanner && isExchangeable && currencyStatus.value !is CryptoCurrencyStatus.Unreachable) { - cryptoStatuses.fold( - ifLeft = { null }, - ifRight = { cryptoCurrencyStatuses -> - val pairs = runCatching(dispatchers.io) { - swapRepository.getPairsOnly( - LeastTokenInfo( - contractAddress = (currency as? CryptoCurrency.Token)?.contractAddress ?: "0", - network = currency.network.backendId, - ), - cryptoCurrencyStatuses.map { it.currency }, - ) - }.getOrNull()?.pairs ?: emptyList() - - val filteredCurrencies = cryptoCurrencyStatuses.filterNot { - it.currency.id == currency.id - } - val currencyPairs = pairs.filter { - it.from.network == currency.network.backendId || - it.to.network == currency.network.backendId - } - val showPromo = currencyPairs.any { pair -> - val availablePair = if (currencyStatus.value.amount.isNullOrZero()) { - filteredCurrencies.filterNot { it.value.amount.isNullOrZero() } - } else { - filteredCurrencies - } - availablePair - .any { - it.currency.network.backendId == pair.to.network || - it.currency.network.backendId == pair.from.network - } - } - if (showPromo) { - CryptoCurrencyWarning.SwapPromo( - startDateTime = promoBanner.bannerState.timeline.start, - endDateTime = promoBanner.bannerState.timeline.end, - ) - } else { - null - } - }, - ) - } else { - null - } - } - } - @Suppress("LongParameterList") private suspend fun getCoinRelatedWarnings( userWalletId: UserWalletId, diff --git a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/PromoRepository.kt b/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/PromoRepository.kt deleted file mode 100644 index 39457c1113..0000000000 --- a/domain/tokens/src/main/kotlin/com/tangem/domain/tokens/repository/PromoRepository.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.tangem.domain.tokens.repository - -import com.tangem.domain.promo.PromoBanner - -interface PromoRepository { - - suspend fun getChangellyPromoBanner(): PromoBanner? - - suspend fun getOkxPromoBanner(): PromoBanner? - - suspend fun getRingPromoBanner(): PromoBanner? -} \ No newline at end of file diff --git a/features/tokendetails/impl/build.gradle.kts b/features/tokendetails/impl/build.gradle.kts index cfaae5a6d2..adb8f4302f 100644 --- a/features/tokendetails/impl/build.gradle.kts +++ b/features/tokendetails/impl/build.gradle.kts @@ -84,6 +84,7 @@ dependencies { implementation(projects.domain.markets.models) implementation(projects.domain.onramp) implementation(projects.domain.onramp.models) + implementation(projects.domain.promo) /** Temp dependency to swap domain */ implementation(projects.features.swap.domain) diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt index f0fedeec0a..988622e848 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/TokenDetailsViewModel.kt @@ -32,7 +32,7 @@ import com.tangem.domain.common.util.cardTypesResolver import com.tangem.domain.demo.IsDemoCardUseCase import com.tangem.domain.onramp.model.OnrampSource import com.tangem.domain.redux.ReduxStateHolder -import com.tangem.domain.settings.ShouldShowSwapPromoTokenUseCase +import com.tangem.domain.promo.ShouldShowSwapPromoTokenUseCase import com.tangem.domain.staking.GetStakingAvailabilityUseCase import com.tangem.domain.staking.GetStakingEntryInfoUseCase import com.tangem.domain.staking.GetStakingIntegrationIdUseCase diff --git a/features/wallet/impl/build.gradle.kts b/features/wallet/impl/build.gradle.kts index 36690c35a6..4b4d928ae1 100644 --- a/features/wallet/impl/build.gradle.kts +++ b/features/wallet/impl/build.gradle.kts @@ -84,6 +84,8 @@ dependencies { implementation(projects.domain.feedback) implementation(projects.domain.onramp.models) implementation(projects.domain.onramp) + implementation(projects.domain.promo) + implementation(projects.domain.promo.models) //TODO: Create api/impl modules for onboarding [REDACTED_JIRA] implementation(projects.features.onboarding) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt index 7178667b98..20c180fe36 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetMultiWalletWarningsFactory.kt @@ -4,14 +4,14 @@ import com.tangem.domain.common.CardTypesResolver import com.tangem.domain.common.util.cardTypesResolver import com.tangem.domain.core.lce.Lce import com.tangem.domain.demo.IsDemoCardUseCase -import com.tangem.domain.promo.PromoBanner +import com.tangem.domain.promo.PromoRepository +import com.tangem.domain.promo.ShouldShowRingPromoUseCase +import com.tangem.domain.promo.models.PromoBanner import com.tangem.domain.settings.IsReadyToShowRateAppUseCase -import com.tangem.domain.settings.ShouldShowRingPromoUseCase import com.tangem.domain.tokens.error.TokenListError import com.tangem.domain.tokens.model.CryptoCurrency import com.tangem.domain.tokens.model.CryptoCurrencyStatus import com.tangem.domain.tokens.model.TokenList -import com.tangem.domain.tokens.repository.PromoRepository import com.tangem.domain.wallets.models.UserWallet import com.tangem.domain.wallets.usecase.IsNeedToBackupUseCase import com.tangem.feature.wallet.presentation.wallet.state.model.WalletNotification diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletWarningsClickIntents.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletWarningsClickIntents.kt index 8fbfd08c16..25aa286555 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletWarningsClickIntents.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/intents/WalletWarningsClickIntents.kt @@ -9,9 +9,12 @@ import com.tangem.domain.card.SetCardWasScannedUseCase import com.tangem.domain.feedback.GetCardInfoUseCase import com.tangem.domain.feedback.SendFeedbackEmailUseCase import com.tangem.domain.feedback.models.FeedbackEmailType +import com.tangem.domain.promo.ShouldShowRingPromoUseCase +import com.tangem.domain.promo.ShouldShowSwapPromoWalletUseCase import com.tangem.domain.redux.LegacyAction import com.tangem.domain.redux.ReduxStateHolder -import com.tangem.domain.settings.* +import com.tangem.domain.settings.NeverToSuggestRateAppUseCase +import com.tangem.domain.settings.RemindToRateAppLaterUseCase import com.tangem.domain.tokens.FetchTokenListUseCase import com.tangem.domain.tokens.FetchTokenListUseCase.RefreshMode import com.tangem.domain.tokens.model.CryptoCurrency diff --git a/settings.gradle.kts b/settings.gradle.kts index 1db213040e..d5fda70b8a 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -245,6 +245,7 @@ include(":domain:manage-tokens") include(":domain:manage-tokens:models") include(":domain:onramp") include(":domain:onramp:models") +include(":domain:promo") // endregion Domain modules // region Data modules @@ -269,4 +270,5 @@ include(":data:wallet-connect") include(":data:markets") include(":data:manage-tokens") include(":data:onramp") -// endregion Data modules \ No newline at end of file +// endregion Data modules +include(":domain:promo:models") \ No newline at end of file