From 51042463338e0f2e08be301d7bf2502eb39c456c Mon Sep 17 00:00:00 2001 From: Besomhead Date: Mon, 13 Oct 2025 01:47:41 +0300 Subject: [PATCH 1/2] feat: add ListWorkflowStepStrings operation to Workflows API. --- .../client/workflows/WorkflowsApi.java | 27 ++++++++++++ .../client/workflows/WorkflowsApiTest.java | 9 ++++ .../api/workflows/workflowStrings.json | 43 +++++++++++++++++++ 3 files changed, 79 insertions(+) create mode 100644 src/test/resources/api/workflows/workflowStrings.json diff --git a/src/main/java/com/crowdin/client/workflows/WorkflowsApi.java b/src/main/java/com/crowdin/client/workflows/WorkflowsApi.java index 7b87a0399..b50f08de4 100644 --- a/src/main/java/com/crowdin/client/workflows/WorkflowsApi.java +++ b/src/main/java/com/crowdin/client/workflows/WorkflowsApi.java @@ -8,6 +8,8 @@ import com.crowdin.client.core.model.Credentials; import com.crowdin.client.core.model.ResponseList; import com.crowdin.client.core.model.ResponseObject; +import com.crowdin.client.sourcestrings.model.SourceString; +import com.crowdin.client.sourcestrings.model.SourceStringResponseList; import com.crowdin.client.workflows.model.WorkflowStep; import com.crowdin.client.workflows.model.WorkflowStepResponseList; import com.crowdin.client.workflows.model.WorkflowStepResponseObject; @@ -52,6 +54,31 @@ public ResponseObject getWorkflowStep(Long projectId, Long stepId) return ResponseObject.of(workflowStepResponseObject.getData()); } + /** + * @param projectId project identifier + * @param stepId workflow step identifier + * @param languageIds filter progress by language identifiers + * @param orderBy ["id", "text", "identifier", "context", "createdAt", "updatedAt"]. Result sorting rules (default "id") + * @param status ["todo", "done", "pending", "incomplete", "need_review"]. String status on the workflow step + * @param limit maximum number of items to retrieve (default 25) + * @param offset starting offset in the collection (default 0) + * @return list of project strings + * @see + */ + public ResponseList listWorkflowStepStrings(Long projectId, Long stepId, String languageIds, String orderBy, String status, Integer limit, Integer offset) throws HttpException, HttpBadRequestException { + Map> queryParams = HttpRequestConfig.buildUrlParams( + "languageIds", Optional.ofNullable(languageIds), + "orderBy", Optional.ofNullable(orderBy), + "status", Optional.ofNullable(status), + "limit", Optional.ofNullable(limit), + "offset", Optional.ofNullable(offset) + ); + SourceStringResponseList workflowStepStringsList = this.httpClient.get(this.url + "/projects/" + projectId + "/workflow-steps/" + stepId + "/strings", new HttpRequestConfig(queryParams), SourceStringResponseList.class); + return SourceStringResponseList.to(workflowStepStringsList); + } + /** * @param groupId group identifier * @param limit maximum number of items to retrieve (default 25) diff --git a/src/test/java/com/crowdin/client/workflows/WorkflowsApiTest.java b/src/test/java/com/crowdin/client/workflows/WorkflowsApiTest.java index d99a3869b..5e617769c 100644 --- a/src/test/java/com/crowdin/client/workflows/WorkflowsApiTest.java +++ b/src/test/java/com/crowdin/client/workflows/WorkflowsApiTest.java @@ -4,6 +4,7 @@ import com.crowdin.client.core.model.ResponseObject; import com.crowdin.client.framework.RequestMock; import com.crowdin.client.framework.TestClient; +import com.crowdin.client.sourcestrings.model.SourceString; import com.crowdin.client.workflows.model.WorkflowStep; import com.crowdin.client.workflows.model.WorkflowTemplate; import org.apache.http.client.methods.HttpGet; @@ -27,6 +28,7 @@ public List getMocks() { return Arrays.asList( RequestMock.build(this.url + "/projects/" + projectId + "/workflow-steps", HttpGet.METHOD_NAME, "api/workflows/listWorkflows.json"), RequestMock.build(this.url + "/projects/" + projectId + "/workflow-steps/" + workflowId, HttpGet.METHOD_NAME, "api/workflows/workflow.json"), + RequestMock.build(this.url + "/projects/" + projectId + "/workflow-steps/" + workflowId + "/strings", HttpGet.METHOD_NAME, "api/workflows/workflowStrings.json"), RequestMock.build(this.url + "/workflow-templates", HttpGet.METHOD_NAME, "api/workflows/listWorkflowTemplates.json"), RequestMock.build(this.url + "/workflow-templates/" + workflowTemplateId, HttpGet.METHOD_NAME, "api/workflows/workflowTemplate.json") ); @@ -45,6 +47,13 @@ public void getWorkflowStepTest() { assertEquals(workflowStep.getData().getTitle(), workflowTitle); } + @Test + public void listWorkflowStepStringsTest() { + ResponseList workflowStepStrings = this.getWorkflowsApi().listWorkflowStepStrings(projectId, workflowId, null, null, null, null, null); + assertEquals(1, workflowStepStrings.getData().size()); + assertEquals(projectId, workflowStepStrings.getData().get(0).getData().getProjectId()); + } + @Test public void listWorkflowTemplatesTest() { ResponseList workflowTemplateResponseList = this.getWorkflowsApi().listWorkflowTemplates(null, null, null); diff --git a/src/test/resources/api/workflows/workflowStrings.json b/src/test/resources/api/workflows/workflowStrings.json new file mode 100644 index 000000000..07fb0b48a --- /dev/null +++ b/src/test/resources/api/workflows/workflowStrings.json @@ -0,0 +1,43 @@ +{ + "data": [ + { + "data": { + "id": 2814, + "projectId": 1, + "branchId": 12, + "identifier": "name", + "text": "Not all videos are shown to users. See more", + "type": "text", + "context": "shown on main page", + "maxLength": 35, + "isHidden": false, + "isDuplicate": true, + "masterStringId": 1, + "hasPlurals": false, + "isIcu": false, + "labelIds": [ + 3 + ], + "webUrl": "https://example.crowdin.com/editor/1/all/en-pl?filter=basic&value=0&view=comfortable#2", + "createdAt": "2019-09-20T12:43:57+00:00", + "updatedAt": "2019-09-20T13:24:01+00:00", + "fields": { + "some-field-1": "some value 1", + "some-field-2": 12, + "some-field-3": true, + "some-field-4": [ + "en", + "ja" + ] + }, + "fileId": 48, + "directoryId": 13, + "revision": 1 + } + } + ], + "pagination": { + "offset": 0, + "limit": 25 + } +} \ No newline at end of file From 47e037e964e5e528f476161536e451b14523164b Mon Sep 17 00:00:00 2001 From: Besomhead Date: Wed, 15 Oct 2025 00:48:53 +0300 Subject: [PATCH 2/2] feat: apply new ordering description approach. --- .../java/com/crowdin/client/workflows/WorkflowsApi.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/crowdin/client/workflows/WorkflowsApi.java b/src/main/java/com/crowdin/client/workflows/WorkflowsApi.java index b50f08de4..35fef9226 100644 --- a/src/main/java/com/crowdin/client/workflows/WorkflowsApi.java +++ b/src/main/java/com/crowdin/client/workflows/WorkflowsApi.java @@ -6,6 +6,7 @@ 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.OrderByField; import com.crowdin.client.core.model.ResponseList; import com.crowdin.client.core.model.ResponseObject; import com.crowdin.client.sourcestrings.model.SourceString; @@ -17,6 +18,7 @@ import com.crowdin.client.workflows.model.WorkflowTemplateResponseList; import com.crowdin.client.workflows.model.WorkflowTemplateResponseObject; +import java.util.List; import java.util.Map; import java.util.Optional; @@ -58,7 +60,7 @@ public ResponseObject getWorkflowStep(Long projectId, Long stepId) * @param projectId project identifier * @param stepId workflow step identifier * @param languageIds filter progress by language identifiers - * @param orderBy ["id", "text", "identifier", "context", "createdAt", "updatedAt"]. Result sorting rules (default "id") + * @param orderBy ["id", "text", "identifier", "context", "createdAt", "updatedAt"]. List of OrderByField (default "id asc") * @param status ["todo", "done", "pending", "incomplete", "need_review"]. String status on the workflow step * @param limit maximum number of items to retrieve (default 25) * @param offset starting offset in the collection (default 0) @@ -67,10 +69,10 @@ public ResponseObject getWorkflowStep(Long projectId, Long stepId) *
  • Enterprise API Documentation
  • * */ - public ResponseList listWorkflowStepStrings(Long projectId, Long stepId, String languageIds, String orderBy, String status, Integer limit, Integer offset) throws HttpException, HttpBadRequestException { + public ResponseList listWorkflowStepStrings(Long projectId, Long stepId, String languageIds, List orderBy, String status, Integer limit, Integer offset) throws HttpException, HttpBadRequestException { Map> queryParams = HttpRequestConfig.buildUrlParams( "languageIds", Optional.ofNullable(languageIds), - "orderBy", Optional.ofNullable(orderBy), + "orderBy", Optional.ofNullable(OrderByField.generateSortParam(orderBy)), "status", Optional.ofNullable(status), "limit", Optional.ofNullable(limit), "offset", Optional.ofNullable(offset)