Skip to content

Commit e6bd894

Browse files
authored
Merge pull request #404 from Ecwid/ECWID-139066
ECWID-139066 - support PartialResult models for variation
2 parents c4a70f3 + 6439bbe commit e6bd894

4 files changed

Lines changed: 37 additions & 5 deletions

File tree

src/main/kotlin/com/ecwid/apiclient/v3/ApiClient.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import com.ecwid.apiclient.v3.dto.batch.result.GetEscapedBatchResult
1717
import com.ecwid.apiclient.v3.dto.batch.result.GetTypedBatchResult
1818
import com.ecwid.apiclient.v3.dto.cart.request.*
1919
import com.ecwid.apiclient.v3.dto.cart.result.*
20+
import com.ecwid.apiclient.v3.dto.common.PartialResult
2021
import com.ecwid.apiclient.v3.dto.coupon.request.*
2122
import com.ecwid.apiclient.v3.dto.coupon.result.*
2223
import com.ecwid.apiclient.v3.dto.customer.request.*
@@ -47,6 +48,7 @@ import com.ecwid.apiclient.v3.dto.variation.result.*
4748
import com.ecwid.apiclient.v3.httptransport.HttpTransport
4849
import com.ecwid.apiclient.v3.impl.*
4950
import com.ecwid.apiclient.v3.jsontransformer.JsonTransformerProvider
51+
import kotlin.reflect.KClass
5052

5153
open class ApiClient private constructor(
5254
protected val apiClientHelper: ApiClientHelper,
@@ -212,14 +214,28 @@ interface ProductVariationsApiClient {
212214
fun uploadVariationImage(request: ProductVariationImageUploadRequest): ProductVariationImageUploadResult
213215
fun uploadProductVariationImageAsync(request: ProductVariationImageAsyncUploadRequest): ProductVariationImageAsyncUploadResult
214216
fun getAllProductVariations(request: ProductVariationsRequest): ProductVariationsResult
217+
fun <Result> getAllProductVariations(request: ProductVariationsRequest, resultClass: KClass<Result>): List<Result>
218+
where Result : PartialResult<FetchedVariation>
215219
fun getProductVariation(request: ProductVariationDetailsRequest): FetchedVariation
220+
fun <Result> getProductVariation(request: ProductVariationDetailsRequest, resultClass: KClass<Result>): Result
221+
where Result : PartialResult<FetchedVariation>
216222
fun updateProductVariation(request: UpdateProductVariationRequest): UpdateProductVariationResult
217223
fun deleteProductVariation(request: DeleteProductVariationRequest): DeleteProductVariationsResult
218224
fun deleteAllProductVariations(request: DeleteAllProductVariationsRequest): DeleteProductVariationsResult
219225
fun adjustVariationInventory(request: AdjustVariationInventoryRequest): AdjustVariationInventoryResult
220226
fun deleteVariationImage(request: ProductVariationImageDeleteRequest): ProductVariationImageDeleteResult
221227
}
222228

229+
@Suppress("EXTENSION_SHADOWED_BY_MEMBER")
230+
inline fun <reified Result : PartialResult<FetchedVariation>> ProductVariationsApiClient.getProductVariation(request: ProductVariationDetailsRequest): Result {
231+
return getProductVariation(request, Result::class)
232+
}
233+
234+
@Suppress("EXTENSION_SHADOWED_BY_MEMBER")
235+
inline fun <reified Result : PartialResult<FetchedVariation>> ProductVariationsApiClient.getAllProductVariations(request: ProductVariationsRequest): List<Result> {
236+
return getAllProductVariations(request, Result::class)
237+
}
238+
223239
// Carts
224240
// https://developers.ecwid.com/api-documentation/carts
225241
interface CartsApiClient {

src/main/kotlin/com/ecwid/apiclient/v3/ApiClientHelper.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,15 @@ class ApiClientHelper private constructor(
128128
)
129129
}
130130

131+
@Suppress("UNCHECKED_CAST")
132+
fun <V : PartialResult<*>> makeObjectPartialResultRequestList(request: ApiRequest, resultClass: KClass<V>): List<V> {
133+
return makeRequestInt(
134+
request = request,
135+
responseParser = ObjectResponseParser(jsonTransformer, resultClass.java.arrayType() as Class<Array<V>>),
136+
responseFieldsOverride = responseFieldsOf(resultClass)
137+
).toList()
138+
}
139+
131140
@Suppress("unused")
132141
fun <VBase : PartialResult<*>, VExt : PartialResult<*>> makeObjectPartialResultWithExtRequest(
133142
request: ApiRequest,

src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/result/FetchedVariation.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package com.ecwid.apiclient.v3.dto.variation.result
22

3-
import com.ecwid.apiclient.v3.dto.common.ApiFetchedDTO
3+
import com.ecwid.apiclient.v3.dto.common.*
44
import com.ecwid.apiclient.v3.dto.common.ApiFetchedDTO.ModifyKind
5-
import com.ecwid.apiclient.v3.dto.common.FetchedAlt
6-
import com.ecwid.apiclient.v3.dto.common.FetchedAttributeValue
7-
import com.ecwid.apiclient.v3.dto.common.LocalizedValueMap
85
import com.ecwid.apiclient.v3.dto.product.enums.AttributeValueLocation
96
import com.ecwid.apiclient.v3.dto.product.enums.OutOfStockVisibilityBehaviour
107
import com.ecwid.apiclient.v3.dto.product.enums.RecurringSubscriptionInterval
@@ -58,7 +55,7 @@ data class FetchedVariation(
5855
val customsHsTariffCode: String? = null,
5956
val subscriptionSettings: SubscriptionSettings? = null,
6057
val alt: FetchedAlt? = null,
61-
) : ApiFetchedDTO {
58+
) : ApiFetchedDTO, ApiResultDTO {
6259

6360
data class AttributeValue(
6461
override val id: Int? = null,

src/main/kotlin/com/ecwid/apiclient/v3/impl/ProductVariationsApiClientImpl.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ package com.ecwid.apiclient.v3.impl
22

33
import com.ecwid.apiclient.v3.ApiClientHelper
44
import com.ecwid.apiclient.v3.ProductVariationsApiClient
5+
import com.ecwid.apiclient.v3.dto.common.PartialResult
56
import com.ecwid.apiclient.v3.dto.variation.request.*
67
import com.ecwid.apiclient.v3.dto.variation.result.*
8+
import kotlin.reflect.KClass
79

810
internal class ProductVariationsApiClientImpl(
911
private val apiClientHelper: ApiClientHelper
@@ -23,9 +25,17 @@ internal class ProductVariationsApiClientImpl(
2325
override fun getAllProductVariations(request: ProductVariationsRequest) =
2426
apiClientHelper.makeObjectResultRequest<ProductVariationsResult>(request)
2527

28+
override fun <Result : PartialResult<FetchedVariation>> getAllProductVariations(request: ProductVariationsRequest, resultClass: KClass<Result>): List<Result> {
29+
return apiClientHelper.makeObjectPartialResultRequestList(request, resultClass)
30+
}
31+
2632
override fun getProductVariation(request: ProductVariationDetailsRequest) =
2733
apiClientHelper.makeObjectResultRequest<FetchedVariation>(request)
2834

35+
override fun <Result : PartialResult<FetchedVariation>> getProductVariation(request: ProductVariationDetailsRequest, resultClass: KClass<Result>): Result {
36+
return apiClientHelper.makeObjectPartialResultRequest(request, resultClass)
37+
}
38+
2939
override fun updateProductVariation(request: UpdateProductVariationRequest) =
3040
apiClientHelper.makeObjectResultRequest<UpdateProductVariationResult>(request)
3141

0 commit comments

Comments
 (0)