Skip to content

Commit

Permalink
infra(BE-121"): kover support
Browse files Browse the repository at this point in the history
 - fix build issue
  • Loading branch information
hanrw committed Nov 22, 2023
1 parent 586d3d9 commit d090b3b
Show file tree
Hide file tree
Showing 7 changed files with 134 additions and 103 deletions.
3 changes: 3 additions & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
110 changes: 7 additions & 103 deletions shared/src/commonMain/kotlin/com/snacks/lemonsqueezy/api/LicenseApi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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,
)
}
Original file line number Diff line number Diff line change
@@ -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,
)
Original file line number Diff line number Diff line change
@@ -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,
)
Original file line number Diff line number Diff line change
@@ -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,
)
Original file line number Diff line number Diff line change
@@ -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()
Original file line number Diff line number Diff line change
@@ -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
Expand Down

0 comments on commit d090b3b

Please sign in to comment.