Skip to content

Commit 936e384

Browse files
bors[bot]meili-botalallema
authored
Merge #482
482: Changes related to the next Meilisearch release (v0.30.0) r=alallema a=meili-bot Related to this issue: meilisearch/integration-guides#221 This PR: - gathers the changes related to the next Meilisearch release (v0.30.0) so that this package is ready when the official release is out. - should pass the tests against the [latest pre-release of Meilisearch](https://github.com/meilisearch/meilisearch/releases). - might eventually contain test failures until the Meilisearch v0.30.0 is out. ⚠️ This PR should NOT be merged until the next release of Meilisearch (v0.30.0) is out. _This PR is auto-generated for the [pre-release week](https://github.com/meilisearch/integration-guides/blob/main/resources/pre-release-week.md) purpose._ Done: - #544 - #545 - #546 - #547 - #548 - #554 Co-authored-by: meili-bot <[email protected]> Co-authored-by: Amélie <[email protected]> Co-authored-by: alallema <[email protected]>
2 parents abaf2eb + d49f11d commit 936e384

25 files changed

+676
-51
lines changed

.github/workflows/tests.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ jobs:
2626
cache: gradle
2727
- name: Grant execute permission for gradlew
2828
run: chmod +x gradlew
29-
- name: Meilisearch (v0.29.3 version) setup with Docker
30-
run: docker run -d -p 7700:7700 getmeili/meilisearch:v0.29.3 meilisearch --no-analytics --master-key='masterKey'
29+
- name: Meilisearch (v0.30.5 version) setup with Docker
30+
run: docker run -d -p 7700:7700 getmeili/meilisearch:v0.30.5 meilisearch --no-analytics --master-key='masterKey'
3131
- name: Build and run unit and integration tests
3232
run: ./gradlew build integrationTest
3333
- name: Archive test report

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ Client client = new Client(config);
263263

264264
## 🤖 Compatibility with Meilisearch
265265

