From d090b3b00e9bad6a97c5488d02266dc61a861169 Mon Sep 17 00:00:00 2001 From: slam Date: Wed, 22 Nov 2023 23:35:14 +0800 Subject: [PATCH] infra(BE-121"): kover support - fix build issue --- build.gradle.kts | 3 + .../com/snacks/lemonsqueezy/api/LicenseApi.kt | 110 ++---------------- .../com/snacks/lemonsqueezy/api/data/Datas.kt | 51 ++++++++ .../api/request/LicenseActivationRequest.kt | 12 ++ .../api/request/LicenseDeactivationRequest.kt | 10 ++ .../lemonsqueezy/api/response/Responses.kt | 45 +++++++ .../snacks/lemonsqueezy/api/LicenseApiTest.kt | 6 + 7 files changed, 134 insertions(+), 103 deletions(-) create mode 100644 shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/data/Datas.kt create mode 100644 shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/request/LicenseActivationRequest.kt create mode 100644 shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/request/LicenseDeactivationRequest.kt create mode 100644 shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/response/Responses.kt diff --git a/build.gradle.kts b/build.gradle.kts index 2688860..7c8e43b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -15,6 +15,9 @@ koverReport { classes( "**Platform*", "*.LemonSqueezyApi**", + "com.snacks.**.request.*", + "com.snacks.**.response.*", + "com.snacks.**.data.*", "com.snacks.**.internal.ktor.*", "com.snacks.**.*\$*$*", // Lambda functions like - LemonSqueezyLicenseApi$activeLicense$activationResult$1 "*.BuildConfig", diff --git a/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/LicenseApi.kt b/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/LicenseApi.kt index 09c67a3..6370e27 100644 --- a/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/LicenseApi.kt +++ b/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/LicenseApi.kt @@ -2,13 +2,15 @@ package com.snacks.lemonsqueezy.api import com.snacks.lemonsqueezy.api.internal.ktor.HttpRequester import com.snacks.lemonsqueezy.api.internal.ktor.performRequest +import com.snacks.lemonsqueezy.api.request.LicenseActivationRequest +import com.snacks.lemonsqueezy.api.request.LicenseDeactivationRequest +import com.snacks.lemonsqueezy.api.response.LicenseActivationErrorResponse +import com.snacks.lemonsqueezy.api.response.LicenseActivationResult +import com.snacks.lemonsqueezy.api.response.LicenseActivationSuccessResponse +import com.snacks.lemonsqueezy.api.response.LicenseDeactivationResponse import io.ktor.client.request.* import io.ktor.http.* -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json -import kotlin.contracts.ExperimentalContracts -import kotlin.contracts.contract interface LicenseApi { suspend fun activeLicense(licenseKey: String, instanceName: String): LicenseActivationResult @@ -56,102 +58,4 @@ internal class LemonSqueezyLicenseApi( ) } } -} - -sealed class LicenseActivationResult { - @OptIn(ExperimentalContracts::class) - fun isSuccess(): Boolean { - contract { - returns(true) implies (this@LicenseActivationResult is LicenseActivationSuccessResponse) - returns(false) implies (this@LicenseActivationResult is LicenseActivationErrorResponse) - } - return this is LicenseActivationSuccessResponse - } -} - -@Serializable -data class LicenseActivationRequest( - @SerialName("license_key") - val licenseKey: String, - @SerialName("instance_name") - val instanceName: String, -) - -data class LicenseDeactivationRequest( - @SerialName("license_key") - val licenseKey: String, - @SerialName("instance_id") - val instanceId: String, -) - -data class LicenseDeactivationResponse( - val deactivated: Boolean, - val error: String?, - val licenseKey: LicenseKey, - val meta: Meta, -) - -@Serializable -data class LicenseActivationSuccessResponse( - val activated: Boolean, - @SerialName("license_key") - val licenseKey: LicenseKey, - val instance: Instance, - val meta: Meta, -) : LicenseActivationResult() - -@Serializable -data class LicenseActivationErrorResponse( - val activated: Boolean, - val error: String?, - @SerialName("license_key") - val licenseKey: LicenseKey, - val meta: Meta, -) : LicenseActivationResult() - -@Serializable -data class LicenseKey( - val id: Int, - val status: String, - val key: String, - @SerialName("activation_limit") - val activationLimit: Int, - @SerialName("activation_usage") - val activationUsage: Int, - @SerialName("created_at") - val createdAt: String, - @SerialName("expires_at") - val expiresAt: String?, -) - -@Serializable -data class Instance( - val id: String, - val name: String, - @SerialName("created_at") - val createdAt: String, -) - -@Serializable -data class Meta( - @SerialName("store_id") - val storeId: Int, - @SerialName("order_id") - val orderId: Int, - @SerialName("order_item_id") - val orderItemId: Int, - @SerialName("product_id") - val productId: Int, - @SerialName("product_name") - val productName: String, - @SerialName("variant_id") - val variantId: Int, - @SerialName("variant_name") - val variantName: String, - @SerialName("customer_id") - val customerId: Int, - @SerialName("customer_name") - val customerName: String, - @SerialName("customer_email") - val customerEmail: String, -) +} \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/data/Datas.kt b/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/data/Datas.kt new file mode 100644 index 0000000..c12cbbc --- /dev/null +++ b/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/data/Datas.kt @@ -0,0 +1,51 @@ +package com.snacks.lemonsqueezy.api.data + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class LicenseKey( + val id: Int, + val status: String, + val key: String, + @SerialName("activation_limit") + val activationLimit: Int, + @SerialName("activation_usage") + val activationUsage: Int, + @SerialName("created_at") + val createdAt: String, + @SerialName("expires_at") + val expiresAt: String?, +) + +@Serializable +data class Instance( + val id: String, + val name: String, + @SerialName("created_at") + val createdAt: String, +) + +@Serializable +data class Meta( + @SerialName("store_id") + val storeId: Int, + @SerialName("order_id") + val orderId: Int, + @SerialName("order_item_id") + val orderItemId: Int, + @SerialName("product_id") + val productId: Int, + @SerialName("product_name") + val productName: String, + @SerialName("variant_id") + val variantId: Int, + @SerialName("variant_name") + val variantName: String, + @SerialName("customer_id") + val customerId: Int, + @SerialName("customer_name") + val customerName: String, + @SerialName("customer_email") + val customerEmail: String, +) \ No newline at end of file diff --git a/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/request/LicenseActivationRequest.kt b/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/request/LicenseActivationRequest.kt new file mode 100644 index 0000000..664f614 --- /dev/null +++ b/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/request/LicenseActivationRequest.kt @@ -0,0 +1,12 @@ +package com.snacks.lemonsqueezy.api.request + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class LicenseActivationRequest( + @SerialName("license_key") + val licenseKey: String, + @SerialName("instance_name") + val instanceName: String, +) diff --git a/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/request/LicenseDeactivationRequest.kt b/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/request/LicenseDeactivationRequest.kt new file mode 100644 index 0000000..1edaa3d --- /dev/null +++ b/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/request/LicenseDeactivationRequest.kt @@ -0,0 +1,10 @@ +package com.snacks.lemonsqueezy.api.request + +import kotlinx.serialization.SerialName + +data class LicenseDeactivationRequest( + @SerialName("license_key") + val licenseKey: String, + @SerialName("instance_id") + val instanceId: String, +) diff --git a/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/response/Responses.kt b/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/response/Responses.kt new file mode 100644 index 0000000..274748d --- /dev/null +++ b/shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/response/Responses.kt @@ -0,0 +1,45 @@ +package com.snacks.lemonsqueezy.api.response + +import com.snacks.lemonsqueezy.api.data.Instance +import com.snacks.lemonsqueezy.api.data.LicenseKey +import com.snacks.lemonsqueezy.api.data.Meta +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.contract + +sealed class LicenseActivationResult { + @OptIn(ExperimentalContracts::class) + fun isSuccess(): Boolean { + contract { + returns(true) implies (this@LicenseActivationResult is LicenseActivationSuccessResponse) + returns(false) implies (this@LicenseActivationResult is LicenseActivationErrorResponse) + } + return this is LicenseActivationSuccessResponse + } +} + +data class LicenseDeactivationResponse( + val deactivated: Boolean, + val error: String?, + val licenseKey: LicenseKey, + val meta: Meta, +) + +@Serializable +data class LicenseActivationSuccessResponse( + val activated: Boolean, + @SerialName("license_key") + val licenseKey: LicenseKey, + val instance: Instance, + val meta: Meta, +) : LicenseActivationResult() + +@Serializable +data class LicenseActivationErrorResponse( + val activated: Boolean, + val error: String?, + @SerialName("license_key") + val licenseKey: LicenseKey, + val meta: Meta, +) : LicenseActivationResult() \ No newline at end of file diff --git a/shared/src/jvmTest/kotlin/com/snacks/lemonsqueezy/api/LicenseApiTest.kt b/shared/src/jvmTest/kotlin/com/snacks/lemonsqueezy/api/LicenseApiTest.kt index e6ee7b3..69d7e02 100644 --- a/shared/src/jvmTest/kotlin/com/snacks/lemonsqueezy/api/LicenseApiTest.kt +++ b/shared/src/jvmTest/kotlin/com/snacks/lemonsqueezy/api/LicenseApiTest.kt @@ -1,6 +1,12 @@ package com.snacks.lemonsqueezy.api +import com.snacks.lemonsqueezy.api.data.Instance +import com.snacks.lemonsqueezy.api.data.LicenseKey +import com.snacks.lemonsqueezy.api.data.Meta import com.snacks.lemonsqueezy.api.internal.ktor.HttpRequester +import com.snacks.lemonsqueezy.api.response.LicenseActivationErrorResponse +import com.snacks.lemonsqueezy.api.response.LicenseActivationSuccessResponse +import com.snacks.lemonsqueezy.api.response.LicenseDeactivationResponse import io.ktor.client.request.* import io.ktor.util.reflect.* import kotlinx.coroutines.runBlocking