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..ec6b9def 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,8 @@ public RecommendationsRequest(String podId) throws IllegalArgumentException { this.variationsMap = null; this.preFilterExpression = null; this.facets = new HashMap>(); + this.formatOptions = new HashMap(); + this.hiddenFields = new ArrayList(); } /** @@ -149,4 +154,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..4b019334 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,25 @@ 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); } }