나만의공부(이슈정리)

[JAVA] live -study 대시보드 만들어보기 (gitHub 라이브러리 사용)

jay Joon 2020. 12. 6. 19:08

과제 1. live-study 대시 보드를 만드는 코드를 작성하세요.

  • 깃헙 이슈 1번부터 18번까지 댓글을 순회하며 댓글을 남긴 사용자를 체크 할 것.
  • 참여율을 계산하세요. 총 18회에 중에 몇 %를 참여했는지 소숫점 두자리가지 보여줄 것.
  • Github 자바 라이브러리를 사용하면 편리합니다.
  • 깃헙 API를 익명으로 호출하는데 제한이 있기 때문에 본인의 깃헙 프로젝트에 이슈를 만들고 테스트를 하시면 더 자주 테스트할 수 있습니다.

member 라는 객체를 생성하여 정보를 담고 관리하는 쪽으로 개발 했다.  

 

구현 Class

public class live_board {
    public static void main(String[] args) {
        try {
            Map<String,Member> members =new HashMap<>();
            String repoPath = "whiteship/live-study";
            String token = "자신의 토큰값";

            GitHub github = new GitHubBuilder().withOAuthToken(token).build();
            GHRepository repository = github.getRepository(repoPath);

            List<GHIssue> issues = repository.getIssues(GHIssueState.ALL);
            int issueCount = issues.size();
            for (GHIssue issue : issues) {
                String title = issue.getTitle();
                String[] s = title.split(" ");
                for (GHIssueComment comment : issue.getComments()) {
                    String id = comment.getUser().getLogin();
  
                    Member member = members.get(id);
                    // member를 가져와서 null 이면 새로운 member를 생성
                    if(member == null){
                        member = new Member(id);
                        members.put(id,member);
                    }
                    member.weekJoinMap.put(s[0],true);
                }
            }
            for (Member member : members.values()) {
                member.percentProcess();
                System.out.printf("[ %s ]" ,member.getId());
                System.out.printf("[ 참여율:%.3f ]",member.percent*100);
                System.out.printf(" 출석부:%s" ,member.weekJoinMap);
                System.out.println();
            }
        } catch (Exception e) {
        }

    }
    static class Member{
        private String id;
        private Map<String ,Boolean> weekJoinMap = new LinkedHashMap<>();
        private Double percent;
        public Member(String id) {
            this.id = id;
        }

        public void percentProcess(){
            double count = 0;
            Collection<Boolean> values = weekJoinMap.values();
            for (Boolean value : values) {
                if(value){
                    count++;
                }
            }
            this.percent = count/18;
        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public Map<String, Boolean> getWeekJoinMap() {
            return weekJoinMap;
        }

        public void setWeekJoinMap(Map<String, Boolean> weekJoinMap) {
            this.weekJoinMap = weekJoinMap;
        }

        public Double getPercent() {
            return percent;
        }

        public void setPercent(Double percent) {
            this.percent = percent;
        }

    }
}

결과물