Updated on 2026-08-14

This commit is contained in:
Tangem 2026-02-12 19:47:34 +07:00
parent 64fda96648
commit 72725adfa9
7 changed files with 27 additions and 4 deletions

View file

@ -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

View file

@ -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)}"

View file

@ -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)
}

View file

@ -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,
)
}
}

View file

@ -7,4 +7,6 @@ interface WalletsPromoRepository {
suspend fun bindRefcodeWithWallets(conversionData: AppsFlyerConversionData)
suspend fun retryBindRefcodeWithWallets()
suspend fun getReferralCodeIfExists(): String?
}

View file

@ -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) {

View file

@ -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)