Skip to content
Permalink
Browse files
Adds the ability to select the operator to combine the advanced searc…
…h fields.

There's a huge UX flaw here: try to use min and max delivery fee with the operator OR. Makes sense, but confuses the user. Agree?
  • Loading branch information
brunodrugowick committed Feb 20, 2020
1 parent b7fb971 commit a5d756c
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 6 deletions.
@@ -29,34 +29,35 @@ public List<Restaurant> advancedSearch(AdvancedSearch advancedSearch) {
jpql.append("from Restaurant where 1=1 ");

var parameters = new HashMap<String, Object>();
var logicalOperator = advancedSearch.getLogicalOperator().equals("AND") ? "AND" : "OR";

if (StringUtils.hasLength(advancedSearch.getName())) {
jpql.append("and name like :name ");
jpql.append(logicalOperator + " name like :name ");
parameters.put("name", "%" + advancedSearch.getName() + "%");
}

if (StringUtils.hasLength(advancedSearch.getAddress())) {
jpql.append("and address like :address ");
jpql.append(logicalOperator + " address like :address ");
parameters.put("address", "%" + advancedSearch.getAddress() + "%");
}

if (advancedSearch.getMinDeliveryFee() != null) {
jpql.append("and deliveryFee >= :startFee ");
jpql.append(logicalOperator + " deliveryFee >= :startFee ");
parameters.put("startFee", advancedSearch.getMinDeliveryFee());
}

if (advancedSearch.getMaxDeliveryFee() != null) {
jpql.append("and deliveryFee <= :endingFee ");
jpql.append(logicalOperator + " deliveryFee <= :endingFee ");
parameters.put("endingFee", advancedSearch.getMaxDeliveryFee());
}

if (StringUtils.hasLength(advancedSearch.getCuisine())) {
jpql.append("and cuisine.name like :cuisine ");
jpql.append(logicalOperator + " cuisine.name like :cuisine ");
parameters.put("cuisine", "%" + advancedSearch.getCuisine() + "%");
}

if (StringUtils.hasLength(advancedSearch.getCity())) {
jpql.append("and city like :city ");
jpql.append(logicalOperator + " city like :city ");
parameters.put("city", "%" + advancedSearch.getCity() + "%");
}

@@ -16,4 +16,6 @@ public class AdvancedSearch {
private String city;
private String grabngo;
private String active;

private String logicalOperator = "AND";
}
@@ -70,6 +70,13 @@ <h4>Filter Restaurants</h4>
</select>
</div>
-->
<div class="form-group row">
<label class="col col-sm-4" for="logicalOperator">Logical Operator</label>
<select class="form-control col-sm-8" id="logicalOperator" name="logicalOperator">
<option th:selected="${search.getLogicalOperator() == 'AND'}" value="AND">AND</option>
<option th:selected="${search.getLogicalOperator()} == 'OR'" value="OR">OR</option>
</select>
</div>
<div class="form-group row">
<div class="col col-sm-4"></div>
<input class="btn btn-primary col col-sm-8" type="submit" value="Submit">

0 comments on commit a5d756c

Please sign in to comment.