Skip to content

Commit

Permalink
AI Setting Methods
Browse files Browse the repository at this point in the history
Summary:
- Added methods for AI setting methods for.
- reference: https://support.crowdin.com/developer/api/v2/#tag/AI/operation/api.users.ai.settings.get.
  • Loading branch information
vedantnd111 committed Oct 12, 2024
1 parent 6799340 commit 26666a9
Show file tree
Hide file tree
Showing 7 changed files with 164 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/main/java/com/crowdin/client/Client.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.crowdin.client;

import com.crowdin.client.ai.AiApi;
import com.crowdin.client.applications.ApplicationsApi;
import com.crowdin.client.branches.BranchesApi;
import com.crowdin.client.bundles.BundlesApi;
Expand Down Expand Up @@ -72,6 +73,7 @@ public class Client extends CrowdinApi {
private final ApplicationsApi applicationsApi;
private final ClientsApi clientsApi;
private final BranchesApi branchesApi;
private final AiApi aiApi;

public Client(Credentials credentials) {
super(credentials);
Expand Down Expand Up @@ -107,6 +109,7 @@ public Client(Credentials credentials) {
this.applicationsApi = new ApplicationsApi(credentials);
this.clientsApi = new ClientsApi(credentials);
this.branchesApi = new BranchesApi(credentials);
this.aiApi = new AiApi(credentials);
}

public Client(Credentials credentials, ClientConfig clientConfig) {
Expand Down Expand Up @@ -143,6 +146,7 @@ public Client(Credentials credentials, ClientConfig clientConfig) {
this.applicationsApi = new ApplicationsApi(credentials, clientConfig);
this.clientsApi = new ClientsApi(credentials, clientConfig);
this.branchesApi = new BranchesApi(credentials, clientConfig);
this.aiApi = new AiApi(credentials, clientConfig);
}

}
59 changes: 59 additions & 0 deletions src/main/java/com/crowdin/client/ai/AiApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package com.crowdin.client.ai;

import com.crowdin.client.ai.model.AiSetting;
import com.crowdin.client.ai.model.AiSettingResponseobject;
import com.crowdin.client.core.CrowdinApi;
import com.crowdin.client.core.http.HttpRequestConfig;
import com.crowdin.client.core.http.exceptions.HttpBadRequestException;
import com.crowdin.client.core.http.exceptions.HttpException;
import com.crowdin.client.core.model.ClientConfig;
import com.crowdin.client.core.model.Credentials;
import com.crowdin.client.core.model.PatchRequest;
import com.crowdin.client.core.model.ResponseObject;

import java.util.List;

public class AiApi extends CrowdinApi {


public AiApi(Credentials credentials) {
super(credentials);
}

public AiApi(Credentials credentials, ClientConfig clientConfig) {
super(credentials, clientConfig);
}

/**
* @param userId user identifier
* @return AI settings
* @see <ul>
* <li><a href="https://support.crowdin.com/developer/api/v2/#tag/AI/operation/api.users.ai.settings.get" target="_blank"><b>API Documentation</b></a></li>
* </ul>
*/
public ResponseObject<AiSetting> getAiSetting(Long userId) throws HttpException, HttpBadRequestException {
System.out.println("url: " + this.url + "/users/" + userId + "/ai/settings");
AiSettingResponseobject aiSettingResponseobject = this.httpClient.get(
this.url + "/users/" + userId + "/ai/settings",
new HttpRequestConfig(),
AiSettingResponseobject.class);
System.out.println("aiSettingResponseobject: " + aiSettingResponseobject);
return ResponseObject.of(aiSettingResponseobject.getAiSetting());
}

/**
* @param userId user identifier
* @return updated AI settings
* @see <ul>
* <li><a href="https://support.crowdin.com/developer/api/v2/#tag/AI/operation/api.users.ai.settings.patch" target="_blank"><b>API Documentation</b></a></li>
* </ul>
*/
public ResponseObject<AiSetting> editAiSetting(Long userId, List<PatchRequest> request) {
AiSettingResponseobject aiSettingResponseobject = this.httpClient.patch(
this.url + "/users/" + userId + "/ai/settings",
request,
new HttpRequestConfig(),
AiSettingResponseobject.class);
return ResponseObject.of(aiSettingResponseobject.getAiSetting());
}
}
21 changes: 21 additions & 0 deletions src/main/java/com/crowdin/client/ai/model/AiSetting.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.crowdin.client.ai.model;

import lombok.Data;

import java.util.List;

@Data
public class AiSetting {

private int assistActionAiPromptId;
private int editorSuggestionAiPromptId;

@Data
private static class ShortCut {
private String name;
private String prompt;
private boolean isEnabled;
}

private List<ShortCut> shortCuts;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.crowdin.client.ai.model;

import lombok.Data;

@Data
public class AiSettingResponseobject {

private AiSetting aiSetting;
}
52 changes: 52 additions & 0 deletions src/test/java/com/crowdin/client/ai/AiApiTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.crowdin.client.ai;

import com.crowdin.client.ai.model.AiSetting;
import com.crowdin.client.core.model.PatchOperation;
import com.crowdin.client.core.model.PatchRequest;
import com.crowdin.client.core.model.ResponseObject;
import com.crowdin.client.framework.RequestMock;
import com.crowdin.client.framework.TestClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPatch;
import org.junit.jupiter.api.Test;

import java.util.Collections;
import java.util.List;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;

public class AiApiTest extends TestClient {
private final Long userId = 1L;
private final String settingsApi = this.url + "/users/" + userId + "/ai/settings";

@Override
public List<RequestMock> getMocks() {
return List.of(RequestMock.build(settingsApi, HttpGet.METHOD_NAME, "api/ai/getAiSettingResponse.json"),
RequestMock.build(this.url + "/users/" + userId + "/ai/settings", HttpPatch.METHOD_NAME, "api/ai/editAiSettingRequest.json",
"api/ai/getAiSettingResponse.json"));
}

@Test
public void getAiSettingTest() {
System.out.println("test-url: " + settingsApi);
ResponseObject<AiSetting> aiSettingResponseObject = this.getAiApi().getAiSetting(userId);
AiSetting aiSetting = aiSettingResponseObject.getData();
assertNotNull(aiSetting);
assertEquals(aiSetting.getAssistActionAiPromptId(), 2);
assertEquals(aiSetting.getEditorSuggestionAiPromptId(), 5);
assertEquals(aiSetting.getShortCuts().size(), 1);
}

@Test
public void editAiSettingTest() {
PatchRequest request = new PatchRequest();
request.setOp(PatchOperation.REPLACE);
request.setPath("/assistActionAiPromptId");
ResponseObject<AiSetting> aiSettingResponseObject =
this.getAiApi().editAiSetting(userId, Collections.singletonList(request));
assertNotNull(aiSettingResponseObject.getData());
assertEquals(aiSettingResponseObject.getData().getAssistActionAiPromptId(), 2);
assertEquals(aiSettingResponseObject.getData().getEditorSuggestionAiPromptId(), 5);
}
}
6 changes: 6 additions & 0 deletions src/test/resources/api/ai/editAiSettingRequest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[
{
"op": "replace",
"path": "/assistActionAiPromptId"
}
]
13 changes: 13 additions & 0 deletions src/test/resources/api/ai/getAiSettingResponse.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"data": {
"assistActionAiPromptId": 2,
"editorSuggestionAiPromptId": 5,
"shortcuts": [
{
"name": "My first shortcut",
"prompt": "Make translation shorter",
"enabled": true
}
]
}
}

0 comments on commit 26666a9

Please sign in to comment.