Skip to content

Commit 12ee054

Browse files
committed
feat: Users API new parameters
1 parent 18f2b93 commit 12ee054

10 files changed

Lines changed: 244 additions & 5 deletions

File tree

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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ public ResponseList<Team> listTeams(ListTeamsParams params) throws HttpException
158158
.collect(Collectors.joining(","))
159159
),
160160
"languageIds", Optional.ofNullable(
161-
query.getLanguageIs() == null ? null : String.join(",", query.getLanguageIs())
161+
query.getLanguageIds() == null ? null : String.join(",", query.getLanguageIds())
162162
),
163163
"groupIds", Optional.ofNullable(
164164
query.getGroupIds() == null ? null : query.getGroupIds().stream()

src/main/java/com/crowdin/client/teams/model/ListTeamsParams.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
import java.util.List;
99

1010
@Data
11-
@EqualsAndHashCode(callSuper = false)
11+
@EqualsAndHashCode(callSuper = true)
1212
public class ListTeamsParams extends Pagination {
1313
private String search;
1414
private List<Long> projectIds;
1515
private List<ProjectRoles> projectRoles;
16-
private List<String> languageIs;
16+
private List<String> languageIds;
1717
private List<Long> groupIds;
1818
private List<OrderByField> orderBy;
1919
}

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/users/UsersApiOrderyIdAscTest.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
import java.util.*;
1111

12-
import static java.util.Collections.singletonList;
12+
import static java.util.Collections.*;
1313
import static org.junit.jupiter.api.Assertions.*;
1414

1515
public class UsersApiOrderyIdAscTest extends TestClient {
@@ -64,4 +64,20 @@ public void listUsersTest_orderByIdAsc() {
6464
assertEquals(userId, userResponseList.getData().get(0).getData().getId());
6565
assertEquals(user2Id, userResponseList.getData().get(1).getData().getId());
6666
}
67+
68+
@Test
69+
public void listUsersTest_newOrderByIdAsc() {
70+
OrderByField orderById = new OrderByField();
71+
orderById.setFieldName("id");
72+
orderById.setOrderBy(SortOrder.ASC);
73+
74+
ListUsersParams listUsersParams = new ListUsersParams();
75+
listUsersParams.setOrderBy(singletonList(orderById));
76+
77+
ResponseList<User> userResponseList = this.getUsersApi().listUsers(listUsersParams);
78+
79+
assertEquals(2, userResponseList.getData().size());
80+
assertEquals(userId, userResponseList.getData().get(0).getData().getId());
81+
assertEquals(user2Id, userResponseList.getData().get(1).getData().getId());
82+
}
6783
}

src/test/java/com/crowdin/client/users/UsersApiOrderyIdDescTest.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
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.users.model.ListUsersParams;
89
import com.crowdin.client.users.model.User;
910
import org.apache.http.client.methods.HttpGet;
1011
import org.junit.jupiter.api.Test;
1112

12-
import java.util.Arrays;
1313
import java.util.HashMap;
1414
import java.util.List;
1515

@@ -49,4 +49,20 @@ public void listUsersTest_orderByIdDesc() {
4949
assertEquals(user2Id, userResponseList.getData().get(0).getData().getId());
5050
assertEquals(userId, userResponseList.getData().get(1).getData().getId());
5151
}
52+
53+
@Test
54+
public void listUsersTest_newOrderByIdDesc() {
55+
OrderByField orderById = new OrderByField();
56+
orderById.setFieldName("id");
57+
orderById.setOrderBy(SortOrder.DESC);
58+
59+
ListUsersParams listUsersParams = new ListUsersParams();
60+
listUsersParams.setOrderBy(singletonList(orderById));
61+
62+
ResponseList<User> userResponseList = this.getUsersApi().listUsers(listUsersParams);
63+
64+
assertEquals(2, userResponseList.getData().size());
65+
assertEquals(user2Id, userResponseList.getData().get(0).getData().getId());
66+
assertEquals(userId, userResponseList.getData().get(1).getData().getId());
67+
}
5268
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.crowdin.client.users;
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.users.model.User;
7+
import org.apache.http.client.methods.HttpGet;
8+
import org.junit.jupiter.api.Test;
9+
10+
import java.util.List;
11+
12+
import static java.util.Collections.singletonList;
13+
import static org.junit.jupiter.api.Assertions.assertEquals;
14+
15+
public class UsersApiSearchByNullTest extends TestClient {
16+
17+
private final Long userId = 1L;
18+
private final String username = "john_smith";
19+
20+
@Override
21+
public List<RequestMock> getMocks() {
22+
return singletonList(
23+
RequestMock.build(this.url + "/users", HttpGet.METHOD_NAME, "api/users/listUsers.json")
24+
);
25+
}
26+
27+
@Test
28+
public void listUsersTest_Null() {
29+
30+
ResponseList<User> userResponseList = this.getUsersApi().listUsers(null);
31+
32+
assertEquals(1, userResponseList.getData().size());
33+
assertEquals(userId, userResponseList.getData().get(0).getData().getId());
34+
assertEquals(username, userResponseList.getData().get(0).getData().getUsername());
35+
}
36+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.crowdin.client.users;
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.users.model.ListUsersParams;
7+
import com.crowdin.client.users.model.User;
8+
import org.apache.http.client.methods.HttpGet;
9+
import org.junit.jupiter.api.Test;
10+
11+
import java.util.HashMap;
12+
import java.util.List;
13+
14+
import static java.util.Collections.singletonList;
15+
import static org.junit.jupiter.api.Assertions.assertEquals;
16+
17+
public class UsersApiSearchBySearchTest extends TestClient {
18+
19+
private final Long userId = 1L;
20+
private final String username = "john_smith";
21+
22+
@Override
23+
public List<RequestMock> getMocks() {
24+
return singletonList(
25+
RequestMock.build(this.url + "/users", HttpGet.METHOD_NAME, "api/users/listUsers.json", new HashMap<String, String>() {{
26+
put("search", "john_smith");
27+
}})
28+
);
29+
}
30+
31+
@Test
32+
public void listUsersTest_newOrderByIdAsc() {
33+
ListUsersParams listUsersParams = new ListUsersParams();
34+
listUsersParams.setSearch("john_smith");
35+
36+
ResponseList<User> userResponseList = this.getUsersApi().listUsers(listUsersParams);
37+
38+
assertEquals(1, userResponseList.getData().size());
39+
assertEquals(userId, userResponseList.getData().get(0).getData().getId());
40+
assertEquals(username, userResponseList.getData().get(0).getData().getUsername());
41+
}
42+
}

0 commit comments

Comments
 (0)