From 238f5e68f24bb5faa72cf95e12505ea99b89d8b5 Mon Sep 17 00:00:00 2001 From: Ali Tariq Date: Mon, 9 Feb 2026 14:42:19 +0500 Subject: [PATCH] added network api --- .code-samples.meilisearch.yaml | 17 ++++++ src/main/java/com/meilisearch/sdk/Client.java | 25 +++++++- .../com/meilisearch/sdk/NetworkHandler.java | 38 ++++++++++++ .../com/meilisearch/sdk/model/Network.java | 24 ++++++++ .../meilisearch/sdk/model/NetworksRemote.java | 29 +++++++++ .../meilisearch/sdk/model/UpdateNetwork.java | 24 ++++++++ .../meilisearch/integration/NetworkTest.java | 59 +++++++++++++++++++ 7 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/meilisearch/sdk/NetworkHandler.java create mode 100644 src/main/java/com/meilisearch/sdk/model/Network.java create mode 100644 src/main/java/com/meilisearch/sdk/model/NetworksRemote.java create mode 100644 src/main/java/com/meilisearch/sdk/model/UpdateNetwork.java create mode 100644 src/test/java/com/meilisearch/integration/NetworkTest.java diff --git a/.code-samples.meilisearch.yaml b/.code-samples.meilisearch.yaml index d0afe54d..0fdb6bf8 100644 --- a/.code-samples.meilisearch.yaml +++ b/.code-samples.meilisearch.yaml @@ -874,3 +874,20 @@ compact_index_1: |- client.index("INDEX_NAME").compact(); rename_an_index_1: |- client.updateIndex("indexA", null, "indexB"); +get_network_1: |- + Network networkState = client.getNetwork(); +update_network_1: |- + HashMap remotes = new HashMap<>(); + remotes.put("ms-00", new NetworksRemote( + "http://INSTANCE_URL", + "INSTANCE_API_KEY", + null)); + remotes.put("ms-01", new NetworksRemote( + "http://ANOTHER_INSTANCE_URL", + "ANOTHER_INSTANCE_API_KEY", + null)); + UpdateNetwork newNetwork = new UpdateNetwork(); + newNetwork.setSelf("ms-00"); + newNetwork.setRemotes(remotes); + + var network = this.client.updateNetwork(newNetwork); diff --git a/src/main/java/com/meilisearch/sdk/Client.java b/src/main/java/com/meilisearch/sdk/Client.java index 888a52dd..b2c5ffda 100644 --- a/src/main/java/com/meilisearch/sdk/Client.java +++ b/src/main/java/com/meilisearch/sdk/Client.java @@ -20,6 +20,7 @@ public class Client { private TasksHandler tasksHandler; private KeysHandler keysHandler; private JsonHandler jsonHandler; + private NetworkHandler networkHandler; /** * Calls instance for Meilisearch client @@ -33,6 +34,7 @@ public Client(Config config) { this.tasksHandler = new TasksHandler(config); this.keysHandler = new KeysHandler(config); this.jsonHandler = config.jsonHandler; + this.networkHandler = new NetworkHandler(config); } /** @@ -42,7 +44,7 @@ public Client(Config config) { * @return Meilisearch API response as TaskInfo * @throws MeilisearchException if an error occurs * @see API - * specification + * specification */ public TaskInfo createIndex(String uid) throws MeilisearchException { return this.createIndex(uid, null); @@ -544,6 +546,27 @@ public String generateTenantToken( return jwtToken; } + /** + * Returns the current value of the instance’s network object. + * + * @return Network object + */ + public Network getNetwork() { + return this.networkHandler.getNetworkState(); + } + + /** + * Update the fields of the network object. Updates to the network object are partial. Only provide the fields you intend to update. + * Fields that are null in the payload will remain unchanged. To reset self and remotes to their original value, set them to null. + * To remove a single remote from your network, set the value of its name to null. + * + * @param updatedNetwork Updated network configs + * @return Updated Network + */ + public Network updateNetwork(UpdateNetwork updatedNetwork) { + return this.networkHandler.updateNetwork(updatedNetwork); + } + private Boolean isValidUUID(String apiKeyUid) { try { UUID uuid = UUID.fromString(apiKeyUid); diff --git a/src/main/java/com/meilisearch/sdk/NetworkHandler.java b/src/main/java/com/meilisearch/sdk/NetworkHandler.java new file mode 100644 index 00000000..3c90bcc9 --- /dev/null +++ b/src/main/java/com/meilisearch/sdk/NetworkHandler.java @@ -0,0 +1,38 @@ +package com.meilisearch.sdk; + +import com.meilisearch.sdk.http.URLBuilder; +import com.meilisearch.sdk.model.Network; +import com.meilisearch.sdk.model.UpdateNetwork; + +public class NetworkHandler { + public final HttpClient httpClient; + + protected NetworkHandler(Config config) { + this.httpClient = config.httpClient; + } + + /** + * Returns the current value of the instance’s network object. + * + * @return Network object + */ + public Network getNetworkState() { + return this.httpClient.get(networkPath().getURL(), Network.class); + } + + /** + * Update the fields of the network object. Updates to the network object are partial. Only provide the fields you intend to update. + * Fields that are null in the payload will remain unchanged. To reset self and remotes to their original value, set them to null. + * To remove a single remote from your network, set the value of its name to null. + * + * @param updatedNetwork Updated network configs + * @return Updated Network + */ + public Network updateNetwork(UpdateNetwork updatedNetwork) { + return this.httpClient.patch(networkPath().getURL(), updatedNetwork, Network.class); + } + + private URLBuilder networkPath() { + return new URLBuilder("/network"); + } +} diff --git a/src/main/java/com/meilisearch/sdk/model/Network.java b/src/main/java/com/meilisearch/sdk/model/Network.java new file mode 100644 index 00000000..83644d73 --- /dev/null +++ b/src/main/java/com/meilisearch/sdk/model/Network.java @@ -0,0 +1,24 @@ +package com.meilisearch.sdk.model; + +import lombok.Getter; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.UUID; + +/** + * Meilisearch Network data structure. + *

+ * API Reference + */ +public class Network implements Serializable { + @Getter + protected String self; + @Getter + protected String leader; + @Getter + protected UUID version; + @Getter + protected HashMap remotes; +} + diff --git a/src/main/java/com/meilisearch/sdk/model/NetworksRemote.java b/src/main/java/com/meilisearch/sdk/model/NetworksRemote.java new file mode 100644 index 00000000..ca502bf2 --- /dev/null +++ b/src/main/java/com/meilisearch/sdk/model/NetworksRemote.java @@ -0,0 +1,29 @@ +package com.meilisearch.sdk.model; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; + +/** + * Meilisearch Network's remote instance's data structure. + *

+ * API Reference + */ +public class NetworksRemote implements Serializable { + @Getter + @Setter + protected String url; + @Getter + @Setter + protected String searchApiKey; + @Getter + @Setter + protected String writeApiKey; + + public NetworksRemote(String url, String searchApiKey, String writeApiKey) { + this.url = url; + this.searchApiKey = searchApiKey; + this.writeApiKey = writeApiKey; + } +} diff --git a/src/main/java/com/meilisearch/sdk/model/UpdateNetwork.java b/src/main/java/com/meilisearch/sdk/model/UpdateNetwork.java new file mode 100644 index 00000000..ed82b3f4 --- /dev/null +++ b/src/main/java/com/meilisearch/sdk/model/UpdateNetwork.java @@ -0,0 +1,24 @@ +package com.meilisearch.sdk.model; + + +import lombok.Setter; + +import java.util.HashMap; + + +/** + * Data structure for updating a network instance. + *

+ * API Reference + */ +public class UpdateNetwork { + @Setter + protected String self; + @Setter + protected String leader; + @Setter + protected HashMap remotes; + + public UpdateNetwork() { + } +} diff --git a/src/test/java/com/meilisearch/integration/NetworkTest.java b/src/test/java/com/meilisearch/integration/NetworkTest.java new file mode 100644 index 00000000..a242b9c5 --- /dev/null +++ b/src/test/java/com/meilisearch/integration/NetworkTest.java @@ -0,0 +1,59 @@ +package com.meilisearch.integration; + +import com.meilisearch.integration.classes.AbstractIT; +import com.meilisearch.sdk.model.Network; +import com.meilisearch.sdk.model.NetworksRemote; +import com.meilisearch.sdk.model.UpdateNetwork; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; + +import java.util.HashMap; +import java.util.TimeZone; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; + +public class NetworkTest extends AbstractIT { + @BeforeEach + void initialize() { + this.setUp(); + this.setUpJacksonClient(); + TimeZone.setDefault(TimeZone.getTimeZone("UTC")); + } + + @AfterEach + void cleanMeilisearch() { + cleanup(); + } + + @Test + public void testGetNetworkState() { + Network networkState = this.client.getNetwork(); + + assertThat(networkState, is(notNullValue())); + assertThat(networkState, is(instanceOf(Network.class))); + } + + @Test + public void patchNetworkState() { + HashMap remotes = new HashMap<>(); + remotes.put("ms-00", new NetworksRemote( + "http://INSTANCE_URL", + "INSTANCE_API_KEY", + null)); + remotes.put("ms-01", new NetworksRemote( + "http://ANOTHER_INSTANCE_URL", + "ANOTHER_INSTANCE_API_KEY", + null)); + UpdateNetwork newNetwork = new UpdateNetwork(); + newNetwork.setSelf("ms-00"); + newNetwork.setRemotes(remotes); + + var network = this.client.updateNetwork(newNetwork); + + assertThat(network, is(notNullValue())); + assertThat(network.getSelf(), is("ms-00")); + assertThat(network.getRemotes(), aMapWithSize(2)); + } +}