Skip to content

Commit bdca5ea

Browse files
esezenmocca102
andauthored
[CDX-172] Add preFilterExpression to AutocompleteRequest (#160)
* feat: add preFilterExpression support to autocomplete requests * Lint * Update constructorio-client/src/test/java/io/constructor/client/ConstructorIOAutocompleteTest.java --------- Co-authored-by: Islam Moustafa <58053149+mocca102@users.noreply.github.com>
1 parent df2d668 commit bdca5ea

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-1
lines changed

constructorio-client/src/main/java/io/constructor/client/AutocompleteRequest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public class AutocompleteRequest {
1414
private Map<String, List<String>> filters;
1515
private VariationsMap variationsMap;
1616
private Map<String, Map<String, List<String>>> filtersPerSection;
17+
private String preFilterExpression;
1718

1819
/**
1920
* Creates an autocomplete request
@@ -31,6 +32,7 @@ public AutocompleteRequest(String query) throws IllegalArgumentException {
3132
this.filters = new HashMap<String, List<String>>();
3233
this.filtersPerSection = new HashMap<String, Map<String, List<String>>>();
3334
this.variationsMap = null;
35+
this.preFilterExpression = null;
3436
}
3537

3638
/**
@@ -116,4 +118,20 @@ public void setVariationsMap(VariationsMap variationsMap) {
116118
public VariationsMap getVariationsMap() {
117119
return variationsMap;
118120
}
121+
122+
/**
123+
* @param preFilterExpression the faceting expression to scope autocomplete results
124+
* (JSON-encoded query string). Please refer to
125+
* https://docs.constructor.com/reference/shared-filter-expressions
126+
*/
127+
public void setPreFilterExpression(String preFilterExpression) {
128+
this.preFilterExpression = preFilterExpression;
129+
}
130+
131+
/**
132+
* @return the prefilter expression
133+
*/
134+
public String getPreFilterExpression() {
135+
return preFilterExpression;
136+
}
119137
}

constructorio-client/src/main/java/io/constructor/client/ConstructorIO.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -905,6 +905,14 @@ public String autocompleteAsJSON(AutocompleteRequest req, UserInfo userInfo)
905905
.build();
906906
}
907907

908+
if (req.getPreFilterExpression() != null) {
909+
url =
910+
url.newBuilder()
911+
.addQueryParameter(
912+
"pre_filter_expression", req.getPreFilterExpression())
913+
.build();
914+
}
915+
908916
Request request = this.makeUserRequestBuilder(userInfo).url(url).get().build();
909917

910918
Response response = clientWithRetry.newCall(request).execute();
@@ -2725,7 +2733,6 @@ protected Request createQuizRequest(QuizRequestBase req, String type, UserInfo u
27252733

27262734
List<String> paths = Arrays.asList("v1", "quizzes", req.getQuizId(), type);
27272735
HttpUrl url = this.makeUrl(paths);
2728-
27292736
if (req.getSection() != null) {
27302737
url = url.newBuilder().addQueryParameter("section", req.getSection()).build();
27312738
}

constructorio-client/src/test/java/io/constructor/client/ConstructorIOAutocompleteTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,4 +289,23 @@ public void AutocompleteShouldReturnAResultProvidedVariationsMapAsObject() throw
289289
variationsMap.getGroupBy().get(0).field,
290290
variationsMapFromResponse.getGroupBy().get(0).field);
291291
}
292+
293+
@Test
294+
public void AutocompleteShouldReturnAResultWithPreFilterExpression() throws Exception {
295+
ConstructorIO constructor = new ConstructorIO("", apiKey, true, null);
296+
UserInfo userInfo = new UserInfo(3, "c62a-2a09-faie");
297+
AutocompleteRequest request = new AutocompleteRequest("jacket");
298+
String preFilterExpression =
299+
"{\"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\"]}}]}]}";
300+
request.setPreFilterExpression(preFilterExpression);
301+
302+
AutocompleteResponse response = constructor.autocomplete(request, userInfo);
303+
String preFilterExpressionFromRequestJsonString =
304+
new Gson().toJson(response.getRequest().get("pre_filter_expression"));
305+
306+
assertTrue("autocomplete results exist", response.getSections().size() >= 0);
307+
assertNotNull(
308+
"pre_filter_expression exists", response.getRequest().get("pre_filter_expression"));
309+
assertEquals(preFilterExpression, preFilterExpressionFromRequestJsonString);
310+
}
292311
}

0 commit comments

Comments
 (0)