Updated on 2026-08-14
This commit is contained in:
parent
e7ebbb931e
commit
507b608807
12 changed files with 152 additions and 37 deletions
|
|
@ -14,10 +14,12 @@ sealed class ApiResponse<T : Any> {
|
|||
* Represents a successful response from the API
|
||||
*
|
||||
* @property data the data returned by the API
|
||||
* @property code the HTTP status code of the response
|
||||
* @property headers the headers returned by the API
|
||||
*/
|
||||
data class Success<T : Any>(
|
||||
val data: T,
|
||||
val code: ApiResponseError.HttpException.Code = ApiResponseError.HttpException.Code.OK,
|
||||
override val headers: Map<String, List<String>> = emptyMap(),
|
||||
) : ApiResponse<T>()
|
||||
|
||||
|
|
@ -37,11 +39,20 @@ sealed class ApiResponse<T : Any> {
|
|||
* Wraps data in a [ApiResponse.Success] instance
|
||||
*
|
||||
* @param data the data to wrap
|
||||
* @param code the HTTP status code of the response
|
||||
* @param headers the headers returned by the API
|
||||
* @return a [ApiResponse.Success] instance containing the provided data
|
||||
*/
|
||||
internal fun <T : Any> apiSuccess(data: T, headers: Map<String, List<String>>): ApiResponse<T> {
|
||||
return ApiResponse.Success(data, headers)
|
||||
internal fun <T : Any> apiSuccess(
|
||||
data: T,
|
||||
code: ApiResponseError.HttpException.Code?,
|
||||
headers: Map<String, List<String>>,
|
||||
): ApiResponse<T> {
|
||||
return ApiResponse.Success(
|
||||
data = data,
|
||||
code = code ?: ApiResponseError.HttpException.Code.OK,
|
||||
headers = headers,
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -18,8 +18,13 @@ sealed class ApiResponseError : Exception() {
|
|||
val errorBody: String?,
|
||||
) : ApiResponseError() {
|
||||
|
||||
// TODO: extract Code from HttpException
|
||||
// region Error Codes
|
||||
enum class Code(val numericCode: Int) {
|
||||
// 2xx Success
|
||||
OK(numericCode = 200),
|
||||
CREATED(numericCode = 201),
|
||||
ACCEPTED(numericCode = 202),
|
||||
// 3xx Server Errors
|
||||
NOT_MODIFIED(numericCode = 304),
|
||||
// 4xx Server Errors
|
||||
|
|
|
|||
|
|
@ -15,11 +15,12 @@ internal fun <T : Any> Response<T>.toSafeApiResponse(analyticsErrorHandler: Anal
|
|||
val headers = headers().toMultimap()
|
||||
val body = body()
|
||||
|
||||
val code = ApiResponseError.HttpException.Code.entries
|
||||
.firstOrNull { it.numericCode == code() }
|
||||
|
||||
return if (isSuccessful && body != null) {
|
||||
apiSuccess(data = body, headers = headers)
|
||||
apiSuccess(data = body, code = code, headers = headers)
|
||||
} else {
|
||||
val code = ApiResponseError.HttpException.Code.entries
|
||||
.firstOrNull { it.numericCode == code() }
|
||||
val e = try {
|
||||
if (code == null) {
|
||||
ApiResponseError.UnknownException(IllegalArgumentException("Unknown error status code: ${code()}"))
|
||||
|
|
|
|||
|
|
@ -137,6 +137,9 @@ interface TangemTechApi {
|
|||
|
||||
@GET("v1/user-wallets/wallets/by-app/{app_id}")
|
||||
suspend fun getWallets(@Path("app_id") appId: String): ApiResponse<List<WalletResponse>>
|
||||
|
||||
@POST("v1/user-wallets/wallets")
|
||||
suspend fun createWallet(@Body body: OnlyWalletIdBody): ApiResponse<Unit>
|
||||
// endregion
|
||||
|
||||
// promo
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
package com.tangem.datasource.api.tangemTech.models
|
||||
|
||||
import com.squareup.moshi.Json
|
||||
import com.squareup.moshi.JsonClass
|
||||
|
||||
@JsonClass(generateAdapter = true)
|
||||
data class OnlyWalletIdBody(
|
||||
@Json(name = "id") val walletId: String,
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue