Skip to content

Commit 553e903

Browse files
authored
feat: teams and users api support more parameters (#338)
1 parent 2c3c706 commit 553e903

17 files changed

Lines changed: 520 additions & 2 deletions

src/main/java/com/crowdin/client/core/http/HttpRequestConfig.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,4 +177,41 @@ public static <T extends Optional> Map<String, T> buildUrlParams(String k1, T v1
177177
put(k12, v12);
178178
}};
179179
}
180+
181+
public static <T extends Optional> Map<String, T> buildUrlParams(String k1, T v1, String k2, T v2, String k3, T v3, String k4, T v4, String k5, T v5, String k6, T v6, String k7, T v7, String k8, T v8, String k9, T v9, String k10, T v10, String k11, T v11, String k12, T v12, String k13, T v13) {
182+
return new HashMap<String, T>() {{
183+
put(k1, v1);
184+
put(k2, v2);
185+
put(k3, v3);
186+
put(k4, v4);
187+
put(k5, v5);
188+
put(k6, v6);
189+
put(k7, v7);
190+
put(k8, v8);
191+
put(k9, v9);
192+
put(k10, v10);
193+
put(k11, v11);
194+
put(k12, v12);
195+
put(k13, v13);
196+
}};
197+
}
198+
199+
public static <T extends Optional> Map<String, T> buildUrlParams(String k1, T v1, String k2, T v2, String k3, T v3, String k4, T v4, String k5, T v5, String k6, T v6, String k7, T v7, String k8, T v8, String k9, T v9, String k10, T v10, String k11, T v11, String k12, T v12, String k13, T v13, String k14, T v14) {
200+
return new HashMap<String, T>() {{
201+
put(k1, v1);
202+
put(k2, v2);
203+
put(k3, v3);
204+
put(k4, v4);
205+
put(k5, v5);
206+
put(k6, v6);
207+
put(k7, v7);
208+
put(k8, v8);
209+
put(k9, v9);
210+
put(k10, v10);
211+
put(k11, v11);
212+
put(k12, v12);
213+
put(k13, v13);
214+
put(k14, v14);
215+
}};
216+
}
180217
}

src/main/java/com/crowdin/client/teams/TeamsApi.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.List;
1111
import java.util.Map;
1212
import java.util.Optional;
13+
import java.util.stream.Collectors;
1314

1415
public class TeamsApi extends CrowdinApi {
1516
public TeamsApi(Credentials credentials) {
@@ -134,6 +135,44 @@ public ResponseList<Team> listTeams(Integer limit, Integer offset, List<OrderByF
134135
return TeamResponseList.to(teamResponseList);
135136
}
136137

138+
/**
139+
* @param params ListTeamsParams
140+
* @return list of teams
141+
* @see <ul>
142+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.teams.getMany" target="_blank"><b>Enterprise API Documentation</b></a></li>
143+
* </ul>
144+
*/
145+
public ResponseList<Team> listTeams(ListTeamsParams params) throws HttpException, HttpBadRequestException {
146+
ListTeamsParams query = Optional.ofNullable(params).orElse(new ListTeamsParams());
147+
148+
Map<String, Optional<Object>> queryParams = HttpRequestConfig.buildUrlParams(
149+
"search", Optional.ofNullable(query.getSearch()),
150+
"projectIds", Optional.ofNullable(
151+
query.getProjectIds() == null ? null : query.getProjectIds().stream()
152+
.map(String::valueOf)
153+
.collect(Collectors.joining(","))
154+
),
155+
"projectRoles", Optional.ofNullable(
156+
query.getProjectRoles() == null ? null : query.getProjectRoles().stream()
157+
.map(projectRole -> projectRole.to(projectRole))
158+
.collect(Collectors.joining(","))
159+
),
160+
"languageIds", Optional.ofNullable(
161+
query.getLanguageIds() == null ? null : String.join(",", query.getLanguageIds())
162+
),
163+
"groupIds", Optional.ofNullable(
164+
query.getGroupIds() == null ? null : query.getGroupIds().stream()
165+
.map(String::valueOf)
166+
.collect(Collectors.joining(","))
167+
),
168+
"orderBy", Optional.ofNullable(OrderByField.generateSortParam(query.getOrderBy())),
169+
"limit", Optional.ofNullable(query.getLimit()),
170+
"offset", Optional.ofNullable(query.getOffset())
171+
);
172+
TeamResponseList teamResponseList = this.httpClient.get(this.url + "/teams", new HttpRequestConfig(queryParams), TeamResponseList.class);
173+
return TeamResponseList.to(teamResponseList);
174+
}
175+
137176
/**
138177
* @param request request object
139178
* @return newly created team
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.crowdin.client.teams.model;
2+
3+
import com.crowdin.client.core.model.OrderByField;
4+
import com.crowdin.client.core.model.Pagination;
5+
import lombok.Data;
6+
import lombok.EqualsAndHashCode;
7+
8+
import java.util.List;
9+
10+
@Data
11+
@EqualsAndHashCode(callSuper = true)
12+
public class ListTeamsParams extends Pagination {
13+
private String search;
14+
private List<Long> projectIds;
15+
private List<ProjectRoles> projectRoles;
16+
private List<String> languageIds;
17+
private List<Long> groupIds;
18+
private List<OrderByField> orderBy;
19+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.crowdin.client.teams.model;
2+
3+
import com.crowdin.client.core.model.EnumConverter;
4+
5+
public enum ProjectRoles implements EnumConverter<ProjectRoles> {
6+
MANAGER, DEVELOPER, TRANSLATOR, PROOFREADER, LANGUAGE_COORDINATOR, MEMBER;
7+
8+
public static ProjectRoles from(String value) {
9+
return ProjectRoles.valueOf(value.toUpperCase());
10+
}
11+
12+
@Override
13+
public String to(ProjectRoles v) {
14+
return v.name().toLowerCase();
15+
}
16+
}

src/main/java/com/crowdin/client/users/UsersApi.java

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.List;
1111
import java.util.Map;
1212
import java.util.Optional;
13+
import java.util.stream.Collectors;
1314

1415
public class UsersApi extends CrowdinApi {
1516
public UsersApi(Credentials credentials) {
@@ -243,6 +244,54 @@ public ResponseList<User> listUsers(Status status, String search, TwoFactor twoF
243244
return UserResponseList.to(userResponseList);
244245
}
245246

247+
/**
248+
* @param params ListUsersParams
249+
* @return list of teams
250+
* @see <ul>
251+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.users.getMany" target="_blank"><b>Enterprise API Documentation</b></a></li>
252+
* </ul>
253+
*/
254+
public ResponseList<User> listUsers(ListUsersParams params) throws HttpException, HttpBadRequestException {
255+
ListUsersParams query = Optional.ofNullable(params).orElse(new ListUsersParams());
256+
257+
Map<String, Optional<Object>> queryParams = HttpRequestConfig.buildUrlParams(
258+
"status", Optional.ofNullable(query.getStatus()),
259+
"search", Optional.ofNullable(query.getSearch()),
260+
"twoFactor", Optional.ofNullable(query.getTwoFactor()),
261+
"limit", Optional.ofNullable(query.getLimit()),
262+
"offset", Optional.ofNullable(query.getOffset()),
263+
"orderBy", Optional.ofNullable(OrderByField.generateSortParam(query.getOrderBy())),
264+
"organizationRoles", Optional.ofNullable(
265+
query.getOrganizationRoles() == null ? null : query.getOrganizationRoles().stream()
266+
.map(organizationRole -> organizationRole.to(organizationRole))
267+
.collect(Collectors.joining(","))
268+
),
269+
"teamId", Optional.ofNullable(query.getTeamId()),
270+
"projectIds", Optional.ofNullable(
271+
query.getProjectIds() == null ? null : query.getProjectIds().stream()
272+
.map(String::valueOf)
273+
.collect(Collectors.joining(","))
274+
),
275+
"projectRoles", Optional.ofNullable(
276+
query.getProjectRoles() == null ? null : query.getProjectRoles().stream()
277+
.map(projectRole -> projectRole.to(projectRole))
278+
.collect(Collectors.joining(","))
279+
),
280+
"languageIds", Optional.ofNullable(
281+
query.getLanguageIds() == null ? null : String.join(",", query.getLanguageIds())
282+
),
283+
"groupIds", Optional.ofNullable(
284+
query.getGroupIds() == null ? null : query.getGroupIds().stream()
285+
.map(String::valueOf)
286+
.collect(Collectors.joining(","))
287+
),
288+
"lastSeenFrom", Optional.ofNullable(query.getLastSeenFrom()),
289+
"lastSeenTo", Optional.ofNullable(query.getLastSeenTo())
290+
);
291+
UserResponseList userResponseList = this.httpClient.get(this.url + "/users", new HttpRequestConfig(queryParams), UserResponseList.class);
292+
return UserResponseList.to(userResponseList);
293+
}
294+
246295
/**
247296
* @param request request object
248297
* @return invited user
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.crowdin.client.users.model;
2+
3+
import com.crowdin.client.core.model.OrderByField;
4+
import com.crowdin.client.core.model.Pagination;
5+
import com.crowdin.client.teams.model.ProjectRoles;
6+
import lombok.Data;
7+
import lombok.EqualsAndHashCode;
8+
9+
import java.util.Date;
10+
import java.util.List;
11+
12+
@Data
13+
@EqualsAndHashCode(callSuper = true)
14+
public class ListUsersParams extends Pagination {
15+
private List<OrderByField> orderBy;
16+
private Status status;
17+
private String search;
18+
private TwoFactor twoFactor;
19+
private List<OrganizationRoles> organizationRoles;
20+
private Long teamId;
21+
private List<Long> projectIds;
22+
private List<ProjectRoles> projectRoles;
23+
private List<String> languageIds;
24+
private List<Long> groupIds;
25+
private Date lastSeenFrom;
26+
private Date lastSeenTo;
27+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.crowdin.client.users.model;
2+
3+
import com.crowdin.client.core.model.EnumConverter;
4+
5+
public enum OrganizationRoles implements EnumConverter<OrganizationRoles> {
6+
ADMIN, MANAGER, VENDOR, CLIENT;
7+
8+
public static OrganizationRoles from(String value){
9+
return OrganizationRoles.valueOf(value.toUpperCase());
10+
}
11+
12+
@Override
13+
public String to(OrganizationRoles v) {
14+
return v.name().toLowerCase();
15+
}
16+
}

src/test/java/com/crowdin/client/teams/TeamsApiListTeamsOrderByIdAscTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,21 @@ public void listTeamsTest_orderByIdAsc() {
5454
assertEquals(team2Id, teamResponseList.getData().get(1).getData().getId());
5555
assertEquals(name2, teamResponseList.getData().get(1).getData().getName());
5656
}
57+
58+
@Test
59+
public void listTeamsTest_newOrderByIdAsc() {
60+
OrderByField orderBy = new OrderByField();
61+
orderBy.setFieldName("id");
62+
orderBy.setOrderBy(SortOrder.ASC);
63+
64+
ListTeamsParams query = new ListTeamsParams();
65+
query.setOrderBy(singletonList(orderBy));
66+
67+
ResponseList<Team> teamResponseList = this.getTeamsApi().listTeams(null, null, singletonList(orderBy));
68+
assertEquals(2, teamResponseList.getData().size());
69+
assertEquals(teamId, teamResponseList.getData().get(0).getData().getId());
70+
assertEquals(name, teamResponseList.getData().get(0).getData().getName());
71+
assertEquals(team2Id, teamResponseList.getData().get(1).getData().getId());
72+
assertEquals(name2, teamResponseList.getData().get(1).getData().getName());
73+
}
5774
}

src/test/java/com/crowdin/client/teams/TeamsApiListTeamsOrderByIdDescTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.crowdin.client.core.model.SortOrder;
66
import com.crowdin.client.framework.RequestMock;
77
import com.crowdin.client.framework.TestClient;
8+
import com.crowdin.client.teams.model.ListTeamsParams;
89
import com.crowdin.client.teams.model.Team;
910
import org.apache.http.client.methods.HttpGet;
1011
import org.junit.jupiter.api.Test;
@@ -46,4 +47,21 @@ public void listTeamsTest_orderByIdDesc() {
4647
assertEquals(name, teamResponseList.getData().get(1).getData().getName());
4748

4849
}
50+
51+
@Test
52+
public void listTeamsTest_newOrderByIdDesc() {
53+
OrderByField orderById = new OrderByField();
54+
orderById.setFieldName("id");
55+
orderById.setOrderBy(SortOrder.DESC);
56+
57+
ListTeamsParams query = new ListTeamsParams();
58+
query.setOrderBy(singletonList(orderById));
59+
60+
ResponseList<Team> teamResponseList = this.getTeamsApi().listTeams(query);
61+
assertEquals(2, teamResponseList.getData().size());
62+
assertEquals(team2Id, teamResponseList.getData().get(0).getData().getId());
63+
assertEquals(name2, teamResponseList.getData().get(0).getData().getName());
64+
assertEquals(teamId, teamResponseList.getData().get(1).getData().getId());
65+
assertEquals(name, teamResponseList.getData().get(1).getData().getName());
66+
}
4967
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.crowdin.client.teams;
2+
3+
import com.crowdin.client.core.model.ResponseList;
4+
import com.crowdin.client.framework.RequestMock;
5+
import com.crowdin.client.framework.TestClient;
6+
import com.crowdin.client.teams.model.ListTeamsParams;
7+
import com.crowdin.client.teams.model.Team;
8+
import org.apache.http.client.methods.HttpGet;
9+
import org.junit.jupiter.api.Test;
10+
11+
import java.util.Arrays;
12+
import java.util.HashMap;
13+
import java.util.List;
14+
15+
import static org.junit.jupiter.api.Assertions.assertEquals;
16+
17+
public class TeamsApiListTeamsSearchByGroupIdTest extends TestClient {
18+
19+
private final Long teamId = 1L;
20+
private final Long team2Id = 2L;
21+
22+
@Override
23+
public List<RequestMock> getMocks() {
24+
return Arrays.asList(
25+
RequestMock.build(this.url + "/teams", HttpGet.METHOD_NAME, "api/teams/listTeamsOrderByIdAsc.json", new HashMap<String, String>() {{
26+
put("projectIds", "1,2,3");
27+
}})
28+
);
29+
}
30+
31+
@Test
32+
public void listTeamsTest_searchByGroupId() {
33+
List<Long> groupIds = Arrays.asList(1L, 2L, 3L);
34+
ListTeamsParams query = new ListTeamsParams();
35+
query.setProjectIds(groupIds);
36+
37+
ResponseList<Team> teamResponseList = this.getTeamsApi().listTeams(query);
38+
assertEquals(2, teamResponseList.getData().size());
39+
assertEquals(teamId, teamResponseList.getData().get(0).getData().getId());
40+
assertEquals(team2Id, teamResponseList.getData().get(1).getData().getId());
41+
}
42+
}

0 commit comments

Comments
 (0)