From ef6982dad21ec6c666b65aba42c7b07233a3bcff Mon Sep 17 00:00:00 2001 From: mocca102 Date: Thu, 6 Mar 2025 21:15:37 +0200 Subject: [PATCH 1/3] Support fmt_options and hidden_fields for Recommendations --- .../io/constructor/client/ConstructorIO.java | 16 +++++++++ .../client/RecommendationsRequest.java | 35 +++++++++++++++++++ .../ConstructorIORecommendationsTest.java | 20 +++++++++++ .../client/RecommendationsRequestTest.java | 7 ++++ 4 files changed, 78 insertions(+) diff --git a/constructorio-client/src/main/java/io/constructor/client/ConstructorIO.java b/constructorio-client/src/main/java/io/constructor/client/ConstructorIO.java index e94e6999..088d27f7 100644 --- a/constructorio-client/src/main/java/io/constructor/client/ConstructorIO.java +++ b/constructorio-client/src/main/java/io/constructor/client/ConstructorIO.java @@ -1818,6 +1818,22 @@ public String recommendationsAsJSON(RecommendationsRequest req, UserInfo userInf .build(); } + for (String formatOptionKey : req.getFormatOptions().keySet()) { + String formatOptionValue = req.getFormatOptions().get(formatOptionKey); + url = + url.newBuilder() + .addQueryParameter( + "fmt_options[" + formatOptionKey + "]", formatOptionValue) + .build(); + } + + for (String hiddenField : req.getHiddenFields()) { + url = + url.newBuilder() + .addQueryParameter("fmt_options[hidden_fields]", hiddenField) + .build(); + } + Request request = this.makeUserRequestBuilder(userInfo).url(url).get().build(); Response response = clientWithRetry.newCall(request).execute(); diff --git a/constructorio-client/src/main/java/io/constructor/client/RecommendationsRequest.java b/constructorio-client/src/main/java/io/constructor/client/RecommendationsRequest.java index 364322e2..e0a06a95 100644 --- a/constructorio-client/src/main/java/io/constructor/client/RecommendationsRequest.java +++ b/constructorio-client/src/main/java/io/constructor/client/RecommendationsRequest.java @@ -1,5 +1,6 @@ package io.constructor.client; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -15,6 +16,8 @@ public class RecommendationsRequest { private String section; private String preFilterExpression; private VariationsMap variationsMap; + private Map formatOptions; + private List hiddenFields; /** * Creates a recommendations request @@ -34,6 +37,9 @@ public RecommendationsRequest(String podId) throws IllegalArgumentException { this.variationsMap = null; this.preFilterExpression = null; this.facets = new HashMap>(); + this.formatOptions = new HashMap(); + this.hiddenFields = new ArrayList(); + this.hiddenFacets = new ArrayList(); } /** @@ -149,4 +155,33 @@ public void setPreFilterExpression(String preFilterExpression) { public String getPreFilterExpression() { return preFilterExpression; } + + /** + * @param formatOptions the formatOptions to set. Please refer to + * https://docs.constructor.com/reference/v1-recommendations-get-pod-results for details + */ + public void setFormatOptions(Map formatOptions) { + this.formatOptions = formatOptions; + } + + /** + * @return the format options + */ + public Map getFormatOptions() { + return formatOptions; + } + + /** + * @param hiddenFields the hiddenFields to set + */ + public void setHiddenFields(List hiddenFields) { + this.hiddenFields = hiddenFields; + } + + /** + * @return the hidden fields + */ + public List getHiddenFields() { + return hiddenFields; + } } diff --git a/constructorio-client/src/test/java/io/constructor/client/ConstructorIORecommendationsTest.java b/constructorio-client/src/test/java/io/constructor/client/ConstructorIORecommendationsTest.java index 8de72cde..49572479 100644 --- a/constructorio-client/src/test/java/io/constructor/client/ConstructorIORecommendationsTest.java +++ b/constructorio-client/src/test/java/io/constructor/client/ConstructorIORecommendationsTest.java @@ -7,6 +7,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; +import java.util.Map; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -139,4 +140,23 @@ public void getRecommendationsShouldReturnAResultTerm() throws Exception { assertEquals(response.getRequest().get("term"), "test"); assertTrue("recommendation result id exists", response.getResultId() != null); } + + @Test + public void getRecommendationsShouldReturnAResultWithFmtOptionsAndHiddenFields() throws Exception { + ConstructorIO constructor = new ConstructorIO("", apiKey, true, null); + UserInfo userInfo = new UserInfo(3, "c62a-2a09-faie"); + RecommendationsRequest request = new RecommendationsRequest("item_page_1"); + request.setItemIds(Arrays.asList("power_drill", "drill")); + request.setNumResults(5); + request.getHiddenFields().add("testField"); + request.getFormatOptions().put("groups_max_depth", "3"); + + RecommendationsResponse response = constructor.recommendations(request, userInfo); + Map fmtOptions = (Map) response.getRequest().get("fmt_options"); + + assertTrue("recommendation results exist", response.getResponse().getResults().size() >= 0); + assertTrue("recommendation result id exists", response.getResultId() != null); + assertEquals(fmtOptions.get("groups_max_depth"), Double.valueOf("3.0")); + assertTrue(((List) fmtOptions.get("hidden_fields")).contains("testField")); + } } diff --git a/constructorio-client/src/test/java/io/constructor/client/RecommendationsRequestTest.java b/constructorio-client/src/test/java/io/constructor/client/RecommendationsRequestTest.java index 46c4fff3..0dda7e8b 100644 --- a/constructorio-client/src/test/java/io/constructor/client/RecommendationsRequestTest.java +++ b/constructorio-client/src/test/java/io/constructor/client/RecommendationsRequestTest.java @@ -47,6 +47,9 @@ public void settersShouldSet() throws Exception { RecommendationsRequest request = new RecommendationsRequest(podId); Map> facets = new HashMap>(); facets.put("Flavors", Arrays.asList("Honey Roasted", "Dry Roasted", "Unsalted")); + Map formatOptions = new HashMap(); + formatOptions.put("groups_start", "top"); + List hiddenFields = Arrays.asList("hiddenField1", "hiddenField2"); request.setPodId("zero_results_1"); request.setNumResults(3); @@ -54,11 +57,15 @@ public void settersShouldSet() throws Exception { request.setSection("Search Suggestions"); request.setFacets(facets); request.setTerm(term); + request.setFormatOptions(formatOptions); + request.setHiddenFields(hiddenFields); assertEquals(request.getPodId(), "zero_results_1"); assertEquals(request.getNumResults(), 3); assertEquals(request.getSection(), "Search Suggestions"); assertEquals(request.getFacets(), facets); assertEquals(request.getTerm(), term); + assertEquals(request.getFormatOptions(), formatOptions); + assertEquals(request.getHiddenFields(), hiddenFields); } } From 53617132f2b707d4eb3c49193d939c7676b3c25d Mon Sep 17 00:00:00 2001 From: mocca102 Date: Thu, 6 Mar 2025 21:17:40 +0200 Subject: [PATCH 2/3] remove hidden_facets --- .../main/java/io/constructor/client/RecommendationsRequest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/constructorio-client/src/main/java/io/constructor/client/RecommendationsRequest.java b/constructorio-client/src/main/java/io/constructor/client/RecommendationsRequest.java index e0a06a95..8a72087c 100644 --- a/constructorio-client/src/main/java/io/constructor/client/RecommendationsRequest.java +++ b/constructorio-client/src/main/java/io/constructor/client/RecommendationsRequest.java @@ -39,7 +39,6 @@ public RecommendationsRequest(String podId) throws IllegalArgumentException { this.facets = new HashMap>(); this.formatOptions = new HashMap(); this.hiddenFields = new ArrayList(); - this.hiddenFacets = new ArrayList(); } /** From 42bd2f0e798f629331e6274181ded148707bfe9d Mon Sep 17 00:00:00 2001 From: mocca102 Date: Thu, 6 Mar 2025 21:30:14 +0200 Subject: [PATCH 3/3] Fix lint --- .../io/constructor/client/RecommendationsRequest.java | 4 ++-- .../client/ConstructorIORecommendationsTest.java | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/constructorio-client/src/main/java/io/constructor/client/RecommendationsRequest.java b/constructorio-client/src/main/java/io/constructor/client/RecommendationsRequest.java index 8a72087c..ec6b9def 100644 --- a/constructorio-client/src/main/java/io/constructor/client/RecommendationsRequest.java +++ b/constructorio-client/src/main/java/io/constructor/client/RecommendationsRequest.java @@ -154,10 +154,10 @@ public void setPreFilterExpression(String preFilterExpression) { public String getPreFilterExpression() { return preFilterExpression; } - + /** * @param formatOptions the formatOptions to set. Please refer to - * https://docs.constructor.com/reference/v1-recommendations-get-pod-results for details + * https://docs.constructor.com/reference/v1-recommendations-get-pod-results for details */ public void setFormatOptions(Map formatOptions) { this.formatOptions = formatOptions; diff --git a/constructorio-client/src/test/java/io/constructor/client/ConstructorIORecommendationsTest.java b/constructorio-client/src/test/java/io/constructor/client/ConstructorIORecommendationsTest.java index 49572479..4b019334 100644 --- a/constructorio-client/src/test/java/io/constructor/client/ConstructorIORecommendationsTest.java +++ b/constructorio-client/src/test/java/io/constructor/client/ConstructorIORecommendationsTest.java @@ -142,7 +142,8 @@ public void getRecommendationsShouldReturnAResultTerm() throws Exception { } @Test - public void getRecommendationsShouldReturnAResultWithFmtOptionsAndHiddenFields() throws Exception { + public void getRecommendationsShouldReturnAResultWithFmtOptionsAndHiddenFields() + throws Exception { ConstructorIO constructor = new ConstructorIO("", apiKey, true, null); UserInfo userInfo = new UserInfo(3, "c62a-2a09-faie"); RecommendationsRequest request = new RecommendationsRequest("item_page_1"); @@ -152,10 +153,11 @@ public void getRecommendationsShouldReturnAResultWithFmtOptionsAndHiddenFields() request.getFormatOptions().put("groups_max_depth", "3"); RecommendationsResponse response = constructor.recommendations(request, userInfo); - Map fmtOptions = (Map) response.getRequest().get("fmt_options"); + Map fmtOptions = + (Map) response.getRequest().get("fmt_options"); assertTrue("recommendation results exist", response.getResponse().getResults().size() >= 0); - assertTrue("recommendation result id exists", response.getResultId() != null); + assertTrue("recommendation result id exists", response.getResultId() != null); assertEquals(fmtOptions.get("groups_max_depth"), Double.valueOf("3.0")); assertTrue(((List) fmtOptions.get("hidden_fields")).contains("testField")); }