Skip to content

Commit f450f43

Browse files
authored
Merge Search - Sort by options Meeds-io/MIPs#212 (#1950)
2 parents fc092c5 + 2e2586e commit f450f43

File tree

4 files changed

+40
-4
lines changed

4 files changed

+40
-4
lines changed

portlets/src/main/webapp/WEB-INF/conf/gamification/search-configuration.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
<string>rules</string>
4040
</field>
4141
<field name="uri">
42-
<string><![CDATA[/portal/rest/gamification/rules?status=ENABLED&programStatus=ENABLED&type=ALL&dateFilter=STARTED&sortBy=title&sortDescending=false&expand=countRealizations,favorites&limit={limit}&term={keyword}]]></string>
42+
<string><![CDATA[/portal/rest/gamification/rules?status=ENABLED&programStatus=ENABLED&type=ALL&dateFilter=STARTED&expand=countRealizations,favorites&limit={limit}&term={keyword}&sortBy={sortField}&sortDescending={sortDescending}]]></string>
4343
</field>
4444
<field name="enabled">
4545
<boolean>${search.rule.enabled:true}</boolean>

portlets/src/main/webapp/WEB-INF/conf/gamification/search/rule-search-query.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,8 @@
77
@search_filtering@
88
]
99
}
10-
}
10+
},
11+
"sort": [
12+
@sortQuery@
13+
]
1114
}

services/src/main/java/io/meeds/gamification/dao/RuleDAO.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ private String getSortFieldName(String sortField) {
274274
case "id", "createdDate": {
275275
yield "r.id";
276276
}
277-
case "modifiedDate": {
277+
case "date", "modifiedDate": {
278278
yield "r.lastModifiedDate";
279279
}
280280
case "startDate": {

services/src/main/java/io/meeds/gamification/search/RuleSearchConnector.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,25 @@ public class RuleSearchConnector {
8686

8787
private static final String ILLEGAL_SEARCH_CHARACTERS = "\\!?^()+-=<>{}[]:\"*~&|#%@";
8888

89+
private static final String DEFAULT_SORTING_QUERY = """
90+
{
91+
"_score": {
92+
"order": "desc"
93+
}
94+
}
95+
""";
96+
97+
private static final String SORTING_QUERY = """
98+
{
99+
"@sortField@": {
100+
"order": "@sortOrder@"
101+
}
102+
},
103+
"_score"
104+
""";
105+
106+
private static final String SORT_REPLACEMENT = "@sortQuery@";
107+
89108
private final ConfigurationManager configurationManager;
90109

91110
private final ElasticSearchingClient client;
@@ -135,10 +154,12 @@ public List<Long> search(RuleFilter filter, long offset, long limit) {
135154
private String buildQueryStatement(RuleFilter filter, long offset, long limit) {
136155
String queryTemplate = retrieveSearchQuery();
137156
String filterQuery = computeFilterQuery(filter);
157+
String sortQuery = buildSortQuery(filter);
138158
return queryTemplate.replace(LANG, filter.getLocale().toLanguageTag())
139159
.replace("@search_filtering@", filterQuery)
140160
.replace("@offset@", String.valueOf(offset))
141-
.replace("@limit@", String.valueOf(limit));
161+
.replace("@limit@", String.valueOf(limit))
162+
.replace(SORT_REPLACEMENT, sortQuery);
142163
}
143164

144165
private String computeFilterQuery(RuleFilter filter) {
@@ -274,4 +295,16 @@ private String retrieveSearchQuery() {
274295
}
275296
return this.searchQuery;
276297
}
298+
299+
private String buildSortQuery(RuleFilter filter) {
300+
if (StringUtils.isBlank(filter.getSortBy())) {
301+
return DEFAULT_SORTING_QUERY;
302+
}
303+
String sortFiled = filter.getSortBy();
304+
String sortDirection = filter.isSortDescending() ? "desc" : "asc";
305+
return switch (sortFiled) {
306+
case "date" -> SORTING_QUERY.replace("@sortField@", "lastUpdatedDate").replace("@sortOrder@", sortDirection);
307+
default -> DEFAULT_SORTING_QUERY;
308+
};
309+
}
277310
}

0 commit comments

Comments
 (0)