diff --git a/constructorio-client/src/main/java/io/constructor/client/AutocompleteRequest.java b/constructorio-client/src/main/java/io/constructor/client/AutocompleteRequest.java index a17e8aec..7095de33 100644 --- a/constructorio-client/src/main/java/io/constructor/client/AutocompleteRequest.java +++ b/constructorio-client/src/main/java/io/constructor/client/AutocompleteRequest.java @@ -14,6 +14,7 @@ public class AutocompleteRequest { private Map> filters; private VariationsMap variationsMap; private Map>> filtersPerSection; + private String preFilterExpression; /** * Creates an autocomplete request @@ -31,6 +32,7 @@ public AutocompleteRequest(String query) throws IllegalArgumentException { this.filters = new HashMap>(); this.filtersPerSection = new HashMap>>(); this.variationsMap = null; + this.preFilterExpression = null; } /** @@ -116,4 +118,20 @@ public void setVariationsMap(VariationsMap variationsMap) { public VariationsMap getVariationsMap() { return variationsMap; } + + /** + * @param preFilterExpression the faceting expression to scope autocomplete results + * (JSON-encoded query string). Please refer to + * https://docs.constructor.com/reference/shared-filter-expressions + */ + public void setPreFilterExpression(String preFilterExpression) { + this.preFilterExpression = preFilterExpression; + } + + /** + * @return the prefilter expression + */ + public String getPreFilterExpression() { + return preFilterExpression; + } } 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 c8e280d8..f9b18679 100644 --- a/constructorio-client/src/main/java/io/constructor/client/ConstructorIO.java +++ b/constructorio-client/src/main/java/io/constructor/client/ConstructorIO.java @@ -905,6 +905,14 @@ public String autocompleteAsJSON(AutocompleteRequest req, UserInfo userInfo) .build(); } + if (req.getPreFilterExpression() != null) { + url = + url.newBuilder() + .addQueryParameter( + "pre_filter_expression", req.getPreFilterExpression()) + .build(); + } + Request request = this.makeUserRequestBuilder(userInfo).url(url).get().build(); Response response = clientWithRetry.newCall(request).execute(); @@ -2725,7 +2733,6 @@ protected Request createQuizRequest(QuizRequestBase req, String type, UserInfo u List paths = Arrays.asList("v1", "quizzes", req.getQuizId(), type); HttpUrl url = this.makeUrl(paths); - if (req.getSection() != null) { url = url.newBuilder().addQueryParameter("section", req.getSection()).build(); } diff --git a/constructorio-client/src/test/java/io/constructor/client/ConstructorIOAutocompleteTest.java b/constructorio-client/src/test/java/io/constructor/client/ConstructorIOAutocompleteTest.java index d8cbaea8..1f41612b 100644 --- a/constructorio-client/src/test/java/io/constructor/client/ConstructorIOAutocompleteTest.java +++ b/constructorio-client/src/test/java/io/constructor/client/ConstructorIOAutocompleteTest.java @@ -289,4 +289,23 @@ public void AutocompleteShouldReturnAResultProvidedVariationsMapAsObject() throw variationsMap.getGroupBy().get(0).field, variationsMapFromResponse.getGroupBy().get(0).field); } + + @Test + public void AutocompleteShouldReturnAResultWithPreFilterExpression() throws Exception { + ConstructorIO constructor = new ConstructorIO("", apiKey, true, null); + UserInfo userInfo = new UserInfo(3, "c62a-2a09-faie"); + AutocompleteRequest request = new AutocompleteRequest("jacket"); + String preFilterExpression = + "{\"or\":[{\"and\":[{\"name\":\"group_id\",\"value\":\"electronics-group-id\"},{\"name\":\"Price\",\"range\":[\"-inf\",200.0]}]},{\"and\":[{\"name\":\"Type\",\"value\":\"Laptop\"},{\"not\":{\"name\":\"Price\",\"range\":[800.0,\"inf\"]}}]}]}"; + request.setPreFilterExpression(preFilterExpression); + + AutocompleteResponse response = constructor.autocomplete(request, userInfo); + String preFilterExpressionFromRequestJsonString = + new Gson().toJson(response.getRequest().get("pre_filter_expression")); + + assertTrue("autocomplete results exist", response.getSections().size() >= 0); + assertNotNull( + "pre_filter_expression exists", response.getRequest().get("pre_filter_expression")); + assertEquals(preFilterExpression, preFilterExpressionFromRequestJsonString); + } }