Updated on 2026-08-14

This commit is contained in:
Tangem 2023-01-10 18:09:17 +04:00
parent e8d727212b
commit dda12556d8
9 changed files with 72 additions and 98 deletions

View file

@ -1,22 +0,0 @@
package com.tangem.datasource.api.referral
import com.tangem.datasource.api.referral.models.ReferralResponse
import com.tangem.datasource.api.referral.models.StartReferralBody
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Path
/**
* Api for referral feature
*/
interface ReferralApi {
/** Returns referral status by [walletId] */
@GET("referral/{walletId}")
suspend fun getReferralStatus(@Path("walletId") walletId: String): ReferralResponse
/** Make user referral, requires [StartReferralBody] */
@POST("referral")
suspend fun startReferral(@Body startReferralBody: StartReferralBody): ReferralResponse
}

View file

@ -1,46 +0,0 @@
package com.tangem.datasource.api.referral.models
import com.squareup.moshi.Json
/**
* Main response class for referral API
* contains all necessary info about users program status
*/
data class ReferralResponse(
@Json(name = "conditions") val conditions: Conditions,
@Json(name = "referral") val referral: Referral?,
)
data class Conditions(
@Json(name = "award") val award: Int,
@Json(name = "discount") val discount: Discount,
@Json(name = "awards") val awards: List<Award>,
@Json(name = "tosLink") val tosLink: String,
)
data class Discount(
@Json(name = "amount") val amount: Int,
@Json(name = "type") val discountType: String,
)
data class Award(
@Json(name = "amount") val amount: Int,
@Json(name = "token") val token: Token,
)
data class Token(
@Json(name = "id") val id: String,
@Json(name = "name") val name: String,
@Json(name = "symbol") val symbol: String,
@Json(name = "networkId") val networkId: String,
@Json(name = "contractAddress") val contractAddress: String?,
@Json(name = "decimalCount") val decimalCount: Int?,
)
data class Referral(
@Json(name = "shareLink") val shareLink: String,
@Json(name = "address") val address: String,
@Json(name = "promoCode") val promocode: String,
@Json(name = "walletsPurchased") val walletsPurchased: Int,
@Json(name = "termsAcceptedAt") val termsAcceptedAt: String?,
)

View file

@ -4,9 +4,12 @@ import com.tangem.datasource.api.tangemTech.models.CoinsResponse
import com.tangem.datasource.api.tangemTech.models.CurrenciesResponse
import com.tangem.datasource.api.tangemTech.models.GeoResponse
import com.tangem.datasource.api.tangemTech.models.RatesResponse
import com.tangem.datasource.api.tangemTech.models.ReferralResponse
import com.tangem.datasource.api.tangemTech.models.StartReferralBody
import com.tangem.datasource.api.tangemTech.models.UserTokensResponse
import retrofit2.http.Body
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.PUT
import retrofit2.http.Path
import retrofit2.http.Query
@ -46,4 +49,12 @@ interface TangemTechApi {
@PUT("user-tokens/{user-id}")
suspend fun saveUserTokens(@Path(value = "user-id") userId: String, @Body userTokens: UserTokensResponse)
/** Returns referral status by [walletId] */
@GET("referral/{walletId}")
suspend fun getReferralStatus(@Path("walletId") walletId: String): ReferralResponse
/** Make user referral, requires [StartReferralBody] */
@POST("referral")
suspend fun startReferral(@Body startReferralBody: StartReferralBody): ReferralResponse
}

View file

@ -0,0 +1,49 @@
package com.tangem.datasource.api.tangemTech.models
import com.squareup.moshi.Json
/**
* Main response class for referral API
* contains all necessary info about users program status
*/
data class ReferralResponse(
@Json(name = "conditions") val conditions: Conditions,
@Json(name = "referral") val referral: Referral?,
) {
data class Conditions(
@Json(name = "award") val award: Int,
@Json(name = "discount") val discount: Discount,
@Json(name = "awards") val awards: List<Award>,
@Json(name = "tosLink") val tosLink: String,
) {
data class Discount(
@Json(name = "amount") val amount: Int,
@Json(name = "type") val discountType: String,
)
data class Award(
@Json(name = "amount") val amount: Int,
@Json(name = "token") val token: Token,
) {
data class Token(
@Json(name = "id") val id: String,
@Json(name = "name") val name: String,
@Json(name = "symbol") val symbol: String,
@Json(name = "networkId") val networkId: String,
@Json(name = "contractAddress") val contractAddress: String?,
@Json(name = "decimalCount") val decimalCount: Int?,
)
}
}
data class Referral(
@Json(name = "shareLink") val shareLink: String,
@Json(name = "address") val address: String,
@Json(name = "promoCode") val promocode: String,
@Json(name = "walletsPurchased") val walletsPurchased: Int,
@Json(name = "termsAcceptedAt") val termsAcceptedAt: String?,
)
}

View file

@ -1,4 +1,4 @@
package com.tangem.datasource.api.referral.models
package com.tangem.datasource.api.tangemTech.models
import com.squareup.moshi.Json

View file

@ -3,7 +3,6 @@ package com.tangem.datasource.di
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import com.tangem.datasource.api.common.BigDecimalAdapter
import com.tangem.datasource.api.referral.ReferralApi
import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.datasource.utils.RequestHeader.AuthenticationHeader
import com.tangem.datasource.utils.RequestHeader.CacheControlHeader
@ -51,24 +50,6 @@ class NetworkModule {
.create(TangemTechApi::class.java)
}
@Provides
@Singleton
fun provideReferralApi(authProvider: AuthProvider, moshi: Moshi): ReferralApi {
return Retrofit.Builder()
.addConverterFactory(
MoshiConverterFactory.create(moshi),
)
.baseUrl(PROD_TANGEM_TECH_BASE_URL)
.client(
OkHttpClient.Builder()
.addHeaders(AuthenticationHeader(authProvider))
.allowLogging()
.build(),
)
.build()
.create(ReferralApi::class.java)
}
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/"

View file

@ -1,7 +1,6 @@
package com.tangem.feature.referral.converters
import com.tangem.datasource.api.referral.models.ReferralResponse
import com.tangem.datasource.api.referral.models.Token
import com.tangem.datasource.api.tangemTech.models.ReferralResponse
import com.tangem.feature.referral.domain.models.DiscountType
import com.tangem.feature.referral.domain.models.ReferralData
import com.tangem.feature.referral.domain.models.ReferralInfo
@ -46,9 +45,9 @@ class ReferralConverter @Inject constructor() : Converter<ReferralResponse, Refe
}
}
private class TokenConverter : Converter<Token, TokenData> {
private class TokenConverter : Converter<ReferralResponse.Conditions.Award.Token, TokenData> {
override fun convert(value: Token): TokenData {
override fun convert(value: ReferralResponse.Conditions.Award.Token): TokenData {
return TokenData(
id = value.id,
name = value.name,

View file

@ -1,7 +1,7 @@
package com.tangem.feature.referral.data
import com.tangem.datasource.api.referral.ReferralApi
import com.tangem.datasource.api.referral.models.StartReferralBody
import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.datasource.api.tangemTech.models.StartReferralBody
import com.tangem.feature.referral.converters.ReferralConverter
import com.tangem.feature.referral.domain.ReferralRepository
import com.tangem.feature.referral.domain.models.ReferralData
@ -10,7 +10,7 @@ import kotlinx.coroutines.withContext
import javax.inject.Inject
internal class ReferralRepositoryImpl @Inject constructor(
private val referralApi: ReferralApi,
private val referralApi: TangemTechApi,
private val referralConverter: ReferralConverter,
private val coroutineDispatcher: CoroutineDispatcherProvider,
) : ReferralRepository {

View file

@ -1,6 +1,6 @@
package com.tangem.feature.referral.di
import com.tangem.datasource.api.referral.ReferralApi
import com.tangem.datasource.api.tangemTech.TangemTechApi
import com.tangem.feature.referral.converters.ReferralConverter
import com.tangem.feature.referral.data.ReferralRepositoryImpl
import com.tangem.feature.referral.domain.ReferralRepository
@ -18,12 +18,14 @@ class ReferralRepositoryModule {
@Provides
@Singleton
fun provideReferralRepository(
referralApi: ReferralApi,
tangemTechApi: TangemTechApi,
referralConverter: ReferralConverter,
coroutineDispatcherProvider: CoroutineDispatcherProvider,
): ReferralRepository {
return ReferralRepositoryImpl(
referralApi, referralConverter, coroutineDispatcherProvider,
referralApi = tangemTechApi,
referralConverter = referralConverter,
coroutineDispatcher = coroutineDispatcherProvider,
)
}
}