Skip to content

Commit

Permalink
Merge pull request #20 from crowdin/feat/teams
Browse files Browse the repository at this point in the history
feat:  teams API
  • Loading branch information
yevheniyJ authored Apr 23, 2020
2 parents 46106dd + 5ee9f8e commit 2fe5c81
Show file tree
Hide file tree
Showing 28 changed files with 557 additions and 3 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ dependencies {
<dependency>
<groupId>com.github.crowdin</groupId>
<artifactId>crowdin-api-client-java</artifactId>
<version>1.0.0</version>
<version>1.1.0</version>
</dependency>
```

Expand Down
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ plugins {
}

sourceCompatibility = 8
version '1.0.0'
version '1.1.0'

repositories {
mavenCentral()
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/crowdin/client/Client.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import com.crowdin.client.storage.StorageApi;
import com.crowdin.client.stringtranslations.StringTranslationsApi;
import com.crowdin.client.tasks.TasksApi;
import com.crowdin.client.teams.TeamsApi;
import com.crowdin.client.translationmemory.TranslationMemoryApi;
import com.crowdin.client.translations.TranslationsApi;
import com.crowdin.client.translationstatus.TranslationStatusApi;
Expand Down Expand Up @@ -46,6 +47,7 @@ public class Client extends CrowdinApi {
private final UsersApi usersApi;
private final VendorsApi vendorsApi;
private final WebhooksApi webhooksApi;
private final TeamsApi teamsApi;

public Client(Credentials credentials) {
super(credentials);
Expand All @@ -68,6 +70,7 @@ public Client(Credentials credentials) {
this.usersApi = new UsersApi(credentials);
this.vendorsApi = new VendorsApi(credentials);
this.webhooksApi = new WebhooksApi(credentials);
this.teamsApi = new TeamsApi(credentials);
}

public Client(Credentials credentials, ClientConfig clientConfig) {
Expand All @@ -91,6 +94,7 @@ public Client(Credentials credentials, ClientConfig clientConfig) {
this.usersApi = new UsersApi(credentials, clientConfig);
this.vendorsApi = new VendorsApi(credentials, clientConfig);
this.webhooksApi = new WebhooksApi(credentials, clientConfig);
this.teamsApi = new TeamsApi(credentials, clientConfig);
}

}
134 changes: 134 additions & 0 deletions src/main/java/com/crowdin/client/teams/TeamsApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
package com.crowdin.client.teams;

import com.crowdin.client.core.CrowdinApi;
import com.crowdin.client.core.http.HttpRequestConfig;
import com.crowdin.client.core.http.exceptions.HttpBadRequestException;
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.PatchRequest;
import com.crowdin.client.core.model.ResponseList;
import com.crowdin.client.core.model.ResponseObject;
import com.crowdin.client.teams.model.AddTeamMembersRequest;
import com.crowdin.client.teams.model.AddTeamMembersResponse;
import com.crowdin.client.teams.model.AddTeamMembersResponseInternal;
import com.crowdin.client.teams.model.AddTeamRequest;
import com.crowdin.client.teams.model.AddTeamToProjectRequest;
import com.crowdin.client.teams.model.ProjectTeamResources;
import com.crowdin.client.teams.model.Team;
import com.crowdin.client.teams.model.TeamMember;
import com.crowdin.client.teams.model.TeamMemberResponseList;
import com.crowdin.client.teams.model.TeamResponseList;
import com.crowdin.client.teams.model.TeamResponseObject;

import java.util.List;
import java.util.Map;
import java.util.Optional;

public class TeamsApi extends CrowdinApi {
public TeamsApi(Credentials credentials) {
super(credentials);
}

public TeamsApi(Credentials credentials, ClientConfig clientConfig) {
super(credentials, clientConfig);
}

/**
* @param projectId project identifier
* @param request request object
* @return project team status
*/
public ProjectTeamResources addTeamToProject(Long projectId, AddTeamToProjectRequest request) throws HttpException, HttpBadRequestException {
return this.httpClient.post(this.url + "/projects/" + projectId + "/teams", request, new HttpRequestConfig(), ProjectTeamResources.class);
}

/**
* @param limit maximum number of items to retrieve (default 25)
* @param offset starting offset in the collection (default 0)
* @return list of teams
*/
public ResponseList<Team> listTeams(Integer limit, Integer offset) throws HttpException, HttpBadRequestException {
Map<String, Optional<Object>> queryParams = HttpRequestConfig.buildUrlParams(
"limit", Optional.ofNullable(limit),
"offset", Optional.ofNullable(offset)
);
TeamResponseList teamResponseList = this.httpClient.get(this.url + "/teams", new HttpRequestConfig(queryParams), TeamResponseList.class);
return TeamResponseList.to(teamResponseList);
}

/**
* @param request request object
* @return newly created team
*/
public ResponseObject<Team> addTeam(AddTeamRequest request) throws HttpException, HttpBadRequestException {
TeamResponseObject teamResponseObject = this.httpClient.post(this.url + "/teams", request, new HttpRequestConfig(), TeamResponseObject.class);
return ResponseObject.of(teamResponseObject.getData());
}

/**
* @param teamId team identifier
* @return team
*/
public ResponseObject<Team> getTeam(Long teamId) throws HttpException, HttpBadRequestException {
TeamResponseObject teamResponseObject = this.httpClient.get(this.url + "/teams/" + teamId, new HttpRequestConfig(), TeamResponseObject.class);
return ResponseObject.of(teamResponseObject.getData());
}

/**
* @param teamId team identifier
*/
public void deleteTeam(Long teamId) throws HttpException, HttpBadRequestException {
this.httpClient.delete(this.url + "/teams/" + teamId, new HttpRequestConfig(), Void.class);
}

/**
* @param teamId team identifier
* @param request request object
* @return updated team
*/
public ResponseObject<Team> editTeam(Long teamId, List<PatchRequest> request) throws HttpException, HttpBadRequestException {
TeamResponseObject teamResponseObject = this.httpClient.patch(this.url + "/teams/" + teamId, request, new HttpRequestConfig(), TeamResponseObject.class);
return ResponseObject.of(teamResponseObject.getData());
}

/**
* @param teamId team identifier
* @param limit maximum number of items to retrieve (default 25)
* @param offset starting offset in the collection (default 0)
* @return list of team members
*/
public ResponseList<TeamMember> listTeamMembers(Long teamId, Integer limit, Integer offset) throws HttpException, HttpBadRequestException {
Map<String, Optional<Object>> queryParams = HttpRequestConfig.buildUrlParams(
"limit", Optional.ofNullable(limit),
"offset", Optional.ofNullable(offset)
);
TeamMemberResponseList teamMemberResponseList = this.httpClient.get(this.url + "/teams/" + teamId + "/members", new HttpRequestConfig(queryParams), TeamMemberResponseList.class);
return TeamMemberResponseList.to(teamMemberResponseList);
}

/**
* @param teamId team identifier
* @param request request object
* @return response
*/
public AddTeamMembersResponse addTeamMembers(Long teamId, AddTeamMembersRequest request) throws HttpException, HttpBadRequestException {
AddTeamMembersResponseInternal addTeamMembersResponseInternal = this.httpClient.post(this.url + "/teams/" + teamId + "/members", request, new HttpRequestConfig(), AddTeamMembersResponseInternal.class);
return AddTeamMembersResponseInternal.to(addTeamMembersResponseInternal);
}

/**
* @param teamId team identifier
*/
public void deleteAllTeamMembers(Long teamId) throws HttpException, HttpBadRequestException {
this.httpClient.delete(this.url + "/teams/" + teamId + "/members", new HttpRequestConfig(), Void.class);
}

/**
* @param teamId team identifier
* @param memberId member identifier
*/
public void deleteTeamMember(Long teamId, Long memberId) throws HttpException, HttpBadRequestException {
this.httpClient.delete(this.url + "/teams/" + teamId + "/members/" + memberId, new HttpRequestConfig(), Void.class);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.crowdin.client.teams.model;

import lombok.Data;

import java.util.List;

@Data
public class AddTeamMembersRequest {

private List<Long> userIds;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.crowdin.client.teams.model;

import com.crowdin.client.core.model.Pagination;
import com.crowdin.client.core.model.ResponseObject;
import lombok.Data;

import java.util.List;

@Data
public class AddTeamMembersResponse {

private List<ResponseObject<TeamMember>> skipped;
private List<ResponseObject<TeamMember>> added;
private Pagination pagination;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.crowdin.client.teams.model;

import com.crowdin.client.core.model.Pagination;
import com.crowdin.client.core.model.ResponseObject;
import lombok.Data;

import java.util.List;
import java.util.stream.Collectors;

@Data
public class AddTeamMembersResponseInternal {

private List<TeamMemberResponseObject> skipped;
private List<TeamMemberResponseObject> added;
private Pagination pagination;

public static AddTeamMembersResponse to(AddTeamMembersResponseInternal addTeamMembersResponseInternal) {
AddTeamMembersResponse response = new AddTeamMembersResponse();
response.setPagination(addTeamMembersResponseInternal.getPagination());
response.setAdded(addTeamMembersResponseInternal.getAdded().stream().map(TeamMemberResponseObject::getData).map(ResponseObject::of).collect(Collectors.toList()));
response.setSkipped(addTeamMembersResponseInternal.getSkipped().stream().map(TeamMemberResponseObject::getData).map(ResponseObject::of).collect(Collectors.toList()));
return response;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.crowdin.client.teams.model;

import lombok.Data;

@Data
public class AddTeamRequest {

private String name;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.crowdin.client.teams.model;

import lombok.Data;

@Data
public class AddTeamToProjectRequest {

private Long teamId;
private boolean accessToAllWorkflowSteps;
private boolean managerAccess;
private Object permissions;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.crowdin.client.teams.model;

import lombok.Data;

@Data
public class ProjectTeamResource {

private Long id;
private boolean hasManagerAccess;
private boolean hasAccessToAllWorkflowSteps;
private Object permissions;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.crowdin.client.teams.model;

import lombok.Data;

@Data
public class ProjectTeamResources {
private ProjectTeamResource skipped;
private ProjectTeamResource added;
}
15 changes: 15 additions & 0 deletions src/main/java/com/crowdin/client/teams/model/Team.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.crowdin.client.teams.model;

import lombok.Data;

import java.util.Date;

@Data
public class Team {

private Long id;
private String name;
private Integer totalMembers;
private Date createdAt;
private Date updatedAt;
}
16 changes: 16 additions & 0 deletions src/main/java/com/crowdin/client/teams/model/TeamMember.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.crowdin.client.teams.model;

import lombok.Data;

import java.util.Date;

@Data
public class TeamMember {

private Long id;
private String username;
private String firstName;
private String lastName;
private String avatarUrl;
private Date addedAt;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.crowdin.client.teams.model;

import com.crowdin.client.core.model.Pagination;
import com.crowdin.client.core.model.ResponseList;
import com.crowdin.client.core.model.ResponseObject;
import lombok.Data;

import java.util.List;
import java.util.stream.Collectors;

@Data
public class TeamMemberResponseList {

private List<TeamMemberResponseObject> data;
private Pagination pagination;

public static ResponseList<TeamMember> to(TeamMemberResponseList teamMemberResponseList) {
return ResponseList.of(
teamMemberResponseList.getData().stream()
.map(TeamMemberResponseObject::getData)
.map(ResponseObject::of)
.collect(Collectors.toList()),
teamMemberResponseList.getPagination()
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.crowdin.client.teams.model;

import lombok.Data;

@Data
public class TeamMemberResponseObject {

private TeamMember data;
}
26 changes: 26 additions & 0 deletions src/main/java/com/crowdin/client/teams/model/TeamResponseList.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.crowdin.client.teams.model;

import com.crowdin.client.core.model.Pagination;
import com.crowdin.client.core.model.ResponseList;
import com.crowdin.client.core.model.ResponseObject;
import lombok.Data;

import java.util.List;
import java.util.stream.Collectors;

@Data
public class TeamResponseList {

private List<TeamResponseObject> data;
private Pagination pagination;

public static ResponseList<Team> to(TeamResponseList teamResponseList) {
return ResponseList.of(
teamResponseList.getData().stream()
.map(TeamResponseObject::getData)
.map(ResponseObject::of)
.collect(Collectors.toList()),
teamResponseList.getPagination()
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.crowdin.client.teams.model;

import lombok.Data;

@Data
public class TeamResponseObject {

private Team data;
}
1 change: 0 additions & 1 deletion src/test/java/com/crowdin/client/tasks/TasksApiTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,6 @@ public void exportTaskStringsTest() {
assertEquals(downloadLinkResponseObject.getData().getUrl(), link);
}


@Test
public void getTaskTest() {
ResponseObject<Task> taskResponseObject = this.getTasksApi().getTask(projectId, taskId);
Expand Down
Loading

0 comments on commit 2fe5c81

Please sign in to comment.