From 26f863546af755948b09bd7d2b9d4cc401b09b75 Mon Sep 17 00:00:00 2001 From: Ivan Stoyanov Date: Mon, 23 Jan 2017 13:49:48 +0200 Subject: [PATCH] Add the webhook endpoint implementation. --- .idea/compiler.xml | 1 + .../com/nopcommerce/NopCommerceClient.java | 3 ++ .../com/nopcommerce/NopCommerceFactory.java | 14 +++++++- .../auth/ContentTypeRequestInterceptor.java | 13 +++++++ .../java/com/nopcommerce/domain/Image.java | 15 ++++++++ .../java/com/nopcommerce/domain/Product.java | 8 ++++- .../java/com/nopcommerce/domain/WebHook.java | 36 +++++++++++++++++++ .../com/nopcommerce/json/JsonConstants.java | 15 +++++++- 8 files changed, 102 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/nopcommerce/auth/ContentTypeRequestInterceptor.java create mode 100644 src/main/java/com/nopcommerce/domain/Image.java create mode 100644 src/main/java/com/nopcommerce/domain/WebHook.java diff --git a/.idea/compiler.xml b/.idea/compiler.xml index b623d26..67c28c0 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,7 @@ + diff --git a/src/main/java/com/nopcommerce/NopCommerceClient.java b/src/main/java/com/nopcommerce/NopCommerceClient.java index 7e1983e..b32572d 100644 --- a/src/main/java/com/nopcommerce/NopCommerceClient.java +++ b/src/main/java/com/nopcommerce/NopCommerceClient.java @@ -22,4 +22,7 @@ public interface NopCommerceClient @RequestLine("GET /api/orders?limit={limit}&since_id={since-id}&page={page}&fields={fields}") OrderList getOrders(@Param("limit") Integer limit, @Param("page") Integer page, @Param("since-id") String sinceId, @Param("fields") String fields); + + @RequestLine("POST /api/webhooks/registrations") + WebHook createWebhook(WebHook webhook); } diff --git a/src/main/java/com/nopcommerce/NopCommerceFactory.java b/src/main/java/com/nopcommerce/NopCommerceFactory.java index 66bae5b..e8a2df8 100644 --- a/src/main/java/com/nopcommerce/NopCommerceFactory.java +++ b/src/main/java/com/nopcommerce/NopCommerceFactory.java @@ -1,18 +1,30 @@ package com.nopcommerce; +import com.nopcommerce.auth.ContentTypeRequestInterceptor; import com.nopcommerce.auth.OAuthRequestInterceptor; import feign.Feign; +import feign.RequestInterceptor; import feign.jackson.JacksonDecoder; import feign.jackson.JacksonEncoder; +import java.util.ArrayList; + public class NopCommerceFactory { public static NopCommerceClient create(String accessToken, String storeUrl) { + // Prepare the request interceptors + ArrayList requestInterceptors = new ArrayList<>(); + + requestInterceptors.add(new OAuthRequestInterceptor(accessToken)); + requestInterceptors.add(new ContentTypeRequestInterceptor()); + NopCommerceClient nopCommerceClient = Feign.builder() .decoder(new JacksonDecoder()) .encoder(new JacksonEncoder()) - .requestInterceptor(new OAuthRequestInterceptor(accessToken)) +// .logger(new Logger.JavaLogger().appendToFile("http.log")) +// .logLevel(Logger.Level.FULL) + .requestInterceptors(requestInterceptors) .target(NopCommerceClient.class, storeUrl); return nopCommerceClient; diff --git a/src/main/java/com/nopcommerce/auth/ContentTypeRequestInterceptor.java b/src/main/java/com/nopcommerce/auth/ContentTypeRequestInterceptor.java new file mode 100644 index 0000000..ebb43b7 --- /dev/null +++ b/src/main/java/com/nopcommerce/auth/ContentTypeRequestInterceptor.java @@ -0,0 +1,13 @@ +package com.nopcommerce.auth; + +import feign.RequestInterceptor; +import feign.RequestTemplate; + +public class ContentTypeRequestInterceptor implements RequestInterceptor +{ + @Override + public void apply(RequestTemplate template) + { + template.header("Content-Type", "application/json"); + } +} diff --git a/src/main/java/com/nopcommerce/domain/Image.java b/src/main/java/com/nopcommerce/domain/Image.java new file mode 100644 index 0000000..eae34b1 --- /dev/null +++ b/src/main/java/com/nopcommerce/domain/Image.java @@ -0,0 +1,15 @@ +package com.nopcommerce.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.nopcommerce.json.JsonConstants; +import lombok.Data; + +@Data +public class Image +{ + @JsonProperty(value = JsonConstants.ID) + private int id; + + @JsonProperty(value = JsonConstants.IMAGES) + private String src; +} diff --git a/src/main/java/com/nopcommerce/domain/Product.java b/src/main/java/com/nopcommerce/domain/Product.java index 1d80d2b..a2c75d4 100644 --- a/src/main/java/com/nopcommerce/domain/Product.java +++ b/src/main/java/com/nopcommerce/domain/Product.java @@ -10,6 +10,7 @@ import java.math.BigDecimal; import java.util.Date; +import java.util.List; @Data public class Product @@ -29,6 +30,12 @@ public class Product @JsonProperty(value = JsonConstants.SKU) private String sku; + @JsonProperty(value = JsonConstants.SE_NAME) + private String seName; + + @JsonProperty(value = JsonConstants.IMAGES) + private List images; + @JsonProperty(value = JsonConstants.STOCK_QUANTITY) private int stockQuantity; @@ -47,7 +54,6 @@ public class Product @JsonProperty(value = JsonConstants.PRODUCT_TYPE) private ProductType productType; - @JsonProperty(value = JsonConstants.CREATED_ON_UTC) @JsonDeserialize(using = FlexDateDeserializer.class) @JsonSerialize(using = FlexDateSerializer.class) diff --git a/src/main/java/com/nopcommerce/domain/WebHook.java b/src/main/java/com/nopcommerce/domain/WebHook.java new file mode 100644 index 0000000..8015f14 --- /dev/null +++ b/src/main/java/com/nopcommerce/domain/WebHook.java @@ -0,0 +1,36 @@ +package com.nopcommerce.domain; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.nopcommerce.json.JsonConstants; +import lombok.Data; + +import java.util.HashMap; +import java.util.Set; + +@Data +public class WebHook +{ + @JsonProperty(value = JsonConstants.ID) + private String id; + + @JsonProperty(value = JsonConstants.DESCRIPTION) + private String description; + + @JsonProperty(value = JsonConstants.FILTERS) + private Set filters; + + @JsonProperty(value = JsonConstants.IS_PAUSED) + private boolean isPaused; + + @JsonProperty(value = JsonConstants.HEADERS) + private HashMap headers; + + @JsonProperty(value = JsonConstants.PROPERTIES) + private HashMap properties; + + @JsonProperty(value = JsonConstants.SECRET) + private String secret; + + @JsonProperty(value = JsonConstants.WEB_HOOK_UIR) + private String webHookUri; +} diff --git a/src/main/java/com/nopcommerce/json/JsonConstants.java b/src/main/java/com/nopcommerce/json/JsonConstants.java index 5fa6a88..6276ab2 100644 --- a/src/main/java/com/nopcommerce/json/JsonConstants.java +++ b/src/main/java/com/nopcommerce/json/JsonConstants.java @@ -19,7 +19,7 @@ public final class JsonConstants public static final String COUNTRY = "country"; public static final String CITY = "city"; public static final String PROVINCE = "province"; - public static final String PHONE = "phone"; + public static final String PHONE = "phone_number"; public static final String ZIP_CODE = "zip_postal_code"; public static final String ADDRESS1 = "address1"; public static final String ADDRESS2 = "address2"; @@ -35,6 +35,7 @@ public final class JsonConstants public static final String SHORT_DESCRIPTION = "short_description"; public static final String FULL_DESCRIPTION = "full_description"; public static final String SKU = "sku"; + public static final String SE_NAME = "se_name"; public static final String STOCK_QUANTITY = "stock_quantity"; public static final String PRICE = "price"; public static final String OLD_PRICE = "old_price"; @@ -42,6 +43,9 @@ public final class JsonConstants public static final String CUSTOMER_ENTERS_PRICE = "customer_enters_price"; public static final String PRODUCT_TYPE = "product_type"; + // Image + public static final String IMAGES = "images"; + // Product category mapping public static final String PRODUCT_CATEGORY_MAPPINGS = "product_category_mappings"; @@ -63,4 +67,13 @@ public final class JsonConstants public static final String SHIPPING_METHOD = "shipping_method"; public static final String QUANTITY = "quantity"; + + // Webhook + public static final String DESCRIPTION = "Description"; + public static final String FILTERS = "Filters"; + public static final String IS_PAUSED = "IsPaused"; + public static final String HEADERS = "Headers"; + public static final String PROPERTIES = "Properties"; + public static final String SECRET = "Secret"; + public static final String WEB_HOOK_UIR = "WebHookUri"; }