Updated on 2026-08-14
This commit is contained in:
commit
e2f9535a05
7 changed files with 27 additions and 4 deletions
|
|
@ -14,6 +14,7 @@ import com.tangem.domain.wallets.delegate.UserWalletsSyncDelegate
|
||||||
import com.tangem.domain.wallets.derivations.DerivationsRepository
|
import com.tangem.domain.wallets.derivations.DerivationsRepository
|
||||||
import com.tangem.domain.wallets.hot.HotWalletAccessor
|
import com.tangem.domain.wallets.hot.HotWalletAccessor
|
||||||
import com.tangem.domain.wallets.repository.WalletNamesMigrationRepository
|
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.repository.WalletsRepository
|
||||||
import com.tangem.domain.wallets.usecase.*
|
import com.tangem.domain.wallets.usecase.*
|
||||||
import com.tangem.domain.yield.supply.YieldSupplyRepository
|
import com.tangem.domain.yield.supply.YieldSupplyRepository
|
||||||
|
|
@ -105,8 +106,10 @@ internal object WalletsDomainModule {
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun providesOpenBuyTangemCardUseCase(): GenerateBuyTangemCardLinkUseCase {
|
fun providesOpenBuyTangemCardUseCase(
|
||||||
return GenerateBuyTangemCardLinkUseCase()
|
walletsPromoRepository: WalletsPromoRepository,
|
||||||
|
): GenerateBuyTangemCardLinkUseCase {
|
||||||
|
return GenerateBuyTangemCardLinkUseCase(walletsPromoRepository)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,10 @@ object TangemSiteUrlBuilder {
|
||||||
return "utm_source=tangem-app&utm_medium=app$utmCampaignPart$utmContent$appInstanceIdPart"
|
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 {
|
suspend fun url(path: String, campaign: String): String {
|
||||||
val normalizedPath = path.trim('/')
|
val normalizedPath = path.trim('/')
|
||||||
return "https://tangem.com/$normalizedPath?${getUtmTags(campaign)}"
|
return "https://tangem.com/$normalizedPath?${getUtmTags(campaign)}"
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ import com.squareup.moshi.JsonClass
|
||||||
import com.tangem.datasource.api.common.response.ApiResponse
|
import com.tangem.datasource.api.common.response.ApiResponse
|
||||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||||
import com.tangem.datasource.api.tangemTech.models.BindWalletsByReferralCodeBody
|
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.AppPreferencesStore
|
||||||
import com.tangem.datasource.local.preferences.utils.getObjectSyncOrNull
|
import com.tangem.datasource.local.preferences.utils.getObjectSyncOrNull
|
||||||
import com.tangem.datasource.local.preferences.utils.storeObject
|
import com.tangem.datasource.local.preferences.utils.storeObject
|
||||||
|
|
@ -21,6 +22,7 @@ internal class DefaultWalletsPromoRepository(
|
||||||
private val tangemTechApi: TangemTechApi,
|
private val tangemTechApi: TangemTechApi,
|
||||||
private val userWalletsListRepository: UserWalletsListRepository,
|
private val userWalletsListRepository: UserWalletsListRepository,
|
||||||
private val dispatchers: CoroutineDispatcherProvider,
|
private val dispatchers: CoroutineDispatcherProvider,
|
||||||
|
private val appsFlyerStore: AppsFlyerStore,
|
||||||
) : WalletsPromoRepository {
|
) : WalletsPromoRepository {
|
||||||
|
|
||||||
override suspend fun bindRefcodeWithWallets(conversionData: AppsFlyerConversionData) = withContext(dispatchers.io) {
|
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? {
|
private suspend fun getSavedBindingData(): ReferralWalletsBindingData? {
|
||||||
return appPreferencesStore.getObjectSyncOrNull(key = REFERRAL_WALLETS_BINDING_DATA_KEY)
|
return appPreferencesStore.getObjectSyncOrNull(key = REFERRAL_WALLETS_BINDING_DATA_KEY)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -76,12 +76,14 @@ internal object WalletsDataModule {
|
||||||
tangemTechApi: TangemTechApi,
|
tangemTechApi: TangemTechApi,
|
||||||
userWalletsListRepository: UserWalletsListRepository,
|
userWalletsListRepository: UserWalletsListRepository,
|
||||||
dispatchers: CoroutineDispatcherProvider,
|
dispatchers: CoroutineDispatcherProvider,
|
||||||
|
appsFlyerStore: AppsFlyerStore,
|
||||||
): WalletsPromoRepository {
|
): WalletsPromoRepository {
|
||||||
return DefaultWalletsPromoRepository(
|
return DefaultWalletsPromoRepository(
|
||||||
appPreferencesStore = appPreferencesStore,
|
appPreferencesStore = appPreferencesStore,
|
||||||
tangemTechApi = tangemTechApi,
|
tangemTechApi = tangemTechApi,
|
||||||
userWalletsListRepository = userWalletsListRepository,
|
userWalletsListRepository = userWalletsListRepository,
|
||||||
dispatchers = dispatchers,
|
dispatchers = dispatchers,
|
||||||
|
appsFlyerStore = appsFlyerStore,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,4 +7,6 @@ interface WalletsPromoRepository {
|
||||||
suspend fun bindRefcodeWithWallets(conversionData: AppsFlyerConversionData)
|
suspend fun bindRefcodeWithWallets(conversionData: AppsFlyerConversionData)
|
||||||
|
|
||||||
suspend fun retryBindRefcodeWithWallets()
|
suspend fun retryBindRefcodeWithWallets()
|
||||||
|
|
||||||
|
suspend fun getReferralCodeIfExists(): String?
|
||||||
}
|
}
|
||||||
|
|
@ -1,18 +1,23 @@
|
||||||
package com.tangem.domain.wallets.usecase
|
package com.tangem.domain.wallets.usecase
|
||||||
|
|
||||||
import com.tangem.common.TangemSiteUrlBuilder
|
import com.tangem.common.TangemSiteUrlBuilder
|
||||||
|
import com.tangem.domain.wallets.repository.WalletsPromoRepository
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
class GenerateBuyTangemCardLinkUseCase {
|
class GenerateBuyTangemCardLinkUseCase(
|
||||||
|
private val walletsPromoRepository: WalletsPromoRepository,
|
||||||
|
) {
|
||||||
|
|
||||||
suspend operator fun invoke(source: Source): String {
|
suspend operator fun invoke(source: Source): String {
|
||||||
return invoke(source.utmCampaign)
|
return invoke(source.utmCampaign)
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend operator fun invoke(utmCampaign: String?): String {
|
suspend operator fun invoke(utmCampaign: String?): String {
|
||||||
|
val refCode = walletsPromoRepository.getReferralCodeIfExists()
|
||||||
|
val refCodeTag = TangemSiteUrlBuilder.getRefCodeTag(refCode)
|
||||||
val langCode = Locale.getDefault().language
|
val langCode = Locale.getDefault().language
|
||||||
val utmTags = TangemSiteUrlBuilder.getUtmTags(utmCampaign)
|
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) {
|
enum class Source(val utmCampaign: String) {
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ dependencies {
|
||||||
implementation(projects.core.analytics.models)
|
implementation(projects.core.analytics.models)
|
||||||
implementation(projects.common.routing)
|
implementation(projects.common.routing)
|
||||||
implementation(projects.common.ui)
|
implementation(projects.common.ui)
|
||||||
|
implementation(projects.core.datasource)
|
||||||
|
|
||||||
/* Project - Domain */
|
/* Project - Domain */
|
||||||
implementation(projects.domain.models)
|
implementation(projects.domain.models)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue