Skip to content

Commit adefe17

Browse files
authored
feat: Add fields api support (#245)
1 parent 049b9ff commit adefe17

File tree

16 files changed

+460
-0
lines changed

16 files changed

+460
-0
lines changed

src/main/java/com/crowdin/client/Client.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.crowdin.client.core.model.Credentials;
1010
import com.crowdin.client.dictionaries.DictionariesApi;
1111
import com.crowdin.client.distributions.DistributionsApi;
12+
import com.crowdin.client.fields.FieldsApi;
1213
import com.crowdin.client.glossaries.GlossariesApi;
1314
import com.crowdin.client.issues.IssuesApi;
1415
import com.crowdin.client.labels.LabelsApi;
@@ -61,6 +62,7 @@ public class Client extends CrowdinApi {
6162
private final OrganizationWebhooksApi organizationWebhooksApi;
6263
private final TeamsApi teamsApi;
6364
private final DistributionsApi distributionsApi;
65+
private final FieldsApi fieldsApi;
6466
private final DictionariesApi dictionariesApi;
6567
private final LabelsApi labelsApi;
6668
private final StringCommentsApi stringCommentsApi;
@@ -95,6 +97,7 @@ public Client(Credentials credentials) {
9597
this.organizationWebhooksApi = new OrganizationWebhooksApi(credentials);
9698
this.teamsApi = new TeamsApi(credentials);
9799
this.distributionsApi = new DistributionsApi(credentials);
100+
this.fieldsApi = new FieldsApi(credentials);
98101
this.dictionariesApi = new DictionariesApi(credentials);
99102
this.labelsApi = new LabelsApi(credentials);
100103
this.stringCommentsApi = new StringCommentsApi(credentials);
@@ -130,6 +133,7 @@ public Client(Credentials credentials, ClientConfig clientConfig) {
130133
this.organizationWebhooksApi = new OrganizationWebhooksApi(credentials, clientConfig);
131134
this.teamsApi = new TeamsApi(credentials, clientConfig);
132135
this.distributionsApi = new DistributionsApi(credentials, clientConfig);
136+
this.fieldsApi = new FieldsApi(credentials, clientConfig);
133137
this.dictionariesApi = new DictionariesApi(credentials, clientConfig);
134138
this.labelsApi = new LabelsApi(credentials, clientConfig);
135139
this.stringCommentsApi = new StringCommentsApi(credentials, clientConfig);
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
package com.crowdin.client.fields;
2+
3+
import com.crowdin.client.core.CrowdinApi;
4+
import com.crowdin.client.core.http.HttpRequestConfig;
5+
import com.crowdin.client.core.http.exceptions.HttpBadRequestException;
6+
import com.crowdin.client.core.http.exceptions.HttpException;
7+
import com.crowdin.client.core.model.ClientConfig;
8+
import com.crowdin.client.core.model.Credentials;
9+
import com.crowdin.client.core.model.PatchRequest;
10+
import com.crowdin.client.core.model.ResponseList;
11+
import com.crowdin.client.core.model.ResponseObject;
12+
import com.crowdin.client.fields.model.Field;
13+
import com.crowdin.client.fields.model.FieldRequest;
14+
import com.crowdin.client.fields.model.FieldResponseObject;
15+
import com.crowdin.client.fields.model.FieldResponseObjectList;
16+
17+
import java.util.List;
18+
import java.util.Map;
19+
import java.util.Optional;
20+
21+
public class FieldsApi extends CrowdinApi {
22+
23+
public FieldsApi(Credentials credentials) {
24+
super(credentials);
25+
}
26+
27+
public FieldsApi(Credentials credentials, ClientConfig clientConfig) {
28+
super(credentials, clientConfig);
29+
}
30+
31+
/**
32+
* @param entity Filter fields by entity {@link com.crowdin.client.fields.model.enums.EntityType}
33+
* @param search Search fields by slug or name
34+
* @param limit maximum number of items to retrieve (default 25)
35+
* @param offset starting offset in the collection (default 0)
36+
* @return list of distributions
37+
* @see <ul>
38+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.fields.getMany" target="_blank"><b>API Documentation</b></a></li>
39+
* </ul>
40+
*/
41+
public ResponseList<Field> listFields(String entity, String search, Integer limit, Integer offset) throws HttpException, HttpBadRequestException {
42+
Map<String, Optional<Object>> queryParams = HttpRequestConfig.buildUrlParams(
43+
"entity", Optional.ofNullable(entity),
44+
"search", Optional.ofNullable(search),
45+
"limit", Optional.ofNullable(limit),
46+
"offset", Optional.ofNullable(offset)
47+
);
48+
FieldResponseObjectList responseObject = this.httpClient.get(this.url + "/fields", new HttpRequestConfig(queryParams), FieldResponseObjectList.class);
49+
return FieldResponseObjectList.to(responseObject);
50+
}
51+
52+
/**
53+
* @param request object {@link com.crowdin.client.fields.model.FieldRequest}
54+
* @return Field object
55+
* @see <ul>
56+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.fields.post" target="_blank"><b>API Documentation</b></a></li>
57+
* </ul>
58+
*/
59+
public ResponseObject<Field> addField(FieldRequest request) throws HttpException, HttpBadRequestException {
60+
FieldResponseObject reportStatusResponseObject = this.httpClient.post(this.url + "/fields", request, new HttpRequestConfig(), FieldResponseObject.class);
61+
return ResponseObject.of(reportStatusResponseObject.getData());
62+
}
63+
64+
/**
65+
* @param fieldId field identifier
66+
* @return field object according to id
67+
* @see <ul>
68+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.fields.get" target="_blank"><b>API Documentation</b></a></li>
69+
* </ul>
70+
*/
71+
public ResponseList<Field> getField(Long fieldId) throws HttpException, HttpBadRequestException {
72+
FieldResponseObjectList responseObject = this.httpClient.get(this.url + "/fields/" + fieldId, new HttpRequestConfig(), FieldResponseObjectList.class);
73+
return FieldResponseObjectList.to(responseObject);
74+
}
75+
76+
/**
77+
* @param fieldId field identifier
78+
* @see <ul>
79+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.fields.delete" target="_blank"><b>API Documentation</b></a></li>
80+
* </ul>
81+
*/
82+
public void deleteField(Long fieldId) throws HttpException, HttpBadRequestException {
83+
this.httpClient.delete(this.url + "/fields/" + fieldId, new HttpRequestConfig(), Void.class);
84+
}
85+
86+
/**
87+
* @param fieldId field identifier
88+
* @param request object
89+
* @return field object
90+
* @see <ul>
91+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.fields.patch" target="_blank"><b>API Documentation</b></a></li>
92+
* </ul>
93+
*/
94+
public ResponseObject<Field> editField(Long fieldId, List<PatchRequest> request) throws HttpException, HttpBadRequestException {
95+
FieldResponseObject responseObject = this.httpClient.patch(this.url + "/fields/" + fieldId, request, new HttpRequestConfig(), FieldResponseObject.class);
96+
return ResponseObject.of(responseObject.getData());
97+
}
98+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.crowdin.client.fields.model;
2+
3+
import lombok.Data;
4+
5+
import java.util.List;
6+
7+
@Data
8+
public class Config {
9+
private List<Option> options;
10+
private List<Location> locations;
11+
12+
@Data
13+
public static class Option {
14+
private String label;
15+
private String value;
16+
}
17+
18+
@Data
19+
public static class Location {
20+
private String place;
21+
}
22+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.crowdin.client.fields.model;
2+
3+
import com.crowdin.client.fields.model.enums.EntityType;
4+
import com.crowdin.client.fields.model.enums.FieldType;
5+
import lombok.Data;
6+
7+
import java.util.Date;
8+
import java.util.List;
9+
10+
@Data
11+
public class Field {
12+
13+
private Long id;
14+
private String name;
15+
private String slug;
16+
private String description;
17+
private FieldType type;
18+
private Config config;
19+
private List<EntityType> entities;
20+
private Date createdAt;
21+
private Date updatedAt;
22+
23+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.crowdin.client.fields.model;
2+
3+
import lombok.Data;
4+
5+
import java.util.List;
6+
7+
@Data
8+
public class FieldRequest {
9+
private String name;
10+
private String slug;
11+
private String type;
12+
private String description;
13+
private List<String> entities;
14+
private Config config;
15+
16+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.crowdin.client.fields.model;
2+
3+
import lombok.Data;
4+
5+
@Data
6+
public class FieldResponseObject {
7+
private Field data;
8+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.crowdin.client.fields.model;
2+
3+
import com.crowdin.client.core.model.Pagination;
4+
import com.crowdin.client.core.model.ResponseList;
5+
import com.crowdin.client.core.model.ResponseObject;
6+
import lombok.Data;
7+
8+
import java.util.List;
9+
import java.util.stream.Collectors;
10+
11+
@Data
12+
public class FieldResponseObjectList {
13+
private List<FieldResponseObject> data;
14+
private Pagination pagination;
15+
16+
public static ResponseList<Field> to(FieldResponseObjectList reportSettingsTemplateList) {
17+
return ResponseList.of(
18+
reportSettingsTemplateList.getData().stream()
19+
.map(FieldResponseObject::getData)
20+
.map(ResponseObject::of)
21+
.collect(Collectors.toList()),
22+
reportSettingsTemplateList.getPagination()
23+
);
24+
}
25+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.crowdin.client.fields.model;
2+
3+
import com.crowdin.client.core.model.Pagination;
4+
import lombok.Data;
5+
6+
@Data
7+
public class FiledPagination extends Pagination {
8+
private int total;
9+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.crowdin.client.fields.model.enums;
2+
3+
import com.crowdin.client.core.model.EnumConverter;
4+
5+
public enum EntityType implements EnumConverter<EntityType> {
6+
7+
PROJECT,
8+
USER,
9+
TASK,
10+
FILE,
11+
TRANSLATION,
12+
STRING;
13+
14+
public static EntityType from(String value) {
15+
return EntityType.valueOf(value.toUpperCase());
16+
};
17+
18+
@Override
19+
public Object to(EntityType v) {
20+
return v.name().toLowerCase();
21+
}
22+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.crowdin.client.fields.model.enums;
2+
3+
import com.crowdin.client.core.model.EnumConverter;
4+
5+
public enum FieldType implements EnumConverter<FieldType> {
6+
7+
CHECKBOX,
8+
RADIOBUTTONS,
9+
DATE,
10+
DATETIME,
11+
NUMBER,
12+
LABELS,
13+
SELECT,
14+
MULTISELECT,
15+
TEXT,
16+
TEXTAREA,
17+
URL;
18+
19+
public static FieldType from(String value) {
20+
return FieldType.valueOf(value.toUpperCase());
21+
}
22+
23+
@Override
24+
public Object to(FieldType v) {
25+
return v.name().toLowerCase();
26+
}
27+
}

0 commit comments

Comments
 (0)