Updated on 2026-08-14
This commit is contained in:
parent
407337ed00
commit
144876bd4b
12 changed files with 79 additions and 49 deletions
|
|
@ -24,6 +24,6 @@ interface PromotionApi {
|
|||
@POST("promotion/validate")
|
||||
suspend fun validate(@Body request: ValidateRequestBody): ValidateResponse
|
||||
|
||||
@GET("promotion/award")
|
||||
@POST("promotion/award")
|
||||
suspend fun requestAward(@Body request: AwardRequestBody): AwardResponse
|
||||
}
|
||||
|
|
@ -13,6 +13,6 @@ abstract class AbstractPromotionResponse {
|
|||
|
||||
data class Error(
|
||||
@Json(name = "code") val code: Int,
|
||||
@Json(name = "description") val description: String,
|
||||
@Json(name = "description") val message: String,
|
||||
)
|
||||
}
|
||||
|
|
@ -7,5 +7,6 @@ import com.squareup.moshi.Json
|
|||
*/
|
||||
data class AwardRequestBody(
|
||||
@Json(name = "walletId") val walletId: String,
|
||||
@Json(name = "address") val address: String,
|
||||
@Json(name = "programName") val programName: String,
|
||||
)
|
||||
|
|
@ -7,9 +7,9 @@ import com.squareup.moshi.Json
|
|||
*/
|
||||
data class PromotionInfoResponse(
|
||||
@Json(name = "status") val status: Status?,
|
||||
@Json(name = "awardForNewCard") val awardForNewCard: Float?,
|
||||
@Json(name = "awardForOldCard") val awardForOldCard: Float?,
|
||||
@Json(name = "awardPaymentToken") val awardPaymentToken: TokenInfo?,
|
||||
@Json(name = "awardForNewCard") val awardForNewCard: Double?,
|
||||
@Json(name = "awardForOldCard") val awardForOldCard: Double?,
|
||||
@Json(name = "awardPaymentToken") val awardPaymentToken: TokenData?,
|
||||
@Json(name = "error") override val error: Error? = null,
|
||||
) : AbstractPromotionResponse() {
|
||||
|
||||
|
|
@ -24,18 +24,13 @@ data class PromotionInfoResponse(
|
|||
FINISHED("finished"),
|
||||
}
|
||||
|
||||
data class TokenInfo(
|
||||
data class TokenData(
|
||||
@Json(name = "id") val id: String,
|
||||
@Json(name = "name") val name: String,
|
||||
@Json(name = "symbol") val symbol: String,
|
||||
@Json(name = "active") val active: Boolean,
|
||||
@Json(name = "networks") val networks: List<Network>,
|
||||
) {
|
||||
data class Network(
|
||||
@Json(name = "networkId") val networkId: String,
|
||||
@Json(name = "exchangeable") val exchangeable: Boolean,
|
||||
@Json(name = "contractAddress") val contractAddress: String,
|
||||
@Json(name = "decimalCount") val decimalCount: Int,
|
||||
)
|
||||
}
|
||||
@Json(name = "networkId") val networkId: String,
|
||||
@Json(name = "contractAddress") val contractAddress: String,
|
||||
@Json(name = "decimalCount") val decimalCount: Int,
|
||||
)
|
||||
}
|
||||
|
|
@ -4,10 +4,13 @@ import com.squareup.moshi.Moshi
|
|||
import com.tangem.datasource.api.paymentology.PaymentologyApi
|
||||
import com.tangem.datasource.api.promotion.PromotionApi
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.datasource.utils.LazyRequestHeader
|
||||
import com.tangem.datasource.utils.RequestHeader.*
|
||||
import com.tangem.datasource.utils.addHeaders
|
||||
import com.tangem.datasource.utils.addLazyHeaders
|
||||
import com.tangem.datasource.utils.allowLogging
|
||||
import com.tangem.lib.auth.AuthProvider
|
||||
import com.tangem.lib.auth.BuildConfig
|
||||
import com.tangem.lib.auth.LazyAuthProvider
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
|
|
@ -60,10 +63,10 @@ class NetworkModule {
|
|||
@Provides
|
||||
@Singleton
|
||||
@PromotionOneInch
|
||||
fun providePromotionOneInchApi(authProvider: AuthProvider, @NetworkMoshi moshi: Moshi): PromotionApi {
|
||||
fun providePromotionOneInchApi(authProvider: LazyAuthProvider, @NetworkMoshi moshi: Moshi): PromotionApi {
|
||||
val okClient = OkHttpClient.Builder()
|
||||
.addHeaders(
|
||||
AuthenticationHeader(authProvider),
|
||||
.addLazyHeaders(
|
||||
LazyRequestHeader.LazyAuthenticationHeader(authProvider),
|
||||
)
|
||||
.allowLogging()
|
||||
.callTimeout(API_ONE_INCH_TIMEOUT_MS, TimeUnit.MILLISECONDS)
|
||||
|
|
@ -77,7 +80,7 @@ class NetworkModule {
|
|||
private fun createBasePromotionRetrofit(okHttpClient: OkHttpClient, moshi: Moshi): PromotionApi {
|
||||
return Retrofit.Builder()
|
||||
.addConverterFactory(MoshiConverterFactory.create(moshi))
|
||||
.baseUrl(PROMOTION_BASE_URL)
|
||||
.baseUrl(if (BuildConfig.DEBUG) DEV_TANGEM_TECH_BASE_URL else PROD_TANGEM_TECH_BASE_URL)
|
||||
.client(okHttpClient)
|
||||
.build()
|
||||
.create(PromotionApi::class.java)
|
||||
|
|
@ -87,8 +90,6 @@ class NetworkModule {
|
|||
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 PROMOTION_BASE_URL = "https://tangem.com/v1/"
|
||||
|
||||
const val PAYMENTOLOGY_BASE_URL: String = "https://paymentologygate.oa.r.appspot.com/"
|
||||
const val API_ONE_INCH_TIMEOUT_MS = 5000L
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,20 @@ internal fun OkHttpClient.Builder.addHeaders(vararg requestHeaders: RequestHeade
|
|||
)
|
||||
}
|
||||
|
||||
internal fun OkHttpClient.Builder.addLazyHeaders(vararg requestHeaders: LazyRequestHeader): OkHttpClient.Builder {
|
||||
return addInterceptor(
|
||||
Interceptor { chain ->
|
||||
val request = chain.request().newBuilder().apply {
|
||||
requestHeaders
|
||||
.flatMap(LazyRequestHeader::values)
|
||||
.forEach { addHeader(it.first, it.second.invoke()) }
|
||||
}.build()
|
||||
|
||||
chain.proceed(request)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Extension for logging each [OkHttpClient] request
|
||||
*
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.tangem.datasource.utils
|
||||
|
||||
import com.tangem.lib.auth.AuthProvider
|
||||
import com.tangem.lib.auth.LazyAuthProvider
|
||||
|
||||
/**
|
||||
* Presentation of request header
|
||||
|
|
@ -15,7 +16,17 @@ sealed class RequestHeader(vararg pairs: Pair<String, String>) {
|
|||
object CacheControlHeader : RequestHeader("Cache-Control" to "max-age=600")
|
||||
|
||||
class AuthenticationHeader(authProvider: AuthProvider) : RequestHeader(
|
||||
"card_public_key" to authProvider.getCardPublicKey(),
|
||||
"card_id" to authProvider.getCardId(),
|
||||
"card_public_key" to authProvider.getCardPublicKey(),
|
||||
)
|
||||
}
|
||||
|
||||
sealed class LazyRequestHeader(vararg pairs: Pair<String, () -> String>) {
|
||||
|
||||
val values: List<Pair<String, () -> String>> = pairs.toList()
|
||||
|
||||
class LazyAuthenticationHeader(authProvider: LazyAuthProvider) : LazyRequestHeader(
|
||||
"card_id" to authProvider.getCardIdProvider(),
|
||||
"card_public_key" to authProvider.getCardPublicKeyProvider(),
|
||||
)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue