From 8261e72fec50d9ab804948b58c1936c571a9258d Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 8 Dec 2022 16:58:37 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../java/com/tangem/tap/TapApplication.kt | 2 +- .../tap/common/extensions/Navigation.kt | 3 +- core/datasource/build.gradle.kts | 2 + .../tangem/datasource/api/common}/Adapters.kt | 2 +- .../api/tangemTech/TangemTechService.kt | 3 +- .../com/tangem/datasource/di/NetworkModule.kt | 10 ++- features/swap/data/build.gradle.kts | 2 + .../tangem/feature/swap/SwapRepositoryImpl.kt | 13 ++-- .../swap/converters/ApproveConverter.kt | 2 +- .../swap/converters/QuotesConverter.kt | 5 +- .../feature/swap/converters/SwapConverter.kt | 28 +++++--- .../swap/converters/TokensConverter.kt | 15 ++++- .../tangem/feature/swap/di/SwapDataModule.kt | 44 +++++++++++++ .../feature/swap/domain/SwapInteractor.kt | 16 +++++ .../feature/swap/domain/SwapInteractorImpl.kt | 65 +++++++++++++++++++ .../feature/swap/domain/SwapRepository.kt | 11 ++-- .../swap/domain/models/SwapDataHolder.kt | 8 +++ .../swap/domain/models/SwapResultModel.kt | 14 ++++ .../domain/models/{ => data}/ApproveModel.kt | 2 +- .../swap/domain/models/{ => data}/Currency.kt | 2 +- .../domain/models/{ => data}/QuoteModel.kt | 2 +- .../swap/domain/models/data/SwapDataModel.kt | 17 +++++ .../TransactionModel.kt} | 15 +---- features/swap/presentation/build.gradle.kts | 1 + .../feature/swap/presentation/SwapFragment.kt | 33 ++++++++++ 25 files changed, 269 insertions(+), 48 deletions(-) rename {app/src/main/java/com/tangem/tap/common/moshi => core/datasource/src/main/java/com/tangem/datasource/api/common}/Adapters.kt (87%) create mode 100644 features/swap/data/src/main/java/com/tangem/feature/swap/di/SwapDataModule.kt create mode 100644 features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt create mode 100644 features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/SwapDataHolder.kt create mode 100644 features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/SwapResultModel.kt rename features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/{ => data}/ApproveModel.kt (88%) rename features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/{ => data}/Currency.kt (93%) rename features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/{ => data}/QuoteModel.kt (69%) create mode 100644 features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/SwapDataModel.kt rename features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/{SwapTransactionModel.kt => data/TransactionModel.kt} (57%) create mode 100644 features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index d17e83bd33..b3bc0a111a 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -11,6 +11,7 @@ import com.tangem.blockchain.common.BlockchainSdkConfig import com.tangem.blockchain.common.WalletManagerFactory import com.tangem.blockchain.network.BlockchainSdkRetrofitBuilder import com.tangem.common.json.MoshiJsonConverter +import com.tangem.datasource.api.common.BigDecimalAdapter import com.tangem.datasource.api.common.MoshiConverter import com.tangem.domain.DomainLayer import com.tangem.domain.common.LogConfig @@ -29,7 +30,6 @@ import com.tangem.tap.common.feedback.AdditionalFeedbackInfo import com.tangem.tap.common.feedback.FeedbackManager import com.tangem.tap.common.images.createCoilImageLoader import com.tangem.tap.common.log.TangemLogCollector -import com.tangem.tap.common.moshi.BigDecimalAdapter import com.tangem.tap.common.redux.AppState import com.tangem.tap.common.redux.appReducer import com.tangem.tap.common.redux.global.GlobalAction diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt b/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt index 3abbbac6d1..1d78d19e09 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt @@ -7,6 +7,7 @@ import androidx.fragment.app.FragmentActivity import androidx.fragment.app.FragmentManager import com.tangem.common.extensions.VoidCallback import com.tangem.feature.referral.ReferralFragment +import com.tangem.feature.swap.presentation.SwapFragment import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.FragmentShareTransition import com.tangem.tap.features.details.ui.appsettings.AppSettingsFragment @@ -105,7 +106,7 @@ private fun fragmentFactory(screen: AppScreen): Fragment { AppScreen.OnboardingOther -> OnboardingOtherCardsFragment() AppScreen.Wallet -> WalletFragment() AppScreen.Send -> SendFragment() - AppScreen.Details -> DetailsFragment() + AppScreen.Details -> SwapFragment()//DetailsFragment() AppScreen.DetailsSecurity -> SecurityModeFragment() AppScreen.CardSettings -> CardSettingsFragment() AppScreen.AppSettings -> AppSettingsFragment() diff --git a/core/datasource/build.gradle.kts b/core/datasource/build.gradle.kts index 082885c1d7..67563bfbb8 100644 --- a/core/datasource/build.gradle.kts +++ b/core/datasource/build.gradle.kts @@ -63,6 +63,8 @@ dependencies { implementation(Library.okHttp) implementation(Library.okHttpLogging) + kapt("com.squareup.moshi:moshi-kotlin-codegen:1.14.0") + /** Time */ implementation(Library.jodatime) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/moshi/Adapters.kt b/core/datasource/src/main/java/com/tangem/datasource/api/common/Adapters.kt similarity index 87% rename from app/src/main/java/com/tangem/tap/common/moshi/Adapters.kt rename to core/datasource/src/main/java/com/tangem/datasource/api/common/Adapters.kt index c0ec09ea9c..568b042179 100644 --- a/app/src/main/java/com/tangem/tap/common/moshi/Adapters.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/common/Adapters.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.common.moshi +package com.tangem.datasource.api.common import com.squareup.moshi.FromJson import com.squareup.moshi.ToJson diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechService.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechService.kt index 50540a226e..00638342fc 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechService.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechService.kt @@ -15,7 +15,8 @@ class TangemTechService( private val logIsEnabled: Boolean = false, ) { - private val headerInterceptors = mutableListOf( + private val + headerInterceptors = mutableListOf( CacheControlHttpInterceptor(cacheMaxAge), ) diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt index d662a98721..c53b453f1b 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/di/NetworkModule.kt @@ -3,6 +3,7 @@ package com.tangem.datasource.di import com.squareup.moshi.Moshi import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory import com.tangem.datasource.api.AuthHeaderInterceptor +import com.tangem.datasource.api.common.BigDecimalAdapter import com.tangem.datasource.api.oneinch.OneInchApi import com.tangem.datasource.api.referral.ReferralApi import com.tangem.datasource.api.tangemTech.TangemTechApi @@ -27,7 +28,12 @@ class NetworkModule { fun provideTangemTechApi(okHttpClient: OkHttpClient): TangemTechApi { return Retrofit.Builder() .addConverterFactory( - MoshiConverterFactory.create(), + MoshiConverterFactory.create( + Moshi.Builder() + .add(KotlinJsonAdapterFactory()) + .add(BigDecimalAdapter()) + .build(), + ), ) .baseUrl(DEV_TANGEM_TECH_BASE_URL) .client(okHttpClient) @@ -80,6 +86,6 @@ class NetworkModule { private companion object { const val PROD_TANGEM_TECH_BASE_URL = "https://api.tangem-tech.com/v1/" const val DEV_TANGEM_TECH_BASE_URL = "https://devapi.tangem-tech.com/v1/" - const val ONE_INCH_ETHER_BASE_URL = "" + const val ONE_INCH_ETHER_BASE_URL = "https://api.1inch.io/swagger/ethereum-json/" } } \ No newline at end of file diff --git a/features/swap/data/build.gradle.kts b/features/swap/data/build.gradle.kts index 298948e089..fff5731bd3 100644 --- a/features/swap/data/build.gradle.kts +++ b/features/swap/data/build.gradle.kts @@ -31,6 +31,8 @@ dependencies { implementation(project(":core:utils")) implementation(project(":features:swap:domain")) + kapt("com.squareup.moshi:moshi-kotlin-codegen:1.14.0") + /** DI */ implementation(Library.hilt) kapt(Library.hiltKapt) 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 2095876a1b..5424e1fd3d 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 @@ -7,9 +7,10 @@ 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.feature.swap.domain.models.ApproveModel -import com.tangem.feature.swap.domain.models.Currency -import com.tangem.feature.swap.domain.models.QuoteModel +import com.tangem.feature.swap.domain.models.data.ApproveModel +import com.tangem.feature.swap.domain.models.data.Currency +import com.tangem.feature.swap.domain.models.data.QuoteModel +import com.tangem.feature.swap.domain.models.data.SwapDataModel import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.withContext import javax.inject.Inject @@ -64,16 +65,16 @@ class SwapRepositoryImpl @Inject constructor( fromTokenAddress: String, toTokenAddress: String, amount: String, - fromAddress: String, + fromWalletAddress: String, slippage: Int, - ) { + ): SwapDataModel { return withContext(coroutineDispatcher.io) { swapConverter.convert( oneInchApi.swap( fromTokenAddress = fromTokenAddress, toTokenAddress = toTokenAddress, amount = amount, - fromAddress = fromAddress, + fromAddress = fromWalletAddress, slippage = slippage, ), ) 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 4d3574869d..c5d5d0e600 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 @@ -1,7 +1,7 @@ package com.tangem.feature.swap.converters import com.tangem.datasource.api.oneinch.models.ApproveCalldataResponse -import com.tangem.feature.swap.domain.models.ApproveModel +import com.tangem.feature.swap.domain.models.data.ApproveModel import com.tangem.utils.converter.Converter import javax.inject.Inject 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 52723c6596..058a6a6159 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,10 +1,11 @@ package com.tangem.feature.swap.converters import com.tangem.datasource.api.oneinch.models.QuoteResponse -import com.tangem.feature.swap.domain.models.QuoteModel +import com.tangem.feature.swap.domain.models.data.QuoteModel import com.tangem.utils.converter.Converter +import javax.inject.Inject -class QuotesConverter : Converter { +class QuotesConverter @Inject constructor(): 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 244ae4f2a0..87dec263da 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 @@ -1,24 +1,32 @@ package com.tangem.feature.swap.converters import com.tangem.datasource.api.oneinch.models.SwapResponse -import com.tangem.feature.swap.domain.models.SwapTransactionModel +import com.tangem.datasource.api.oneinch.models.TransactionDto +import com.tangem.feature.swap.domain.models.data.SwapDataModel +import com.tangem.feature.swap.domain.models.data.TransactionModel import com.tangem.utils.converter.Converter import javax.inject.Inject -class SwapConverter @Inject constructor() : Converter { +class SwapConverter @Inject constructor() : Converter { - override fun convert(value: SwapResponse): SwapTransactionModel { - return SwapTransactionModel( + override fun convert(value: SwapResponse): SwapDataModel { + return SwapDataModel( fromTokenAddress = value.fromToken.address, toTokenAddress = value.toToken.address, toTokenAmount = value.fromTokenAmount, fromTokenAmount = value.toTokenAmount, - fromWalletAddress = value.transaction.fromAddress, - toWalletAddress = value.transaction.toAddress, - data = value.transaction.data, - value = value.transaction.value, - gasPrice = value.transaction.gasPrice, - gas = value.transaction.gas, + transaction = convertTransaction(value.transaction), + ) + } + + private fun convertTransaction(transactionDto: TransactionDto): TransactionModel { + return TransactionModel( + fromWalletAddress = transactionDto.fromAddress, + toWalletAddress = transactionDto.toAddress, + data = transactionDto.data, + value = transactionDto.value, + gasPrice = transactionDto.gasPrice, + gas = transactionDto.gas, ) } } \ No newline at end of file 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 c5414d666c..11596db8bc 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 @@ -1,7 +1,7 @@ package com.tangem.feature.swap.converters import com.tangem.datasource.api.tangemTech.CoinsResponse -import com.tangem.feature.swap.domain.models.Currency +import com.tangem.feature.swap.domain.models.data.Currency import com.tangem.utils.converter.Converter import javax.inject.Inject @@ -17,7 +17,7 @@ class TokensConverter @Inject constructor() : Converter + + suspend fun getTokenBalance(): String + + suspend fun findBestQuote( + fromTokenAddress: String, + toTokenAddress: String, + amount: String, + ): QuoteModel + + suspend fun onSwap(): SwapResultModel } \ No newline at end of file diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt new file mode 100644 index 0000000000..b057ac50f8 --- /dev/null +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt @@ -0,0 +1,65 @@ +package com.tangem.feature.swap.domain + +import com.tangem.feature.swap.domain.models.SwapDataHolder +import com.tangem.feature.swap.domain.models.SwapResultModel +import com.tangem.feature.swap.domain.models.data.Currency +import com.tangem.feature.swap.domain.models.data.QuoteModel +import com.tangem.feature.swap.domain.models.data.TransactionModel + +//todo add @Inject after merge referral and add HiltCore +class SwapInteractorImpl( + private val repository: SwapRepository, +) : SwapInteractor { + + private var lastDataForSwap: SwapDataHolder? = null + + override suspend fun getTokensToSwap(networkId: String): List { + return repository.getExchangeableTokens(networkId) + } + + override suspend fun getTokenBalance(): String { + TODO("Not yet implemented") + } + + override suspend fun findBestQuote(fromTokenAddress: String, toTokenAddress: String, amount: String): QuoteModel { + repository.findBestQuote(fromTokenAddress, toTokenAddress, amount).let { + lastDataForSwap = SwapDataHolder(it, amount) + return it + } + } + + override suspend fun onSwap(): SwapResultModel { + val dataForSwap = lastDataForSwap + if (dataForSwap != null) { + val swapData = repository.prepareSwapTransaction( + fromTokenAddress = dataForSwap.quoteModel.fromTokenAmount, + toTokenAddress = dataForSwap.quoteModel.toTokenAmount, + amount = dataForSwap.amount, + slippage = DEFAULT_SLIPPAGE, + fromWalletAddress = getWalletAddress(), + ) + signTransactionData(swapData.transaction) //todo implement + return SwapResultModel.SwapSuccess( + dataForSwap.quoteModel.fromTokenAmount, + dataForSwap.quoteModel.toTokenAmount, + ) + } + return SwapResultModel.SwapError( + 0, + "", + ) + } + + //todo implement after merge referral + private fun getWalletAddress(): String { + return "" + } + + //todo implement after merge referral + private fun signTransactionData(transaction: TransactionModel) { + } + + companion object { + private const val DEFAULT_SLIPPAGE = 1 + } +} \ 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 963f87bfdb..cb2a2bf07a 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,8 +1,9 @@ package com.tangem.feature.swap.domain -import com.tangem.feature.swap.domain.models.ApproveModel -import com.tangem.feature.swap.domain.models.Currency -import com.tangem.feature.swap.domain.models.QuoteModel +import com.tangem.feature.swap.domain.models.data.ApproveModel +import com.tangem.feature.swap.domain.models.data.Currency +import com.tangem.feature.swap.domain.models.data.QuoteModel +import com.tangem.feature.swap.domain.models.data.SwapDataModel interface SwapRepository { @@ -46,7 +47,7 @@ interface SwapRepository { fromTokenAddress: String, toTokenAddress: String, amount: String, - fromAddress: String, + fromWalletAddress: String, slippage: Int, - ) + ): SwapDataModel } \ No newline at end of file diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/SwapDataHolder.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/SwapDataHolder.kt new file mode 100644 index 0000000000..6216c6d4d5 --- /dev/null +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/SwapDataHolder.kt @@ -0,0 +1,8 @@ +package com.tangem.feature.swap.domain.models + +import com.tangem.feature.swap.domain.models.data.QuoteModel + +data class SwapDataHolder( + val quoteModel: QuoteModel, + val amount: String, +) \ No newline at end of file diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/SwapResultModel.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/SwapResultModel.kt new file mode 100644 index 0000000000..014fb40127 --- /dev/null +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/SwapResultModel.kt @@ -0,0 +1,14 @@ +package com.tangem.feature.swap.domain.models + +sealed interface SwapResultModel { + + data class SwapSuccess( + val fromTokenAmount: String, + val toTokenAmount: String, + ) : SwapResultModel + + data class SwapError( + val errorCode: Int, + val errorMessage: String, + ) : SwapResultModel +} \ No newline at end of file diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/ApproveModel.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/ApproveModel.kt similarity index 88% rename from features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/ApproveModel.kt rename to features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/ApproveModel.kt index 2fce5634f9..a553a8d4bf 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/ApproveModel.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/ApproveModel.kt @@ -1,4 +1,4 @@ -package com.tangem.feature.swap.domain.models +package com.tangem.feature.swap.domain.models.data /** * Approve model diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/Currency.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/Currency.kt similarity index 93% rename from features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/Currency.kt rename to features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/Currency.kt index 05fe0cad3b..cc69440af7 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/Currency.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/Currency.kt @@ -1,4 +1,4 @@ -package com.tangem.feature.swap.domain.models +package com.tangem.feature.swap.domain.models.data sealed class Currency( open val id: String, diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/QuoteModel.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/QuoteModel.kt similarity index 69% rename from features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/QuoteModel.kt rename to features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/QuoteModel.kt index e71378fd22..4402e296b1 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/QuoteModel.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/QuoteModel.kt @@ -1,4 +1,4 @@ -package com.tangem.feature.swap.domain.models +package com.tangem.feature.swap.domain.models.data data class QuoteModel( val fromTokenAmount: String, diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/SwapDataModel.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/SwapDataModel.kt new file mode 100644 index 0000000000..d7b70ca338 --- /dev/null +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/SwapDataModel.kt @@ -0,0 +1,17 @@ +package com.tangem.feature.swap.domain.models.data + +/** + * Swap transaction model + * + * @property fromTokenAddress token from which want to convert + * @property toTokenAddress token to want to convert + * @property toTokenAmount amount "target" token + * @property fromTokenAmount amount "initial" token + */ +data class SwapDataModel( + val fromTokenAddress: String, + val toTokenAddress: String, + val toTokenAmount: String, + val fromTokenAmount: String, + val transaction: TransactionModel +) \ No newline at end of file diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/SwapTransactionModel.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/TransactionModel.kt similarity index 57% rename from features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/SwapTransactionModel.kt rename to features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/TransactionModel.kt index f36d74eb61..978c7e5ec7 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/SwapTransactionModel.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/models/data/TransactionModel.kt @@ -1,25 +1,16 @@ -package com.tangem.feature.swap.domain.models +package com.tangem.feature.swap.domain.models.data /** - * Swap transaction model + * Transaction model * - * @property fromTokenAddress token from which want to convert - * @property toTokenAddress token to want to convert - * @property toTokenAmount amount "target" token - * @property fromTokenAmount amount "initial" token * @property fromWalletAddress wallet from address (transactions will be sent from this address) * @property toWalletAddress transactions will be sent to our(1inch) contract address * @property data The encoded data to call the approve method on the swapped token contract * @property value Native token value in WEI (for approve is always 0) * @property gasPrice maximum amount of gas for a swap default: 11500000; max: 11500000 * @property gas estimated amount of the gas limit, increase this value by 25% - * @constructor Create empty Swap transaction model */ -data class SwapTransactionModel( - val fromTokenAddress: String, - val toTokenAddress: String, - val toTokenAmount: String, - val fromTokenAmount: String, +data class TransactionModel( val fromWalletAddress: String, val toWalletAddress: String, val data: String, diff --git a/features/swap/presentation/build.gradle.kts b/features/swap/presentation/build.gradle.kts index 8eac586d41..034079a92e 100644 --- a/features/swap/presentation/build.gradle.kts +++ b/features/swap/presentation/build.gradle.kts @@ -49,6 +49,7 @@ dependencies { /** Domain */ implementation(project(":features:swap:domain")) + implementation(project(":features:swap:data"))//todo remove, only for test /** Other libraries */ implementation(Library.composeShimmer) diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt new file mode 100644 index 0000000000..6e5a23dd82 --- /dev/null +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/presentation/SwapFragment.kt @@ -0,0 +1,33 @@ +package com.tangem.feature.swap.presentation + +import android.os.Bundle +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import com.tangem.feature.swap.domain.SwapInteractorImpl +import com.tangem.feature.swap.domain.SwapRepository +import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import javax.inject.Inject + +@AndroidEntryPoint +class SwapFragment : Fragment() { + + @Inject + lateinit var swapRepository: SwapRepository + + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { + //test + val swapInteractor = SwapInteractorImpl(swapRepository) + + CoroutineScope(Dispatchers.IO).launch { + Log.d("test", swapInteractor.getTokensToSwap("ethereum").toString()) + } + + return super.onCreateView(inflater, container, savedInstanceState) + } +} \ No newline at end of file