diff --git a/composeApp/src/commonMain/kotlin/com/example/mycrib/network/SubscriptionApi.kt b/composeApp/src/commonMain/kotlin/com/example/mycrib/network/SubscriptionApi.kt index b47e3a9..e50f962 100644 --- a/composeApp/src/commonMain/kotlin/com/example/mycrib/network/SubscriptionApi.kt +++ b/composeApp/src/commonMain/kotlin/com/example/mycrib/network/SubscriptionApi.kt @@ -1,50 +1,98 @@ package com.example.mycrib.network import com.example.mycrib.models.* +import io.ktor.client.* import io.ktor.client.call.* import io.ktor.client.request.* import io.ktor.http.* -class SubscriptionApi { - private val baseUrl = ApiConfig.baseUrl +class SubscriptionApi(private val client: HttpClient = ApiClient.httpClient) { + private val baseUrl = ApiClient.getBaseUrl() suspend fun getSubscriptionStatus(token: String): ApiResult { - return apiCall { - httpClient.get("$baseUrl/subscription/status/") { + return try { + val response = client.get("$baseUrl/subscription/status/") { header("Authorization", "Token $token") - }.body() + } + + if (response.status.isSuccess()) { + ApiResult.Success(response.body()) + } else { + ApiResult.Error("Failed to fetch subscription status", response.status.value) + } + } catch (e: Exception) { + ApiResult.Error(e.message ?: "Unknown error occurred") } } suspend fun getUpgradeTriggers(token: String): ApiResult> { - return apiCall { - httpClient.get("$baseUrl/subscription/upgrade-triggers/") { + return try { + val response = client.get("$baseUrl/subscription/upgrade-triggers/") { header("Authorization", "Token $token") - }.body() + } + + if (response.status.isSuccess()) { + ApiResult.Success(response.body()) + } else { + ApiResult.Error("Failed to fetch upgrade triggers", response.status.value) + } + } catch (e: Exception) { + ApiResult.Error(e.message ?: "Unknown error occurred") } } suspend fun getFeatureBenefits(): ApiResult> { - return apiCall { - httpClient.get("$baseUrl/subscription/feature-benefits/").body() + return try { + val response = client.get("$baseUrl/subscription/feature-benefits/") + + if (response.status.isSuccess()) { + ApiResult.Success(response.body()) + } else { + ApiResult.Error("Failed to fetch feature benefits", response.status.value) + } + } catch (e: Exception) { + ApiResult.Error(e.message ?: "Unknown error occurred") } } suspend fun getActivePromotions(token: String): ApiResult> { - return apiCall { - httpClient.get("$baseUrl/subscription/promotions/") { + return try { + val response = client.get("$baseUrl/subscription/promotions/") { header("Authorization", "Token $token") - }.body() + } + + if (response.status.isSuccess()) { + ApiResult.Success(response.body()) + } else { + ApiResult.Error("Failed to fetch promotions", response.status.value) + } + } catch (e: Exception) { + ApiResult.Error(e.message ?: "Unknown error occurred") } } - suspend fun verifyIOSReceipt(token: String, receiptData: String): ApiResult { - return apiCall { - httpClient.post("$baseUrl/subscription/verify-ios/") { + suspend fun verifyIOSReceipt( + token: String, + receiptData: String, + transactionId: String + ): ApiResult { + return try { + val response = client.post("$baseUrl/subscription/verify-ios/") { header("Authorization", "Token $token") contentType(ContentType.Application.Json) - setBody(ReceiptVerificationRequest(receiptData)) - }.body() + setBody(mapOf( + "receipt_data" to receiptData, + "transaction_id" to transactionId + )) + } + + if (response.status.isSuccess()) { + ApiResult.Success(response.body()) + } else { + ApiResult.Error("Failed to verify iOS receipt", response.status.value) + } + } catch (e: Exception) { + ApiResult.Error(e.message ?: "Unknown error occurred") } } @@ -53,12 +101,23 @@ class SubscriptionApi { purchaseToken: String, productId: String ): ApiResult { - return apiCall { - httpClient.post("$baseUrl/subscription/verify-android/") { + return try { + val response = client.post("$baseUrl/subscription/verify-android/") { header("Authorization", "Token $token") contentType(ContentType.Application.Json) - setBody(PurchaseVerificationRequest(purchaseToken, productId)) - }.body() + setBody(mapOf( + "purchase_token" to purchaseToken, + "product_id" to productId + )) + } + + if (response.status.isSuccess()) { + ApiResult.Success(response.body()) + } else { + ApiResult.Error("Failed to verify Android purchase", response.status.value) + } + } catch (e: Exception) { + ApiResult.Error(e.message ?: "Unknown error occurred") } } }