From 436a61536d7273315eca5b79d1391ab61cf3e506 Mon Sep 17 00:00:00 2001 From: Sina Bagherzadeh Date: Wed, 14 Sep 2022 15:36:41 +0200 Subject: [PATCH 1/5] ECWID-106305: method uploadProductVariationImageAsync developed to upload product variation's image asynchronously --- .../com/ecwid/apiclient/v3/ApiClient.kt | 1 + ...ProductVariationImageAsyncUploadRequest.kt | 27 ++++++++++++ .../ProductVariationImageAsyncUploadResult.kt | 5 +++ .../v3/impl/ProductVariationsApiClientImpl.kt | 5 +++ .../apiclient/v3/entity/VariationsTest.kt | 41 +++++++++++++++++++ 5 files changed, 79 insertions(+) create mode 100644 src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt create mode 100644 src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/result/ProductVariationImageAsyncUploadResult.kt diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClient.kt b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClient.kt index e9869a49b..cf535e806 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClient.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClient.kt @@ -250,6 +250,7 @@ interface BatchApiClient { interface ProductVariationsApiClient { fun createProductVariation(request: CreateProductVariationRequest): CreateProductVariationResult fun uploadVariationImage(request: ProductVariationImageUploadRequest): ProductVariationImageUploadResult + fun uploadProductVariationImageAsync(request: ProductVariationImageAsyncUploadRequest): ProductVariationImageAsyncUploadResult fun getAllProductVariations(request: ProductVariationsRequest): ProductVariationsResult fun getProductVariation(request: ProductVariationDetailsRequest): FetchedVariation fun updateProductVariation(request: UpdateProductVariationRequest): UpdateProductVariationResult diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt b/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt new file mode 100644 index 000000000..10a105b40 --- /dev/null +++ b/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt @@ -0,0 +1,27 @@ +package com.ecwid.apiclient.v3.dto.variation.request + +import com.ecwid.apiclient.v3.dto.ApiRequest +import com.ecwid.apiclient.v3.dto.common.AsyncPictureData +import com.ecwid.apiclient.v3.httptransport.HttpBody +import com.ecwid.apiclient.v3.impl.RequestInfo + +data class ProductVariationImageAsyncUploadRequest( + val productId: Int, + val variationId: Int, + val asyncPictureData: AsyncPictureData +) : ApiRequest { + override fun toRequestInfo(): RequestInfo { + return RequestInfo.createPostRequest( + pathSegments = listOf( + "products", + "$productId", + "combinations", + "$variationId", + "image", + "async" + ), + params = mapOf(), + httpBody = HttpBody.JsonBody(obj = asyncPictureData) + ) + } +} diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/result/ProductVariationImageAsyncUploadResult.kt b/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/result/ProductVariationImageAsyncUploadResult.kt new file mode 100644 index 000000000..09c00e2db --- /dev/null +++ b/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/result/ProductVariationImageAsyncUploadResult.kt @@ -0,0 +1,5 @@ +package com.ecwid.apiclient.v3.dto.variation.result + +import com.ecwid.apiclient.v3.dto.common.ApiResultDTO + +class ProductVariationImageAsyncUploadResult : ApiResultDTO diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/impl/ProductVariationsApiClientImpl.kt b/src/main/kotlin/com/ecwid/apiclient/v3/impl/ProductVariationsApiClientImpl.kt index f926bc51d..a9863fdf1 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/impl/ProductVariationsApiClientImpl.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/impl/ProductVariationsApiClientImpl.kt @@ -2,6 +2,8 @@ package com.ecwid.apiclient.v3.impl import com.ecwid.apiclient.v3.ApiClientHelper import com.ecwid.apiclient.v3.ProductVariationsApiClient +import com.ecwid.apiclient.v3.dto.variation.request.ProductVariationImageAsyncUploadRequest +import com.ecwid.apiclient.v3.dto.variation.result.ProductVariationImageAsyncUploadResult import com.ecwid.apiclient.v3.dto.variation.request.* import com.ecwid.apiclient.v3.dto.variation.result.* @@ -17,6 +19,9 @@ internal class ProductVariationsApiClientImpl( override fun deleteVariationImage(request: ProductVariationImageDeleteRequest) = apiClientHelper.makeObjectResultRequest(request) + override fun uploadProductVariationImageAsync(request: ProductVariationImageAsyncUploadRequest) = + apiClientHelper.makeObjectResultRequest(request) + override fun getAllProductVariations(request: ProductVariationsRequest) = apiClientHelper.makeObjectResultRequest(request) diff --git a/src/test/kotlin/com/ecwid/apiclient/v3/entity/VariationsTest.kt b/src/test/kotlin/com/ecwid/apiclient/v3/entity/VariationsTest.kt index 44cfda6ea..315f6c2b7 100644 --- a/src/test/kotlin/com/ecwid/apiclient/v3/entity/VariationsTest.kt +++ b/src/test/kotlin/com/ecwid/apiclient/v3/entity/VariationsTest.kt @@ -1,6 +1,7 @@ package com.ecwid.apiclient.v3.entity import com.ecwid.apiclient.v3.converter.toUpdated +import com.ecwid.apiclient.v3.dto.common.AsyncPictureData import com.ecwid.apiclient.v3.dto.common.UploadFileData import com.ecwid.apiclient.v3.dto.product.request.ProductCreateRequest import com.ecwid.apiclient.v3.dto.product.request.ProductDetailsRequest @@ -284,6 +285,46 @@ class VariationsTest : BaseEntityTest() { val fetchedVariation2 = apiClient.getProductVariation(productVariationDetailsRequest) Assertions.assertNull(fetchedVariation2.imageUrl) } + + @Test + fun `test uploading product variation image asynchronously`() { + val productPrice = randomPrice() + val productCreateRequest = ProductCreateRequest( + newProduct = UpdatedProduct( + price = productPrice, + name = "Product ${randomAlphanumeric(8)}", + sku = "testVariationImageUploadAsync", + options = listOf(generateProductRadioOption("Test", listOf("1", "2", "3", "4", "5"))) + ) + ) + val productCreateResult = apiClient.createProduct(productCreateRequest) + val newProductId = productCreateResult.id + val testVariationPrice = randomPrice() + val testVariationWeight = randomWeight() + val createProductVariationRequest = CreateProductVariationRequest( + productId = newProductId, + newVariation = UpdatedVariation( + sku = "testVariation1", + quantity = 2, + price = testVariationPrice, + weight = testVariationWeight, + options = listOf(UpdatedVariation.Option(name = "Test", value = "5")) + ) + ) + val createProductVariationResult = apiClient.createProductVariation(createProductVariationRequest) + val newVariationId = createProductVariationResult.id + val uploadImageAsyncReq = ProductVariationImageAsyncUploadRequest( + productId = newProductId, + variationId = newVariationId, + asyncPictureData = AsyncPictureData("https://example.com/dummy.jpg", 100, 200) + ) + apiClient.uploadProductVariationImageAsync(uploadImageAsyncReq) + val fetchedProduct = apiClient.getProductDetails(ProductDetailsRequest(productId = newProductId)) + val variations = fetchedProduct.combinations + assertEquals(variations?.size, 1) + assertEquals(variations?.get(0)?.originalImageUrl, uploadImageAsyncReq.asyncPictureData.url) + } + } private fun generateProductSelectOption(name: String, values: List): UpdatedProduct.ProductOption { From 587fec5058259daa14699e4db6052229d4e05438 Mon Sep 17 00:00:00 2001 From: Sina Bagherzadeh Date: Wed, 14 Sep 2022 16:27:17 +0200 Subject: [PATCH 2/5] ECWID-106305: ProductVariationImageAsyncUploadRequest fields initialized --- .../request/ProductVariationImageAsyncUploadRequest.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt b/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt index 10a105b40..ffd0a052c 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt @@ -6,9 +6,9 @@ import com.ecwid.apiclient.v3.httptransport.HttpBody import com.ecwid.apiclient.v3.impl.RequestInfo data class ProductVariationImageAsyncUploadRequest( - val productId: Int, - val variationId: Int, - val asyncPictureData: AsyncPictureData + val productId: Int = 0, + val variationId: Int = 0, + val asyncPictureData: AsyncPictureData = AsyncPictureData() ) : ApiRequest { override fun toRequestInfo(): RequestInfo { return RequestInfo.createPostRequest( From bb5ceaf0ad43d5fd572b75c2d6724a49be4612f1 Mon Sep 17 00:00:00 2001 From: Sina Bagherzadeh Date: Wed, 14 Sep 2022 15:36:41 +0200 Subject: [PATCH 3/5] ECWID-107598: method uploadProductVariationImageAsync developed to upload product variation's image asynchronously --- .../com/ecwid/apiclient/v3/ApiClient.kt | 1 + ...ProductVariationImageAsyncUploadRequest.kt | 27 ++++++++++++ .../ProductVariationImageAsyncUploadResult.kt | 5 +++ .../v3/impl/ProductVariationsApiClientImpl.kt | 5 +++ .../apiclient/v3/entity/VariationsTest.kt | 41 +++++++++++++++++++ 5 files changed, 79 insertions(+) create mode 100644 src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt create mode 100644 src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/result/ProductVariationImageAsyncUploadResult.kt diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClient.kt b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClient.kt index e9869a49b..cf535e806 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/ApiClient.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/ApiClient.kt @@ -250,6 +250,7 @@ interface BatchApiClient { interface ProductVariationsApiClient { fun createProductVariation(request: CreateProductVariationRequest): CreateProductVariationResult fun uploadVariationImage(request: ProductVariationImageUploadRequest): ProductVariationImageUploadResult + fun uploadProductVariationImageAsync(request: ProductVariationImageAsyncUploadRequest): ProductVariationImageAsyncUploadResult fun getAllProductVariations(request: ProductVariationsRequest): ProductVariationsResult fun getProductVariation(request: ProductVariationDetailsRequest): FetchedVariation fun updateProductVariation(request: UpdateProductVariationRequest): UpdateProductVariationResult diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt b/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt new file mode 100644 index 000000000..10a105b40 --- /dev/null +++ b/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt @@ -0,0 +1,27 @@ +package com.ecwid.apiclient.v3.dto.variation.request + +import com.ecwid.apiclient.v3.dto.ApiRequest +import com.ecwid.apiclient.v3.dto.common.AsyncPictureData +import com.ecwid.apiclient.v3.httptransport.HttpBody +import com.ecwid.apiclient.v3.impl.RequestInfo + +data class ProductVariationImageAsyncUploadRequest( + val productId: Int, + val variationId: Int, + val asyncPictureData: AsyncPictureData +) : ApiRequest { + override fun toRequestInfo(): RequestInfo { + return RequestInfo.createPostRequest( + pathSegments = listOf( + "products", + "$productId", + "combinations", + "$variationId", + "image", + "async" + ), + params = mapOf(), + httpBody = HttpBody.JsonBody(obj = asyncPictureData) + ) + } +} diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/result/ProductVariationImageAsyncUploadResult.kt b/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/result/ProductVariationImageAsyncUploadResult.kt new file mode 100644 index 000000000..09c00e2db --- /dev/null +++ b/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/result/ProductVariationImageAsyncUploadResult.kt @@ -0,0 +1,5 @@ +package com.ecwid.apiclient.v3.dto.variation.result + +import com.ecwid.apiclient.v3.dto.common.ApiResultDTO + +class ProductVariationImageAsyncUploadResult : ApiResultDTO diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/impl/ProductVariationsApiClientImpl.kt b/src/main/kotlin/com/ecwid/apiclient/v3/impl/ProductVariationsApiClientImpl.kt index f926bc51d..a9863fdf1 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/impl/ProductVariationsApiClientImpl.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/impl/ProductVariationsApiClientImpl.kt @@ -2,6 +2,8 @@ package com.ecwid.apiclient.v3.impl import com.ecwid.apiclient.v3.ApiClientHelper import com.ecwid.apiclient.v3.ProductVariationsApiClient +import com.ecwid.apiclient.v3.dto.variation.request.ProductVariationImageAsyncUploadRequest +import com.ecwid.apiclient.v3.dto.variation.result.ProductVariationImageAsyncUploadResult import com.ecwid.apiclient.v3.dto.variation.request.* import com.ecwid.apiclient.v3.dto.variation.result.* @@ -17,6 +19,9 @@ internal class ProductVariationsApiClientImpl( override fun deleteVariationImage(request: ProductVariationImageDeleteRequest) = apiClientHelper.makeObjectResultRequest(request) + override fun uploadProductVariationImageAsync(request: ProductVariationImageAsyncUploadRequest) = + apiClientHelper.makeObjectResultRequest(request) + override fun getAllProductVariations(request: ProductVariationsRequest) = apiClientHelper.makeObjectResultRequest(request) diff --git a/src/test/kotlin/com/ecwid/apiclient/v3/entity/VariationsTest.kt b/src/test/kotlin/com/ecwid/apiclient/v3/entity/VariationsTest.kt index 44cfda6ea..315f6c2b7 100644 --- a/src/test/kotlin/com/ecwid/apiclient/v3/entity/VariationsTest.kt +++ b/src/test/kotlin/com/ecwid/apiclient/v3/entity/VariationsTest.kt @@ -1,6 +1,7 @@ package com.ecwid.apiclient.v3.entity import com.ecwid.apiclient.v3.converter.toUpdated +import com.ecwid.apiclient.v3.dto.common.AsyncPictureData import com.ecwid.apiclient.v3.dto.common.UploadFileData import com.ecwid.apiclient.v3.dto.product.request.ProductCreateRequest import com.ecwid.apiclient.v3.dto.product.request.ProductDetailsRequest @@ -284,6 +285,46 @@ class VariationsTest : BaseEntityTest() { val fetchedVariation2 = apiClient.getProductVariation(productVariationDetailsRequest) Assertions.assertNull(fetchedVariation2.imageUrl) } + + @Test + fun `test uploading product variation image asynchronously`() { + val productPrice = randomPrice() + val productCreateRequest = ProductCreateRequest( + newProduct = UpdatedProduct( + price = productPrice, + name = "Product ${randomAlphanumeric(8)}", + sku = "testVariationImageUploadAsync", + options = listOf(generateProductRadioOption("Test", listOf("1", "2", "3", "4", "5"))) + ) + ) + val productCreateResult = apiClient.createProduct(productCreateRequest) + val newProductId = productCreateResult.id + val testVariationPrice = randomPrice() + val testVariationWeight = randomWeight() + val createProductVariationRequest = CreateProductVariationRequest( + productId = newProductId, + newVariation = UpdatedVariation( + sku = "testVariation1", + quantity = 2, + price = testVariationPrice, + weight = testVariationWeight, + options = listOf(UpdatedVariation.Option(name = "Test", value = "5")) + ) + ) + val createProductVariationResult = apiClient.createProductVariation(createProductVariationRequest) + val newVariationId = createProductVariationResult.id + val uploadImageAsyncReq = ProductVariationImageAsyncUploadRequest( + productId = newProductId, + variationId = newVariationId, + asyncPictureData = AsyncPictureData("https://example.com/dummy.jpg", 100, 200) + ) + apiClient.uploadProductVariationImageAsync(uploadImageAsyncReq) + val fetchedProduct = apiClient.getProductDetails(ProductDetailsRequest(productId = newProductId)) + val variations = fetchedProduct.combinations + assertEquals(variations?.size, 1) + assertEquals(variations?.get(0)?.originalImageUrl, uploadImageAsyncReq.asyncPictureData.url) + } + } private fun generateProductSelectOption(name: String, values: List): UpdatedProduct.ProductOption { From 761f22872c432cc1612c3e376cf4383043d4e4e2 Mon Sep 17 00:00:00 2001 From: Sina Bagherzadeh Date: Wed, 14 Sep 2022 16:27:17 +0200 Subject: [PATCH 4/5] ECWID-107598: ProductVariationImageAsyncUploadRequest fields initialized --- .../request/ProductVariationImageAsyncUploadRequest.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt b/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt index 10a105b40..ffd0a052c 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/dto/variation/request/ProductVariationImageAsyncUploadRequest.kt @@ -6,9 +6,9 @@ import com.ecwid.apiclient.v3.httptransport.HttpBody import com.ecwid.apiclient.v3.impl.RequestInfo data class ProductVariationImageAsyncUploadRequest( - val productId: Int, - val variationId: Int, - val asyncPictureData: AsyncPictureData + val productId: Int = 0, + val variationId: Int = 0, + val asyncPictureData: AsyncPictureData = AsyncPictureData() ) : ApiRequest { override fun toRequestInfo(): RequestInfo { return RequestInfo.createPostRequest( From 81c5ff6a301ce8c6c942c019b4b935475091cb17 Mon Sep 17 00:00:00 2001 From: Sina Bagherzadeh Date: Thu, 15 Sep 2022 12:54:04 +0200 Subject: [PATCH 5/5] ECWID-107598: uploadProductVariationImageAsync moved close to uploadVariationImage --- .../apiclient/v3/impl/ProductVariationsApiClientImpl.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/com/ecwid/apiclient/v3/impl/ProductVariationsApiClientImpl.kt b/src/main/kotlin/com/ecwid/apiclient/v3/impl/ProductVariationsApiClientImpl.kt index a9863fdf1..fb5c8bd36 100644 --- a/src/main/kotlin/com/ecwid/apiclient/v3/impl/ProductVariationsApiClientImpl.kt +++ b/src/main/kotlin/com/ecwid/apiclient/v3/impl/ProductVariationsApiClientImpl.kt @@ -16,12 +16,12 @@ internal class ProductVariationsApiClientImpl( override fun uploadVariationImage(request: ProductVariationImageUploadRequest) = apiClientHelper.makeObjectResultRequest(request) - override fun deleteVariationImage(request: ProductVariationImageDeleteRequest) = - apiClientHelper.makeObjectResultRequest(request) - override fun uploadProductVariationImageAsync(request: ProductVariationImageAsyncUploadRequest) = apiClientHelper.makeObjectResultRequest(request) + override fun deleteVariationImage(request: ProductVariationImageDeleteRequest) = + apiClientHelper.makeObjectResultRequest(request) + override fun getAllProductVariations(request: ProductVariationsRequest) = apiClientHelper.makeObjectResultRequest(request)