From 865bf0815786fafb0b38bbe34812ef2e54af29bc Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 13 Feb 2023 16:31:30 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../datasource/config/ConfigManagerImpl.kt | 1 + .../tangem/datasource/config/models/Config.kt | 1 + .../datasource/config/models/JsonModels.kt | 6 ++++++ .../tangem/feature/swap/SwapRepositoryImpl.kt | 18 +++++++++++++----- .../swap/converters/ApproveConverter.kt | 3 +-- .../feature/swap/converters/QuotesConverter.kt | 5 ++--- .../feature/swap/converters/SwapConverter.kt | 5 ++--- .../feature/swap/converters/TokensConverter.kt | 3 +-- .../tangem/feature/swap/di/SwapDataModule.kt | 15 +++------------ .../feature/swap/domain/SwapRepository.kt | 8 +++++++- 10 files changed, 37 insertions(+), 28 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt b/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt index f0ef4a65fc..3ed88cef06 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt @@ -97,6 +97,7 @@ internal class ConfigManagerImpl @Inject constructor() : ConfigManager { shopify = configValues.shopifyShop, zendesk = configValues.zendesk, saltPayConfig = configValues.saltPay, + swapReferrerAccount = configValues.swapReferrerAccount, ) } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt b/core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt index 775e228d34..8cc70ca0a5 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt @@ -18,4 +18,5 @@ data class Config( val shopify: ShopifyShop? = null, val zendesk: ZendeskConfig? = null, val saltPayConfig: SaltPayConfig? = null, + val swapReferrerAccount: SwapReferrerAccount? = null, ) \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/config/models/JsonModels.kt b/core/datasource/src/main/java/com/tangem/datasource/config/models/JsonModels.kt index 88268d02de..7bfabdebf1 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/config/models/JsonModels.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/models/JsonModels.kt @@ -34,6 +34,7 @@ class ConfigValueModel( val saltPay: SaltPayConfig, val tronGridApiKey: String, val amplitudeApiKey: String, + val swapReferrerAccount: SwapReferrerAccount?, ) data class AppsFlyer( @@ -41,6 +42,11 @@ data class AppsFlyer( val appsFlyerAppID: String, ) +data class SwapReferrerAccount( + val address: String, + val fee: String, +) + class ConfigModel( val features: FeatureModel?, val configValues: ConfigValueModel?, diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/SwapRepositoryImpl.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/SwapRepositoryImpl.kt index 9f12a6dcad..199838f94c 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/SwapRepositoryImpl.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/SwapRepositoryImpl.kt @@ -5,6 +5,7 @@ import com.tangem.datasource.api.oneinch.OneInchApiFactory import com.tangem.datasource.api.oneinch.OneInchErrorsHandler import com.tangem.datasource.api.oneinch.errors.OneIncResponseException import com.tangem.datasource.api.tangemTech.TangemTechApi +import com.tangem.datasource.config.ConfigManager import com.tangem.feature.swap.converters.ApproveConverter import com.tangem.feature.swap.converters.QuotesConverter import com.tangem.feature.swap.converters.SwapConverter @@ -20,18 +21,19 @@ import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.withContext import javax.inject.Inject -@Suppress("LongParameterList") internal class SwapRepositoryImpl @Inject constructor( private val tangemTechApi: TangemTechApi, private val oneInchApiFactory: OneInchApiFactory, - private val tokensConverter: TokensConverter, - private val quotesConverter: QuotesConverter, - private val swapConverter: SwapConverter, - private val approveConverter: ApproveConverter, private val oneInchErrorsHandler: OneInchErrorsHandler, private val coroutineDispatcher: CoroutineDispatcherProvider, + private val configManager: ConfigManager, ) : SwapRepository { + private val tokensConverter = TokensConverter() + private val quotesConverter = QuotesConverter() + private val swapConverter = SwapConverter() + private val approveConverter = ApproveConverter() + override suspend fun getRates(currencyId: String, tokenIds: List): Map { return withContext(coroutineDispatcher.io) { tangemTechApi.getRates(currencyId.lowercase(), tokenIds.joinToString(",")).rates @@ -115,6 +117,8 @@ internal class SwapRepositoryImpl @Inject constructor( amount = amount, fromAddress = fromWalletAddress, slippage = slippage, + referrerAddress = configManager.config.swapReferrerAccount?.address, + fee = configManager.config.swapReferrerAccount?.fee, ), ) @@ -125,6 +129,10 @@ internal class SwapRepositoryImpl @Inject constructor( } } + override fun getTangemFee(): Double { + return configManager.config.swapReferrerAccount?.fee?.toDoubleOrNull() ?: 0.0 + } + private fun getOneInchApi(networkId: String): OneInchApi { return oneInchApiFactory.getApi(networkId) } diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ApproveConverter.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ApproveConverter.kt index 758763e942..b281f8df49 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ApproveConverter.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ApproveConverter.kt @@ -3,9 +3,8 @@ package com.tangem.feature.swap.converters import com.tangem.datasource.api.oneinch.models.ApproveCalldataResponse import com.tangem.feature.swap.domain.models.domain.ApproveModel import com.tangem.utils.converter.Converter -import javax.inject.Inject -class ApproveConverter @Inject constructor() : Converter { +class ApproveConverter : Converter { override fun convert(value: ApproveCalldataResponse): ApproveModel { return ApproveModel( diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/QuotesConverter.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/QuotesConverter.kt index b867bb47cf..f0f9160171 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/QuotesConverter.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/QuotesConverter.kt @@ -1,12 +1,11 @@ package com.tangem.feature.swap.converters import com.tangem.datasource.api.oneinch.models.QuoteResponse -import com.tangem.feature.swap.domain.models.domain.QuoteModel import com.tangem.feature.swap.domain.models.createFromAmountWithOffset +import com.tangem.feature.swap.domain.models.domain.QuoteModel import com.tangem.utils.converter.Converter -import javax.inject.Inject -class QuotesConverter @Inject constructor() : Converter { +class QuotesConverter : Converter { override fun convert(value: QuoteResponse): QuoteModel { return QuoteModel( diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapConverter.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapConverter.kt index b580b090af..c441455fb7 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapConverter.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/SwapConverter.kt @@ -2,13 +2,12 @@ package com.tangem.feature.swap.converters import com.tangem.datasource.api.oneinch.models.SwapResponse import com.tangem.datasource.api.oneinch.models.TransactionDto +import com.tangem.feature.swap.domain.models.createFromAmountWithOffset import com.tangem.feature.swap.domain.models.domain.SwapDataModel import com.tangem.feature.swap.domain.models.domain.TransactionModel -import com.tangem.feature.swap.domain.models.createFromAmountWithOffset import com.tangem.utils.converter.Converter -import javax.inject.Inject -class SwapConverter @Inject constructor() : Converter { +class SwapConverter : Converter { override fun convert(value: SwapResponse): SwapDataModel { return SwapDataModel( diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/TokensConverter.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/TokensConverter.kt index a35f348ab4..b5f5743fe3 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/TokensConverter.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/TokensConverter.kt @@ -3,9 +3,8 @@ package com.tangem.feature.swap.converters import com.tangem.datasource.api.tangemTech.models.CoinsResponse import com.tangem.feature.swap.domain.models.domain.Currency import com.tangem.utils.converter.Converter -import javax.inject.Inject -class TokensConverter @Inject constructor() : Converter { +class TokensConverter : Converter { override fun convert(value: CoinsResponse.Coin): Currency { val network = value.networks.first() diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/di/SwapDataModule.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/di/SwapDataModule.kt index 6cc1d6c846..bdb28d8007 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/di/SwapDataModule.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/di/SwapDataModule.kt @@ -3,11 +3,8 @@ package com.tangem.feature.swap.di import com.tangem.datasource.api.oneinch.OneInchApiFactory import com.tangem.datasource.api.oneinch.OneInchErrorsHandler import com.tangem.datasource.api.tangemTech.TangemTechApi +import com.tangem.datasource.config.ConfigManager import com.tangem.feature.swap.SwapRepositoryImpl -import com.tangem.feature.swap.converters.ApproveConverter -import com.tangem.feature.swap.converters.QuotesConverter -import com.tangem.feature.swap.converters.SwapConverter -import com.tangem.feature.swap.converters.TokensConverter import com.tangem.feature.swap.domain.SwapRepository import com.tangem.utils.coroutines.CoroutineDispatcherProvider import dagger.Module @@ -25,22 +22,16 @@ class SwapDataModule { fun provideSwapRepository( tangemTechApi: TangemTechApi, oneInchApiFactory: OneInchApiFactory, - tokensConverter: TokensConverter, - quotesConverter: QuotesConverter, - swapConverter: SwapConverter, - approveConverter: ApproveConverter, oneInchErrorsHandler: OneInchErrorsHandler, coroutineDispatcher: CoroutineDispatcherProvider, + configManager: ConfigManager, ): SwapRepository { return SwapRepositoryImpl( tangemTechApi = tangemTechApi, oneInchApiFactory = oneInchApiFactory, - tokensConverter = tokensConverter, - quotesConverter = quotesConverter, - swapConverter = swapConverter, - approveConverter = approveConverter, oneInchErrorsHandler = oneInchErrorsHandler, coroutineDispatcher = coroutineDispatcher, + configManager = configManager, ) } } \ No newline at end of file diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapRepository.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapRepository.kt index 1f882537f6..932a45fd4e 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapRepository.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapRepository.kt @@ -1,10 +1,10 @@ package com.tangem.feature.swap.domain +import com.tangem.feature.swap.domain.models.data.AggregatedSwapDataModel import com.tangem.feature.swap.domain.models.domain.ApproveModel import com.tangem.feature.swap.domain.models.domain.Currency import com.tangem.feature.swap.domain.models.domain.QuoteModel import com.tangem.feature.swap.domain.models.domain.SwapDataModel -import com.tangem.feature.swap.domain.models.data.AggregatedSwapDataModel interface SwapRepository { @@ -61,4 +61,10 @@ interface SwapRepository { fromWalletAddress: String, slippage: Int, ): AggregatedSwapDataModel + + /** + * Returns a tangem fee for swap in percents + * Example: 0.35% + */ + fun getTangemFee(): Double } \ No newline at end of file