package sagan.team.support;
import sagan.support.github.GitHubClient;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.social.github.api.GitHub;
import org.springframework.social.github.api.GitHubUser;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@Service
public class DefaultTeamImporter implements TeamImporter {
private final TeamService teamService;
private final GitHubClient gitHub;
private final String gitHubTeamId;
@Autowired
public DefaultTeamImporter(TeamService teamService, GitHubClient gitHub,
@Value("${github.team.id}") String gitHubTeamId) {
this.teamService = teamService;
this.gitHub = gitHub;
this.gitHubTeamId = gitHubTeamId;
}
@Transactional
public void importTeamMembers(GitHub gitHub) {
GitHubUser[] users = getGitHubUsers(gitHub);
List<Long> userIds = new ArrayList<>();
for (GitHubUser user : users) {
userIds.add(user.getId());
String userName = getNameForUser(user.getLogin(), gitHub);
teamService.createOrUpdateMemberProfile(user.getId(), user.getLogin(), user.getAvatarUrl(), userName);
}
teamService.showOnlyTeamMembersWithIds(userIds);
}
private GitHubUser[] getGitHubUsers(GitHub gitHub) {
String membersUrl = GitHubClient.API_URL_BASE + "/teams/{teamId}/members?per_page=100";
ResponseEntity<GitHubUser[]> entity =
gitHub.restOperations().getForEntity(membersUrl, GitHubUser[].class, gitHubTeamId);
return entity.getBody();
}
public String getNameForUser(String username, GitHub gitHub) {
return gitHub.restOperations()
.getForObject(GitHubClient.API_URL_BASE +"/users/{user}", GitHubUser.class, username)
.getName();
}
}