diff --git a/app/src/main/java/com/tangem/tap/di/domain/WalletsDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/WalletsDomainModule.kt index 53c7fa8abd..d84fe82788 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/WalletsDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/WalletsDomainModule.kt @@ -15,6 +15,7 @@ import com.tangem.domain.wallets.derivations.DerivationsRepository import com.tangem.domain.wallets.hot.HotWalletAccessor import com.tangem.domain.wallets.legacy.UserWalletsListManager import com.tangem.domain.wallets.repository.WalletNamesMigrationRepository +import com.tangem.domain.wallets.repository.WalletsPromoRepository import com.tangem.domain.wallets.repository.WalletsRepository import com.tangem.domain.wallets.usecase.* import com.tangem.domain.yield.supply.YieldSupplyRepository @@ -157,8 +158,10 @@ internal object WalletsDomainModule { @Provides @Singleton - fun providesOpenBuyTangemCardUseCase(): GenerateBuyTangemCardLinkUseCase { - return GenerateBuyTangemCardLinkUseCase() + fun providesOpenBuyTangemCardUseCase( + walletsPromoRepository: WalletsPromoRepository, + ): GenerateBuyTangemCardLinkUseCase { + return GenerateBuyTangemCardLinkUseCase(walletsPromoRepository) } @Provides diff --git a/common/src/main/kotlin/com/tangem/common/TangemSiteUrlBuilder.kt b/common/src/main/kotlin/com/tangem/common/TangemSiteUrlBuilder.kt index 573b95bdfb..6dc7f0d926 100644 --- a/common/src/main/kotlin/com/tangem/common/TangemSiteUrlBuilder.kt +++ b/common/src/main/kotlin/com/tangem/common/TangemSiteUrlBuilder.kt @@ -17,6 +17,10 @@ object TangemSiteUrlBuilder { return "utm_source=tangem-app&utm_medium=app$utmCampaignPart$utmContent$appInstanceIdPart" } + fun getRefCodeTag(refCode: String?): String { + return refCode?.let { "promocode=$it" }.orEmpty() + } + suspend fun url(path: String, campaign: String): String { val normalizedPath = path.trim('/') return "https://tangem.com/$normalizedPath?${getUtmTags(campaign)}" diff --git a/data/wallets/src/main/java/com/tangem/data/wallets/DefaultWalletsPromoRepository.kt b/data/wallets/src/main/java/com/tangem/data/wallets/DefaultWalletsPromoRepository.kt index de2bbc191e..ea64bbd90d 100644 --- a/data/wallets/src/main/java/com/tangem/data/wallets/DefaultWalletsPromoRepository.kt +++ b/data/wallets/src/main/java/com/tangem/data/wallets/DefaultWalletsPromoRepository.kt @@ -6,6 +6,7 @@ import com.squareup.moshi.JsonClass import com.tangem.datasource.api.common.response.ApiResponse import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.api.tangemTech.models.BindWalletsByReferralCodeBody +import com.tangem.datasource.local.appsflyer.AppsFlyerStore import com.tangem.datasource.local.preferences.AppPreferencesStore import com.tangem.datasource.local.preferences.utils.getObjectSyncOrNull import com.tangem.datasource.local.preferences.utils.storeObject @@ -21,6 +22,7 @@ internal class DefaultWalletsPromoRepository( private val tangemTechApi: TangemTechApi, private val userWalletsStore: UserWalletsStore, private val dispatchers: CoroutineDispatcherProvider, + private val appsFlyerStore: AppsFlyerStore, ) : WalletsPromoRepository { override suspend fun bindRefcodeWithWallets(conversionData: AppsFlyerConversionData) = withContext(dispatchers.io) { @@ -49,6 +51,10 @@ internal class DefaultWalletsPromoRepository( } } + override suspend fun getReferralCodeIfExists(): String? { + return appsFlyerStore.get()?.refcode + } + private suspend fun getSavedBindingData(): ReferralWalletsBindingData? { return appPreferencesStore.getObjectSyncOrNull(key = REFERRAL_WALLETS_BINDING_DATA_KEY) } diff --git a/data/wallets/src/main/java/com/tangem/data/wallets/di/WalletsDataModule.kt b/data/wallets/src/main/java/com/tangem/data/wallets/di/WalletsDataModule.kt index c5a72a7e5a..6eb367a7f4 100644 --- a/data/wallets/src/main/java/com/tangem/data/wallets/di/WalletsDataModule.kt +++ b/data/wallets/src/main/java/com/tangem/data/wallets/di/WalletsDataModule.kt @@ -76,12 +76,14 @@ internal object WalletsDataModule { tangemTechApi: TangemTechApi, userWalletsStore: UserWalletsStore, dispatchers: CoroutineDispatcherProvider, + appsFlyerStore: AppsFlyerStore, ): WalletsPromoRepository { return DefaultWalletsPromoRepository( appPreferencesStore = appPreferencesStore, tangemTechApi = tangemTechApi, userWalletsStore = userWalletsStore, dispatchers = dispatchers, + appsFlyerStore = appsFlyerStore, ) } } diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/repository/WalletsPromoRepository.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/repository/WalletsPromoRepository.kt index d14afae786..e3c7b0594d 100644 --- a/domain/wallets/src/main/java/com/tangem/domain/wallets/repository/WalletsPromoRepository.kt +++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/repository/WalletsPromoRepository.kt @@ -7,4 +7,6 @@ interface WalletsPromoRepository { suspend fun bindRefcodeWithWallets(conversionData: AppsFlyerConversionData) suspend fun retryBindRefcodeWithWallets() + + suspend fun getReferralCodeIfExists(): String? } \ No newline at end of file diff --git a/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/GenerateBuyTangemCardLinkUseCase.kt b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/GenerateBuyTangemCardLinkUseCase.kt index 7a7cac1d2b..b146be18d6 100644 --- a/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/GenerateBuyTangemCardLinkUseCase.kt +++ b/domain/wallets/src/main/java/com/tangem/domain/wallets/usecase/GenerateBuyTangemCardLinkUseCase.kt @@ -1,18 +1,23 @@ package com.tangem.domain.wallets.usecase import com.tangem.common.TangemSiteUrlBuilder +import com.tangem.domain.wallets.repository.WalletsPromoRepository import java.util.Locale -class GenerateBuyTangemCardLinkUseCase { +class GenerateBuyTangemCardLinkUseCase( + private val walletsPromoRepository: WalletsPromoRepository, +) { suspend operator fun invoke(source: Source): String { return invoke(source.utmCampaign) } suspend operator fun invoke(utmCampaign: String?): String { + val refCode = walletsPromoRepository.getReferralCodeIfExists() + val refCodeTag = TangemSiteUrlBuilder.getRefCodeTag(refCode) val langCode = Locale.getDefault().language val utmTags = TangemSiteUrlBuilder.getUtmTags(utmCampaign) - return "https://buy.tangem.com/$langCode?$utmTags" + return "https://buy.tangem.com/$langCode?$utmTags&$refCodeTag" } enum class Source(val utmCampaign: String) { diff --git a/features/details/impl/build.gradle.kts b/features/details/impl/build.gradle.kts index 8da459c047..bd2572246b 100644 --- a/features/details/impl/build.gradle.kts +++ b/features/details/impl/build.gradle.kts @@ -31,6 +31,7 @@ dependencies { implementation(projects.core.analytics.models) implementation(projects.common.routing) implementation(projects.common.ui) + implementation(projects.core.datasource) /* Project - Domain */ implementation(projects.domain.models)