266-
This package only guarantees compatibility with the [version v0.29.0 of Meilisearch](https://github.com/meilisearch/meilisearch/releases/tag/v0.29.0).
266+
This package only guarantees compatibility with the [version v0.30.0 of Meilisearch](https://github.com/meilisearch/meilisearch/releases/tag/v0.30.0).
267267

268268
## 💡 Learn more
269269

src/main/java/com/meilisearch/sdk/Client.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@
77
import com.auth0.jwt.algorithms.Algorithm;
88
import com.meilisearch.sdk.exceptions.MeilisearchException;
99
import com.meilisearch.sdk.json.JsonHandler;
10+
import com.meilisearch.sdk.model.CancelTasksQuery;
11+
import com.meilisearch.sdk.model.DeleteTasksQuery;
1012
import com.meilisearch.sdk.model.IndexesQuery;
1113
import com.meilisearch.sdk.model.Key;
1214
import com.meilisearch.sdk.model.KeyUpdate;
1315
import com.meilisearch.sdk.model.KeysQuery;
1416
import com.meilisearch.sdk.model.Results;
1517
import com.meilisearch.sdk.model.Stats;
18+
import com.meilisearch.sdk.model.SwapIndexesParams;
1619
import com.meilisearch.sdk.model.Task;
1720
import com.meilisearch.sdk.model.TaskInfo;
1821
import com.meilisearch.sdk.model.TasksQuery;
@@ -175,6 +178,18 @@ public TaskInfo deleteIndex(String uid) throws MeilisearchException {
175178
return this.indexesHandler.deleteIndex(uid);
176179
}
177180

181+
/**
182+
* Swap the documents, settings, and task history of two or more indexes
183+
* https://docs.meilisearch.com/reference/api/indexes.html#swap-indexes
184+
*
185+
* @param param accepted by the swap-indexes route
186+
* @return Meilisearch API response as TaskInfo
187+
* @throws MeilisearchException if an error occurs
188+
*/
189+
public TaskInfo swapIndexes(SwapIndexesParams[] param) throws MeilisearchException {
190+
return config.httpClient.post("/swap-indexes", param, TaskInfo.class);
191+
}
192+
178193
/**
179194
* Triggers the creation of a Meilisearch dump.
180195
* https://docs.meilisearch.com/reference/api/dump.html#create-a-dump
@@ -264,6 +279,30 @@ public TasksResults getTasks(TasksQuery param) throws MeilisearchException {
264279
return this.tasksHandler.getTasks(param);
265280
}
266281

282+
/**
283+
* Cancel any number of enqueued or processing tasks
284+
* https://docs.meilisearch.com/reference/api/tasks.html#cancel-tasks
285+
*
286+
* @param param accept by the tasks route
287+
* @return Meilisearch API response as TaskInfo
288+
* @throws MeilisearchException if an error occurs
289+
*/
290+
public TaskInfo cancelTasks(CancelTasksQuery param) throws MeilisearchException {
291+
return this.tasksHandler.cancelTasks(param);
292+
}
293+
294+
/**
295+
* Delete a finished (succeeded, failed, or canceled) task
296+
* https://docs.meilisearch.com/reference/api/tasks.html#delete-tasks
297+
*
298+
* @param param accept by the tasks route
299+
* @return Meilisearch API response as TaskInfo
300+
* @throws MeilisearchException if an error occurs
301+
*/
302+
public TaskInfo deleteTasks(DeleteTasksQuery param) throws MeilisearchException {
303+
return this.tasksHandler.deleteTasks(param);
304+
}
305+
267306
/**
268307
* Waits for a task to be processed
269308
*

src/main/java/com/meilisearch/sdk/Index.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.meilisearch.sdk.model.IndexStats;
77
import com.meilisearch.sdk.model.Results;
88
import com.meilisearch.sdk.model.SearchResult;
9+
import com.meilisearch.sdk.model.Searchable;
910
import com.meilisearch.sdk.model.Settings;
1011
import com.meilisearch.sdk.model.Task;
1112
import com.meilisearch.sdk.model.TaskInfo;
@@ -345,7 +346,7 @@ public SearchResult search(String q) throws MeilisearchException {
345346
* @return Meilisearch API response
346347
* @throws MeilisearchException if an error occurs
347348
*/
348-
public SearchResult search(SearchRequest searchRequest) throws MeilisearchException {
349+
public Searchable search(SearchRequest searchRequest) throws MeilisearchException {
349350
return this.search.search(this.uid, searchRequest);
350351
}
351352

src/main/java/com/meilisearch/sdk/Search.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.meilisearch.sdk.exceptions.MeilisearchException;
44
import com.meilisearch.sdk.model.SearchResult;
5+
import com.meilisearch.sdk.model.SearchResultPaginated;
6+
import com.meilisearch.sdk.model.Searchable;
57

68
/**
79
* Class used for searching on Meilisearch indexes
@@ -67,7 +69,10 @@ SearchResult search(String uid, String q) throws MeilisearchException {
6769
* @return search results
6870
* @throws MeilisearchException Search Exception or Client Error
6971
*/
70-
SearchResult search(String uid, SearchRequest sr) throws MeilisearchException {
72+
Searchable search(String uid, SearchRequest sr) throws MeilisearchException {
73+
if (sr != null && (sr.getPage() != null || sr.getHitsPerPage() != null)) {
74+
return httpClient.jsonHandler.decode(rawSearch(uid, sr), SearchResultPaginated.class);
75+
}
7176
return httpClient.jsonHandler.decode(rawSearch(uid, sr), SearchResult.class);
7277
}
7378
}

src/main/java/com/meilisearch/sdk/SearchRequest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ public class SearchRequest {
3434
private Boolean showMatchesPosition;
3535
private String[] facets;
3636
private String[] sort;
37+
protected Integer page;
38+
protected Integer hitsPerPage;
3739

3840
/**
3941
* Constructor for SearchRequest for building search queries with the default values: offset: 0,
@@ -85,6 +87,8 @@ public String toString() {
8587
.put("showMatchesPosition", this.showMatchesPosition)
8688
.put("facets", this.facets)
8789
.put("sort", this.sort)
90+
.put("page", this.page)
91+
.put("hitsPerPage", this.hitsPerPage)
8892
.putOpt("attributesToCrop", this.attributesToCrop)
8993
.putOpt("attributesToHighlight", this.attributesToHighlight)
9094
.putOpt("filter", this.filter)

src/main/java/com/meilisearch/sdk/TasksHandler.java

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
import com.meilisearch.sdk.exceptions.MeilisearchException;
44
import com.meilisearch.sdk.exceptions.MeilisearchTimeoutException;
55
import com.meilisearch.sdk.http.URLBuilder;
6+
import com.meilisearch.sdk.model.CancelTasksQuery;
7+
import com.meilisearch.sdk.model.DeleteTasksQuery;
68
import com.meilisearch.sdk.model.Task;
9+
import com.meilisearch.sdk.model.TaskInfo;
710
import com.meilisearch.sdk.model.TasksQuery;
811
import com.meilisearch.sdk.model.TasksResults;
912
import java.util.Date;
@@ -88,18 +91,40 @@ TasksResults getTasks(String indexUid) throws MeilisearchException {
8891
* @throws MeilisearchException if client request causes an error
8992
*/
9093
TasksResults getTasks(String indexUid, TasksQuery param) throws MeilisearchException {
91-
String[] newIndexUid = new String[param.getIndexUid().length + 1];
92-
if (param != null && param.getIndexUid() != null) {
93-
for (int i = 0; i < param.getIndexUid().length; i++)
94-
newIndexUid[i] = param.getIndexUid()[i];
95-
newIndexUid[param.getIndexUid().length] = indexUid;
96-
}
94+
param = addIndexUidToQuery(indexUid, param);
9795

9896
TasksResults result =
9997
httpClient.get(tasksPath().addQuery(param.toQuery()).getURL(), TasksResults.class);
10098
return result;
10199
}
102100

101+
/**
102+
* Delete tasks from the client
103+
*
104+
* @param param accept by the tasks route
105+
* @return Meilisearch API response as TaskInfo
106+
* @throws MeilisearchException if client request causes an error
107+
*/
108+
TaskInfo cancelTasks(CancelTasksQuery param) throws MeilisearchException {
109+
URLBuilder urlb = tasksPath().addSubroute("cancel");
110+
TaskInfo result =
111+
httpClient.post(urlb.addQuery(param.toQuery()).getURL(), null, TaskInfo.class);
112+
return result;
113+
}
114+
115+
/**
116+
* Delete tasks from the client
117+
*
118+
* @param param accept by the tasks route
119+
* @return Meilisearch API response as TaskInfo
120+
* @throws MeilisearchException if client request causes an error
121+
*/
122+
TaskInfo deleteTasks(DeleteTasksQuery param) throws MeilisearchException {
123+
TaskInfo result =
124+
httpClient.delete(tasksPath().addQuery(param.toQuery()).getURL(), TaskInfo.class);
125+
return result;
126+
}
127+
103128
/**
104129
* Waits for a task to be processed
105130
*
@@ -143,4 +168,20 @@ void waitForTask(int taskUid, int timeoutInMs, int intervalInMs) throws Meilisea
143168
private URLBuilder tasksPath() {
144169
return new URLBuilder("/tasks");
145170
}
171+
172+
/** Add index uid to index uids list in task query */
173+
TasksQuery addIndexUidToQuery(String indexUid, TasksQuery param) {
174+
if (param != null && param.getIndexUids() != null) {
175+
String[] newIndexUid = new String[param.getIndexUids().length + 1];
176+
for (int i = 0; i < param.getIndexUids().length; i++)
177+
newIndexUid[i] = param.getIndexUids()[i];
178+
newIndexUid[param.getIndexUids().length] = indexUid;
179+
param.setIndexUids(newIndexUid);
180+
} else if (param != null) {
181+
param.setIndexUids(new String[] {indexUid});
182+
} else {
183+
param = new TasksQuery().setIndexUids(new String[] {indexUid});
184+
}
185+
return param;
186+
}
146187
}

src/main/java/com/meilisearch/sdk/http/URLBuilder.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.meilisearch.sdk.http;
22

3+
import java.text.SimpleDateFormat;
4+
import java.util.Arrays;
5+
import java.util.Date;
36
import lombok.Getter;
47

58
@Getter
@@ -52,6 +55,27 @@ public URLBuilder addParameter(String parameter, String[] value) {
5255
return this;
5356
}
5457

58+
public URLBuilder addParameter(String parameter, int[] value) {
59+
if (value != null && value.length > 0) {
60+
addSeparator();
61+
params.append(parameter);
62+
params.append("=");
63+
params.append(formatArrayParameters(value));
64+
}
65+
return this;
66+
}
67+
68+
public URLBuilder addParameter(String parameter, Date value) {
69+
if (value != null) {
70+
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
71+
addSeparator();
72+
params.append(parameter);
73+
params.append("=");
74+
params.append(formatter.format(value));
75+
}
76+
return this;
77+
}
78+
5579
public URLBuilder addQuery(String query) {
5680
this.params.append(query);
5781
return this;
@@ -70,6 +94,11 @@ private String formatArrayParameters(String[] fields) {
7094
return String.join(",", fields);
7195
}
7296

97+
private String formatArrayParameters(int[] fields) {
98+
String[] arr = Arrays.stream(fields).mapToObj(String::valueOf).toArray(String[]::new);
99+
return String.join(",", arr);
100+
}
101+
73102
public String getURL() {
74103
return routes.toString() + params.toString();
75104
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.meilisearch.sdk.model;
2+
3+
import com.meilisearch.sdk.http.URLBuilder;
4+
import java.util.Date;
5+
import lombok.Getter;
6+
import lombok.Setter;
7+
import lombok.experimental.Accessors;
8+
9+
/**
10+
* Data structure of a query parameter for tasks route
11+
*
12+
* <p>https://docs.meilisearch.com/reference/api/tasks.html#query-parameters
13+
*/
14+
@Setter
15+
@Getter
16+
@Accessors(chain = true)
17+
public class CancelTasksQuery {
18+
private int[] uids;
19+
private String[] statuses;
20+
private String[] types;
21+
private String[] indexUids;
22+
private Date beforeEnqueuedAt;
23+
private Date afterEnqueuedAt;
24+
private Date beforeStartedAt;
25+
private Date afterStartedAt;
26+
27+
public CancelTasksQuery() {}
28+
29+
public String toQuery() {
30+
URLBuilder urlb =
31+
new URLBuilder()
32+
.addParameter("uids", this.getUids())
33+
.addParameter("statuses", this.getStatuses())
34+
.addParameter("types", this.getTypes())
35+
.addParameter("indexUids", this.getIndexUids())
36+
.addParameter("beforeEnqueuedAt", this.getBeforeEnqueuedAt())
37+
.addParameter("afterEnqueuedAt", this.getAfterEnqueuedAt())
38+
.addParameter("beforeStartedAt", this.getBeforeStartedAt())
39+
.addParameter("afterStartedAt", this.getAfterStartedAt());
40+
return urlb.getURL();
41+
}
42+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.meilisearch.sdk.model;
2+
3+
import com.meilisearch.sdk.http.URLBuilder;
4+
import java.util.Date;
5+
import lombok.Getter;
6+
import lombok.Setter;
7+
import lombok.experimental.Accessors;
8+
9+
/**
10+
* Data structure of a query parameter for tasks route
11+
*
12+
* <p>https://docs.meilisearch.com/reference/api/tasks.html#query-parameters
13+
*/
14+
@Setter
15+
@Getter
16+
@Accessors(chain = true)
17+
public class DeleteTasksQuery {
18+
private int[] uids;
19+
private String[] statuses;
20+
private String[] types;
21+
private String[] indexUids;
22+
private int[] canceledBy;
23+
private Date beforeEnqueuedAt;
24+
private Date afterEnqueuedAt;
25+
private Date beforeStartedAt;
26+
private Date afterStartedAt;
27+
private Date beforeFinishedAt;
28+
private Date afterFinishedAt;
29+
30+
public DeleteTasksQuery() {}
31+
32+
public String toQuery() {
33+
URLBuilder urlb =
34+
new URLBuilder()
35+
.addParameter("uids", this.getUids())
36+
.addParameter("statuses", this.getStatuses())
37+
.addParameter("types", this.getTypes())
38+
.addParameter("indexUids", this.getIndexUids())
39+
.addParameter("canceledBy", this.getCanceledBy())
40+
.addParameter("beforeEnqueuedAt", this.getBeforeEnqueuedAt())
41+
.addParameter("afterEnqueuedAt", this.getAfterEnqueuedAt())
42+
.addParameter("beforeStartedAt", this.getBeforeStartedAt())
43+
.addParameter("afterStartedAt", this.getAfterStartedAt())
44+
.addParameter("beforeFinishedAt", this.getBeforeFinishedAt())
45+
.addParameter("afterFinishedAt", this.getAfterFinishedAt());
46+
return urlb.getURL();
47+
}
48+
}

0 commit comments

Comments
 (0)