Skip to content

Commit 24afb6a

Browse files
authored
Merge branch 'main' into bump-meilisearch-v1.13
2 parents 5058702 + 5138fe1 commit 24afb6a

File tree

11 files changed

+286
-17
lines changed

11 files changed

+286
-17
lines changed

build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ configurations {
5050

5151
dependencies {
5252
// This dependency is used internally, and not exposed to consumers on their own compile classpath.
53-
implementation 'com.google.code.gson:gson:2.11.0'
54-
implementation 'org.json:json:20240303'
53+
implementation 'com.google.code.gson:gson:2.12.1'
54+
implementation 'org.json:json:20250107'
5555
// https://mvnrepository.com/artifact/org.apache.httpcomponents.client5/httpclient5
5656
api 'com.squareup.okhttp3:okhttp:[4.10.0,5.0.0)'
5757

@@ -61,7 +61,7 @@ dependencies {
6161
// https://mvnrepository.com/artifact/org.mockito/mockito-core
6262
testImplementation 'org.mockito:mockito-core:4.9.0'
6363
testImplementation 'org.hamcrest:hamcrest:3.0'
64-
testImplementation 'com.squareup.okio:okio:3.9.1'
64+
testImplementation 'com.squareup.okio:okio:3.10.2'
6565
testImplementation 'com.squareup.okhttp3:okhttp:4.12.0'
6666
testImplementation 'com.fasterxml.jackson.core:jackson-databind:2.18.2'
6767

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

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,9 @@
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;
12-
import com.meilisearch.sdk.model.IndexesQuery;
13-
import com.meilisearch.sdk.model.Key;
14-
import com.meilisearch.sdk.model.KeyUpdate;
15-
import com.meilisearch.sdk.model.KeysQuery;
16-
import com.meilisearch.sdk.model.MultiSearchResult;
17-
import com.meilisearch.sdk.model.Results;
18-
import com.meilisearch.sdk.model.Stats;
19-
import com.meilisearch.sdk.model.SwapIndexesParams;
20-
import com.meilisearch.sdk.model.Task;
21-
import com.meilisearch.sdk.model.TaskInfo;
22-
import com.meilisearch.sdk.model.TasksQuery;
23-
import com.meilisearch.sdk.model.TasksResults;
10+
import com.meilisearch.sdk.model.*;
11+
import com.meilisearch.sdk.model.batch.req.BatchesQuery;
12+
import com.meilisearch.sdk.model.batch.res.Batch;
2413
import java.util.Date;
2514
import java.util.HashMap;
2615
import java.util.Map;
@@ -352,6 +341,29 @@ public void waitForTask(int uid) throws MeilisearchException {
352341
this.tasksHandler.waitForTask(uid);
353342
}
354343

344+
/**
345+
* Retrieves a batch by its unique identifier, with exception handling.
346+
*
347+
* @param uid The unique identifier of the batch.
348+
* @return The Batch object corresponding to the given uid.
349+
* @throws MeilisearchException If an error occurs during the request.
350+
*/
351+
public Batch getBatch(int uid) throws MeilisearchException {
352+
return this.tasksHandler.getBatch(uid);
353+
}
354+
355+
/**
356+
* Retrieves all batches based on the provided query parameters, with exception handling.
357+
*
358+
* @param batchesQuery An instance of BatchesQuery containing filtering criteria.
359+
* @return A CursorResults object containing a list of Batch objects.
360+
* @throws MeilisearchException If an error occurs during the request.
361+
*/
362+
public CursorResults<Batch> getAllBatches(BatchesQuery batchesQuery)
363+
throws MeilisearchException {
364+
return this.tasksHandler.getAllBatches(batchesQuery);
365+
}
366+
355367
/**
356368
* Retrieves the key with the specified uid
357369
*

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.meilisearch.sdk.exceptions.MeilisearchTimeoutException;
55
import com.meilisearch.sdk.http.URLBuilder;
66
import com.meilisearch.sdk.model.*;
7+
import com.meilisearch.sdk.model.batch.req.BatchesQuery;
8+
import com.meilisearch.sdk.model.batch.res.Batch;
79
import java.util.Date;
810

911
/**
@@ -159,11 +161,38 @@ void waitForTask(int taskUid, int timeoutInMs, int intervalInMs) throws Meilisea
159161
}
160162
}
161163

164+
/**
165+
* Retrieves a batch by uid.
166+
*
167+
* @param uid The unique identifier of the batch.
168+
* @return The Batch object corresponding to the given uid.
169+
*/
170+
public Batch getBatch(int uid) {
171+
String urlPath = batchPath().addSubroute(Integer.toString(uid)).getURL();
172+
return httpClient.get(urlPath, Batch.class);
173+
}
174+
175+
/**
176+
* Retrieves all batches based on the provided query parameters.
177+
*
178+
* @param batchesQuery An instance of BatchesQuery containing filtering criteria.
179+
* @return A CursorResults object containing a paginated list of Batch objects.
180+
*/
181+
public CursorResults<Batch> getAllBatches(BatchesQuery batchesQuery) {
182+
String urlPath = batchPath().addQuery(batchesQuery.toQuery()).getURL();
183+
return (CursorResults<Batch>) httpClient.get(urlPath, CursorResults.class, Batch.class);
184+
}
185+
162186
/** Creates an URLBuilder for the constant route tasks */
163187
private URLBuilder tasksPath() {
164188
return new URLBuilder("/tasks");
165189
}
166190

191+
/** Constructs a URLBuilder instance for the "/batches" API endpoint. */
192+
private URLBuilder batchPath() {
193+
return new URLBuilder("/batches");
194+
}
195+
167196
/** Add index uid to index uids list in task query */
168197
TasksQuery addIndexUidToQuery(String indexUid, TasksQuery param) {
169198
if (param != null && param.getIndexUids() != null) {
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.meilisearch.sdk.enums;
2+
3+
import com.fasterxml.jackson.annotation.JsonValue;
4+
import com.google.gson.annotations.SerializedName;
5+
6+
/**
7+
* Enum for Operation Type
8+
*
9+
* @see <a href="https://www.meilisearch.com/docs/reference/api/tasks#type">API specification</a>
10+
*/
11+
public enum OperationType {
12+
@SerializedName("indexCreation")
13+
INDEX_CREATION("indexCreation"),
14+
@SerializedName("indexUpdate")
15+
INDEX_UPDATE("indexUpdate"),
16+
@SerializedName("indexDeletion")
17+
INDEX_DELETE("indexDeletion"),
18+
@SerializedName("indexSwap")
19+
INDEX_SWAP("indexSwap"),
20+
@SerializedName("documentAdditionOrUpdate")
21+
DOCUMENT_UPSERT("documentAdditionOrUpdate"),
22+
@SerializedName("documentDeletion")
23+
DOCUMENT_DELETE("documentDeletion"),
24+
@SerializedName("settingsUpdate")
25+
SETTINGS_UPDATE("settingsUpdate"),
26+
@SerializedName("dumpCreation")
27+
DUMP_CREATE("dumpCreation"),
28+
@SerializedName("taskCancelation")
29+
TASK_CANCEL("taskCancelation"),
30+
@SerializedName("taskDeletion")
31+
TASK_DELETE("taskDeletion"),
32+
@SerializedName("snapshotCreation")
33+
SNAPSHOT_CREATE("snapshotCreation");
34+
35+
public final String operationType;
36+
37+
OperationType(String operationType) {
38+
this.operationType = operationType;
39+
}
40+
41+
@JsonValue
42+
@Override
43+
public String toString() {
44+
return this.operationType;
45+
}
46+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.meilisearch.sdk.model;
2+
3+
import java.util.List;
4+
import lombok.Data;
5+
6+
/**
7+
* Data structure paginated response Currently used in : Batches.
8+
*
9+
* @see <a href="https://www.meilisearch.com/docs/reference/api/batches#response">API
10+
* specification</a>
11+
*/
12+
@Data
13+
public class CursorResults<T> {
14+
private List<T> results;
15+
private int limit;
16+
private int from;
17+
private Integer next;
18+
private int total;
19+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.meilisearch.sdk.model.batch.req;
2+
3+
import com.meilisearch.sdk.http.URLBuilder;
4+
import java.util.Date;
5+
import lombok.Data;
6+
import lombok.experimental.Accessors;
7+
8+
/**
9+
* Data structure of a query parameter for batches route
10+
*
11+
* @see <a href="https://www.meilisearch.com/docs/reference/api/batches#query-parameters">API
12+
* specification</a>
13+
*/
14+
@Data
15+
@Accessors(chain = true)
16+
public class BatchesQuery {
17+
private int[] uids;
18+
private int[] batchUids;
19+
private String[] types;
20+
private String[] statuses;
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+
private int limit = -1;
30+
private int from = -1;
31+
32+
public String toQuery() {
33+
URLBuilder urlb =
34+
new URLBuilder()
35+
.addParameter("uids", this.getUids())
36+
.addParameter("batchUids", this.getBatchUids())
37+
.addParameter("types", this.getTypes())
38+
.addParameter("statuses", this.getStatuses())
39+
.addParameter("indexUids", this.getIndexUids())
40+
.addParameter("canceledBy", this.getCanceledBy())
41+
.addParameter("beforeEnqueuedAt", this.getBeforeEnqueuedAt())
42+
.addParameter("afterEnqueuedAt", this.getAfterEnqueuedAt())
43+
.addParameter("beforeStartedAt", this.getBeforeStartedAt())
44+
.addParameter("afterStartedAt", this.getAfterStartedAt())
45+
.addParameter("beforeFinishedAt", this.getBeforeFinishedAt())
46+
.addParameter("afterFinishedAt", this.getAfterFinishedAt())
47+
.addParameter("limit", this.getLimit())
48+
.addParameter("from", this.getFrom());
49+
return urlb.getURL();
50+
}
51+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.meilisearch.sdk.model.batch.res;
2+
3+
import com.meilisearch.sdk.model.TaskDetails;
4+
import lombok.Data;
5+
6+
/**
7+
* Data structure of the batch object response
8+
*
9+
* @see <a href="https://www.meilisearch.com/docs/reference/api/batches#batch-object">API
10+
* specification</a>
11+
*/
12+
@Data
13+
public class Batch {
14+
private int uid = 0;
15+
private TaskDetails details;
16+
private BatchProgress progress;
17+
private StatDetails stats;
18+
private String startedAt;
19+
private String finishedAt;
20+
private String duration;
21+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.meilisearch.sdk.model.batch.res;
2+
3+
import java.util.List;
4+
import lombok.Data;
5+
6+
@Data
7+
class BatchProgress {
8+
private List<StepDetails> steps;
9+
private int percentage;
10+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.meilisearch.sdk.model.batch.res;
2+
3+
import com.meilisearch.sdk.enums.OperationType;
4+
import com.meilisearch.sdk.model.TaskStatus;
5+
import java.util.Map;
6+
import lombok.Data;
7+
8+
@Data
9+
public class StatDetails {
10+
private int totalNbTasks;
11+
private Map<TaskStatus, Integer> status;
12+
private Map<OperationType, Integer> types;
13+
private Map<String, Integer> indexUids;
14+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.meilisearch.sdk.model.batch.res;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
class StepDetails {
7+
private String currentStep;
8+
private int finished;
9+
private int total;
10+
}

0 commit comments

Comments
 (0)