From 470fc8c140b964252c164737b53839e34a11c518 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 22 May 2026 14:13:47 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../api/express/TangemExpressApi.kt | 7 ++ .../response/ExchangeHistoryResponse.kt | 85 ++++++++++++++++++ .../tangem/datasource/api/onramp/OnrampApi.kt | 8 ++ .../models/response/OnrampHistoryResponse.kt | 87 +++++++++++++++++++ .../api/tangemTech/TangemTechApi.kt | 6 +- 5 files changed, 190 insertions(+), 3 deletions(-) create mode 100644 core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeHistoryResponse.kt create mode 100644 core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampHistoryResponse.kt diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/TangemExpressApi.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/TangemExpressApi.kt index 04f464e255..6fc2710fcf 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/TangemExpressApi.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/TangemExpressApi.kt @@ -86,4 +86,11 @@ interface TangemExpressApi { @Header("refcode") refCode: String?, @Body body: ExchangeSentRequestBody, ): ApiResponse + + @GET("exchange/history") + suspend fun getHistory( + @Query("wallet_address") walletAddress: String, + @Query("cursor") cursor: String?, + @Query("limit") limit: Int = 100, + ): ApiResponse } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeHistoryResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeHistoryResponse.kt new file mode 100644 index 0000000000..3403faf8c7 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeHistoryResponse.kt @@ -0,0 +1,85 @@ +package com.tangem.datasource.api.express.models.response + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class ExchangeHistoryResponse( + @Json(name = "data") + val data: List, + @Json(name = "next_cursor") + val nextCursor: String, + @Json(name = "has_more") + val hasMore: Boolean, +) { + + @JsonClass(generateAdapter = true) + data class ExchangeRecord( + @Json(name = "tx_id") + val txId: String, + @Json(name = "status") + val status: String, + @Json(name = "provider") + val provider: Provider, + @Json(name = "from") + val from: AssetRef, + @Json(name = "to") + val to: AssetRef, + @Json(name = "payin_hash") + val payinHash: String?, + @Json(name = "payout_hash") + val payoutHash: String?, + @Json(name = "external_tx_id") + val externalTxId: String?, + @Json(name = "external_tx_url") + val externalTxUrl: String?, + @Json(name = "refund") + val refund: RefundInfo?, + @Json(name = "rate_type") + val rateType: String, + @Json(name = "created_at") + val createdAt: Long, + @Json(name = "updated_at") + val updatedAt: Long, + ) + + @JsonClass(generateAdapter = true) + data class Provider( + @Json(name = "id") + val id: String, + @Json(name = "name") + val name: String, + @Json(name = "icon_url") + val iconUrl: String, + @Json(name = "provider_url") + val providerUrl: String, + ) + + @JsonClass(generateAdapter = true) + data class AssetRef( + @Json(name = "network") + val network: String, + @Json(name = "token_id") + val tokenId: String?, + @Json(name = "raw_amount") + val rawAmount: String, + @Json(name = "decimals") + val decimals: Int, + @Json(name = "is_actual") + val isActual: Boolean?, + ) + + @JsonClass(generateAdapter = true) + data class RefundInfo( + @Json(name = "network") + val network: String, + @Json(name = "token_id") + val tokenId: String?, + @Json(name = "raw_amount") + val rawAmount: String, + @Json(name = "decimals") + val decimals: Int, + @Json(name = "hash") + val hash: String?, + ) +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/onramp/OnrampApi.kt b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/OnrampApi.kt index 01d636242a..c3592a8a9b 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/onramp/OnrampApi.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/OnrampApi.kt @@ -3,6 +3,7 @@ package com.tangem.datasource.api.onramp import com.tangem.datasource.api.common.response.ApiResponse import com.tangem.datasource.api.onramp.models.request.OnrampPairsRequest import com.tangem.datasource.api.onramp.models.response.OnrampDataResponse +import com.tangem.datasource.api.onramp.models.response.OnrampHistoryResponse import com.tangem.datasource.api.onramp.models.response.OnrampQuoteResponse import com.tangem.datasource.api.onramp.models.response.OnrampStatusResponse import com.tangem.datasource.api.onramp.models.response.model.OnrampCountryDTO @@ -86,4 +87,11 @@ interface OnrampApi { @Header("refcode") refCode: String?, @Query("txId") txId: String, ): ApiResponse + + @GET("onramp/history") + suspend fun getHistory( + @Query("wallet_address") walletAddress: String, + @Query("cursor") cursor: String?, + @Query("limit") limit: Int = 100, + ): ApiResponse } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampHistoryResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampHistoryResponse.kt new file mode 100644 index 0000000000..1b92aeed9c --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampHistoryResponse.kt @@ -0,0 +1,87 @@ +package com.tangem.datasource.api.onramp.models.response + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class OnrampHistoryResponse( + @Json(name = "data") + val data: List, + @Json(name = "next_cursor") + val nextCursor: String, + @Json(name = "has_more") + val hasMore: Boolean, +) { + + @JsonClass(generateAdapter = true) + data class OnrampRecord( + @Json(name = "tx_id") + val txId: String, + @Json(name = "status") + val status: String, + @Json(name = "provider") + val provider: Provider, + @Json(name = "from") + val from: FiatRef, + @Json(name = "to") + val to: OnrampAssetRef, + @Json(name = "payout_hash") + val payoutHash: String?, + @Json(name = "external_tx_id") + val externalTxId: String?, + @Json(name = "external_tx_url") + val externalTxUrl: String?, + @Json(name = "refund") + val refund: OnrampRefundInfo?, + @Json(name = "rate_type") + val rateType: String, + @Json(name = "fail_reason") + val failReason: String?, + @Json(name = "created_at") + val createdAt: Long, + @Json(name = "updated_at") + val updatedAt: Long, + ) + + @JsonClass(generateAdapter = true) + data class Provider( + @Json(name = "id") + val id: String, + @Json(name = "name") + val name: String, + @Json(name = "icon_url") + val iconUrl: String, + @Json(name = "provider_url") + val providerUrl: String, + ) + + @JsonClass(generateAdapter = true) + data class FiatRef( + @Json(name = "currency_code") + val currencyCode: String, + @Json(name = "amount") + val amount: String, + ) + + @JsonClass(generateAdapter = true) + data class OnrampAssetRef( + @Json(name = "network") + val network: String, + @Json(name = "token_id") + val tokenId: String?, + @Json(name = "expected_raw_amount") + val expectedRawAmount: String, + @Json(name = "actual_raw_amount") + val actualRawAmount: String?, + @Json(name = "decimals") + val decimals: Int, + ) + + @JsonClass(generateAdapter = true) + data class OnrampRefundInfo( + @Json(name = "currency_code") + val currencyCode: String, + @Json(name = "amount") + val amount: String, + ) +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt index 32d08ffdaf..a1ddf4934c 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/tangemTech/TangemTechApi.kt @@ -3,12 +3,12 @@ package com.tangem.datasource.api.tangemTech import com.tangem.datasource.api.common.response.ApiResponse import com.tangem.datasource.api.stories.models.StoryContentResponse import com.tangem.datasource.api.tangemTech.models.* -import com.tangem.datasource.api.tangemTech.models.promobanners.PromoBannerDisplaysResponse -import com.tangem.datasource.api.tangemTech.models.promobanners.DismissPromoBannerRequest -import com.tangem.datasource.api.tangemTech.models.promobanners.DismissPromoBannerResponse import com.tangem.datasource.api.tangemTech.models.account.GetWalletAccountsResponse import com.tangem.datasource.api.tangemTech.models.account.GetWalletArchivedAccountsResponse import com.tangem.datasource.api.tangemTech.models.account.SaveWalletAccountsResponse +import com.tangem.datasource.api.tangemTech.models.promobanners.DismissPromoBannerRequest +import com.tangem.datasource.api.tangemTech.models.promobanners.DismissPromoBannerResponse +import com.tangem.datasource.api.tangemTech.models.promobanners.PromoBannerDisplaysResponse import com.tangem.datasource.api.utils.ReadTimeout import com.tangem.datasource.local.config.providers.models.ProviderModel import retrofit2.http.*