Updated on 2026-08-14
This commit is contained in:
parent
c27049f0ea
commit
865bf08157
10 changed files with 37 additions and 28 deletions
|
|
@ -97,6 +97,7 @@ internal class ConfigManagerImpl @Inject constructor() : ConfigManager {
|
|||
shopify = configValues.shopifyShop,
|
||||
zendesk = configValues.zendesk,
|
||||
saltPayConfig = configValues.saltPay,
|
||||
swapReferrerAccount = configValues.swapReferrerAccount,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -18,4 +18,5 @@ data class Config(
|
|||
val shopify: ShopifyShop? = null,
|
||||
val zendesk: ZendeskConfig? = null,
|
||||
val saltPayConfig: SaltPayConfig? = null,
|
||||
val swapReferrerAccount: SwapReferrerAccount? = null,
|
||||
)
|
||||
|
|
@ -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?,
|
||||
|
|
|
|||
|
|
@ -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<String>): Map<String, Double> {
|
||||
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)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<ApproveCalldataResponse, ApproveModel> {
|
||||
class ApproveConverter : Converter<ApproveCalldataResponse, ApproveModel> {
|
||||
|
||||
override fun convert(value: ApproveCalldataResponse): ApproveModel {
|
||||
return ApproveModel(
|
||||
|
|
|
|||
|
|
@ -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<QuoteResponse, QuoteModel> {
|
||||
class QuotesConverter : Converter<QuoteResponse, QuoteModel> {
|
||||
|
||||
override fun convert(value: QuoteResponse): QuoteModel {
|
||||
return QuoteModel(
|
||||
|
|
|
|||
|
|
@ -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<SwapResponse, SwapDataModel> {
|
||||
class SwapConverter : Converter<SwapResponse, SwapDataModel> {
|
||||
|
||||
override fun convert(value: SwapResponse): SwapDataModel {
|
||||
return SwapDataModel(
|
||||
|
|
|
|||
|
|
@ -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<CoinsResponse.Coin, Currency> {
|
||||
class TokensConverter : Converter<CoinsResponse.Coin, Currency> {
|
||||
|
||||
override fun convert(value: CoinsResponse.Coin): Currency {
|
||||
val network = value.networks.first()
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -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<SwapDataModel>
|
||||
|
||||
/**
|
||||
* Returns a tangem fee for swap in percents
|
||||
* Example: 0.35%
|
||||
*/
|
||||
fun getTangemFee(): Double
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue