Skip to content

Commit def4154

Browse files
feat: Add user report endpoints support (#307)
1 parent af71abc commit def4154

File tree

6 files changed

+240
-1
lines changed

6 files changed

+240
-1
lines changed

src/main/java/com/crowdin/client/reports/ReportsApi.java

+81
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,87 @@ public void deleteReportSettingsTemplate(Long projectId, Long reportSettingsTemp
217217
this.httpClient.delete(this.url + "/projects/" + projectId + "/settings-templates/" + reportSettingsTemplateId, new HttpRequestConfig(), Void.class);
218218
}
219219

220+
// -- USER REPORTS -- //
221+
222+
/**
223+
*
224+
* @param userId user identifier
225+
* @param limit (default 25)
226+
* @param offset (default 0)
227+
* @return list of user report settings template
228+
* @see <ul>
229+
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.users.reports.settings-templates.getMany" target="_blank"><b>API Documentation</b></a></li>
230+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.users.reports.settings-templates.getMany" target="_blank"><b>Enterprise API Documentation</b></a></li>
231+
* </ul>
232+
*/
233+
public ResponseList<ReportSettingsTemplate> listUserReportSettingsTemplate(Long userId, Integer limit, Integer offset) throws HttpException, HttpBadRequestException {
234+
Map<String, Optional<Object>> queryParams = HttpRequestConfig.buildUrlParams(
235+
"limit", Optional.ofNullable(limit),
236+
"offset", Optional.ofNullable(offset)
237+
);
238+
ReportSettingsTemplateList reportSettingsTemplateList = this.httpClient.get(this.url + "/users/" + userId + "/reports/settings-templates", new HttpRequestConfig(queryParams), ReportSettingsTemplateList.class);
239+
return ReportSettingsTemplateList.to(reportSettingsTemplateList);
240+
}
241+
242+
/**
243+
*
244+
* @param userId user identifier
245+
* @param request request object
246+
* @return user report settings template
247+
* @see <ul>
248+
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.users.reports.settings-templates.post" target="_blank"><b>API Documentation</b></a></li>
249+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.users.reports.settings-templates.post" target="_blank"><b>Enterprise API Documentation</b></a></li>
250+
* </ul>
251+
*/
252+
public ResponseObject<ReportSettingsTemplate> addUserReportSettingsTemplate(Long userId, ReportSettingsTemplate request) throws HttpException, HttpBadRequestException {
253+
ReportSettingsTemplateResponseObject responseObject = this.httpClient.post(this.url + "/users/" + userId + "/reports/settings-templates", request, new HttpRequestConfig(), ReportSettingsTemplateResponseObject.class);
254+
return ResponseObject.of(responseObject.getData());
255+
}
256+
257+
/**
258+
*
259+
* @param userId user identifier
260+
* @param reportSettingsTemplateId report settings template identifier
261+
* @return user report settings template
262+
* @see <ul>
263+
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.users.reports.settings-templates.get" target="_blank"><b>API Documentation</b></a></li>
264+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.users.reports.settings-templates.get" target="_blank"><b>Enterprise API Documentation</b></a></li>
265+
* </ul>
266+
*/
267+
public ResponseObject<ReportSettingsTemplate> getUserReportSettingsTemplate(Long userId, Long reportSettingsTemplateId) throws HttpException, HttpBadRequestException {
268+
ReportSettingsTemplateResponseObject responseObject = this.httpClient.get(this.url + "/users/" + userId + "/reports/settings-templates/" + reportSettingsTemplateId, new HttpRequestConfig(), ReportSettingsTemplateResponseObject.class);
269+
return ResponseObject.of(responseObject.getData());
270+
}
271+
272+
/**
273+
*
274+
* @param userId user identifier
275+
* @param reportSettingsTemplateId report settings template identifier
276+
* @param request request object
277+
* @return user report settings template
278+
* @see <ul>
279+
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.users.reports.settings-templates.patch" target="_blank"><b>API Documentation</b></a></li>
280+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.users.reports.settings-templates.patch" target="_blank"><b>Enterprise API Documentation</b></a></li>
281+
* </ul>
282+
*/
283+
public ResponseObject<ReportSettingsTemplate> editUserReportSettingsTemplate(Long userId, Long reportSettingsTemplateId, List<PatchRequest> request) throws HttpException, HttpBadRequestException {
284+
ReportSettingsTemplateResponseObject responseObject = this.httpClient.patch(this.url + "/users/" + userId + "/reports/settings-templates/" + reportSettingsTemplateId, request, new HttpRequestConfig(), ReportSettingsTemplateResponseObject.class);
285+
return ResponseObject.of(responseObject.getData());
286+
}
287+
288+
/**
289+
*
290+
* @param userId user identifier
291+
* @param reportSettingsTemplateId report settings template identifier
292+
* @see <ul>
293+
* <li><a href="https://developer.crowdin.com/api/v2/#operation/api.users.reports.settings-templates.delete" target="_blank"><b>API Documentation</b></a></li>
294+
* <li><a href="https://developer.crowdin.com/enterprise/api/v2/#operation/api.users.reports.settings-templates.delete" target="_blank"><b>Enterprise API Documentation</b></a></li>
295+
* </ul>
296+
*/
297+
public void deleteUserReportSettingsTemplate(Long userId, Long reportSettingsTemplateId) throws HttpException, HttpBadRequestException {
298+
this.httpClient.delete(this.url + "/users/" + userId + "/reports/settings-templates/" + reportSettingsTemplateId, new HttpRequestConfig(), Void.class);
299+
}
300+
220301
// -- REPORT ARCHIVES -- //
221302

222303
/**

src/test/java/com/crowdin/client/reports/ReportsApiTest.java

+49-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,12 @@ public List<RequestMock> getMocks() {
7272
RequestMock.build(this.url + "/users/" + userId + "/reports/archives/" + archiveId, HttpDelete.METHOD_NAME),
7373
RequestMock.build(this.url + "/users/" + userId + "/reports/archives/" + archiveId + "/exports", HttpPost.METHOD_NAME, "api/reports/exportReportArchiveReques.json", "api/reports/reportGenerationStatus.json"),
7474
RequestMock.build(this.url + "/users/" + userId + "/reports/archives/" + archiveId + "/exports/" + exportId, HttpGet.METHOD_NAME, "api/reports/reportGenerationStatus.json"),
75-
RequestMock.build(this.url + "/users/" + userId + "/reports/archives" + archiveId + "/exports/" + exportId + "/download", HttpGet.METHOD_NAME, "api/reports/downloadLink.json"));
75+
RequestMock.build(this.url + "/users/" + userId + "/reports/archives" + archiveId + "/exports/" + exportId + "/download", HttpGet.METHOD_NAME, "api/reports/downloadLink.json"),
76+
RequestMock.build(this.url + "/users/" + userId + "/reports/settings-templates", HttpGet.METHOD_NAME, "api/reports/listUserReportSettingsTemplate.json"),
77+
RequestMock.build(this.url + "/users/" + userId + "/reports/settings-templates", HttpPost.METHOD_NAME, "api/reports/addUserReportSettingsTemplate.json", "api/reports/userReportSettingsTemplate.json"),
78+
RequestMock.build(this.url + "/users/" + userId + "/reports/settings-templates/" + reportSettingsTemplateId, HttpGet.METHOD_NAME, "api/reports/userReportSettingsTemplate.json"),
79+
RequestMock.build(this.url + "/users/" + userId + "/reports/settings-templates/" + reportSettingsTemplateId, HttpPatch.METHOD_NAME, "api/reports/editUserReportSettingsTemplate.json", "api/reports/userReportSettingsTemplate.json"),
80+
RequestMock.build(this.url + "/users/" + userId + "/reports/settings-templates/" + reportSettingsTemplateId, HttpDelete.METHOD_NAME));
7681
}
7782

7883
private ReportSettingsTemplate createSettingsTemplate() {
@@ -227,6 +232,49 @@ public void deleteReportSettingsTemplateTest() {
227232
this.getReportsApi().deleteReportSettingsTemplate(projectId, reportSettingsTemplateId);
228233
}
229234

235+
@Test
236+
public void listUserReportSettingsTemplateTest() {
237+
ResponseList<ReportSettingsTemplate> userReportSettingsTemplateResponseList = this.getReportsApi().listUserReportSettingsTemplate(userId, null, null);
238+
assertEquals(userReportSettingsTemplateResponseList.getData().size(), 1);
239+
assertEquals(userReportSettingsTemplateResponseList.getData().get(0).getData().getId(), userId);
240+
assertEquals(userReportSettingsTemplateResponseList.getData().get(0).getData().getName(), name);
241+
}
242+
243+
@Test
244+
public void addUserReportSettingsTemplateTest() {
245+
ReportSettingsTemplate request = createSettingsTemplate();
246+
request.setIsPublic(null);
247+
ResponseObject<ReportSettingsTemplate> userReportSettingsTemplateResponseObject = this.getReportsApi().addUserReportSettingsTemplate(userId, request);
248+
ReportSettingsTemplate response = userReportSettingsTemplateResponseObject.getData();
249+
assertEquals(request.getName(), response.getName());
250+
assertEquals(request.getCurrency(), response.getCurrency());
251+
assertEquals(request.getUnit(), response.getUnit());
252+
assertEquals(request.getConfig(), response.getConfig());
253+
}
254+
255+
@Test
256+
public void getUserReportSettingsTemplateTest() {
257+
ResponseObject<ReportSettingsTemplate> responseObject = this.getReportsApi().getUserReportSettingsTemplate(userId, reportSettingsTemplateId);
258+
assertEquals(responseObject.getData().getId(), userId);
259+
assertEquals(responseObject.getData().getName(), name);
260+
}
261+
262+
@Test
263+
public void editUserReportSettingsTemplateTest() {
264+
PatchRequest request = new PatchRequest();
265+
request.setOp(PatchOperation.REPLACE);
266+
request.setValue(name);
267+
request.setPath("name");
268+
ResponseObject<ReportSettingsTemplate> responseObject = this.getReportsApi().editUserReportSettingsTemplate(userId, reportSettingsTemplateId, singletonList(request));
269+
assertEquals(responseObject.getData().getId(), userId);
270+
assertEquals(responseObject.getData().getName(), name);
271+
}
272+
273+
@Test
274+
public void deleteUserReportSettingsTemplateTest() {
275+
this.getReportsApi().deleteUserReportSettingsTemplate(userId, reportSettingsTemplateId);
276+
}
277+
230278
@Test
231279
public void getListReportArchivesTest() {
232280
ResponseList<ReportArchive> responseObject = this.getReportsApi().listReportArchives(userId, null, null, null, null);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"name": "my report template",
3+
"currency": "USD",
4+
"unit": "strings",
5+
"config": {
6+
"regularRates": [
7+
{
8+
"mode": "no_match",
9+
"value": 0.1
10+
}
11+
],
12+
"individualRates": [
13+
{
14+
"languageIds": [
15+
"uk"
16+
],
17+
"userIds": [
18+
20
19+
],
20+
"rates": [
21+
{
22+
"mode": "tm_match",
23+
"value": 0.1
24+
}
25+
]
26+
}
27+
]
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
[
2+
{
3+
"op": "replace",
4+
"path": "name",
5+
"value": "my report template"
6+
}
7+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{
2+
"data": [
3+
{
4+
"data": {
5+
"id": 1,
6+
"name": "my report template",
7+
"currency": "USD",
8+
"unit": "words",
9+
"config": {
10+
"regularRates": [
11+
{
12+
"mode": "tm_match",
13+
"value": 0.1
14+
}
15+
],
16+
"individualRates": [
17+
{
18+
"languageIds": [
19+
"uk"
20+
],
21+
"userIds": [],
22+
"rates": [
23+
{
24+
"mode": "tm_match",
25+
"value": 0.1
26+
}
27+
]
28+
}
29+
]
30+
},
31+
"createdAt": "2019-09-23T11:26:54+00:00",
32+
"updatedAt": "2019-09-23T11:26:54+00:00"
33+
}
34+
}
35+
],
36+
"pagination": {
37+
"offset": 0,
38+
"limit": 25
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"data": {
3+
"id": 1,
4+
"name": "my report template",
5+
"currency": "USD",
6+
"unit": "strings",
7+
"config": {
8+
"regularRates": [
9+
{
10+
"mode": "no_match",
11+
"value": 0.1
12+
}
13+
],
14+
"individualRates": [
15+
{
16+
"languageIds": [
17+
"uk"
18+
],
19+
"userIds": [
20+
20
21+
],
22+
"rates": [
23+
{
24+
"mode": "tm_match",
25+
"value": 0.1
26+
}
27+
]
28+
}
29+
]
30+
},
31+
"createdAt": "2019-09-23T11:26:54+00:00",
32+
"updatedAt": "2019-09-23T11:26:54+00:00"
33+
}
34+
}

0 commit comments

Comments
 (0)