/** * 사용자 또는 그룹 정보 조회 * * <p>{@code loginId}에 해당하는 그룹이 있을 때는 그룹을 보여주고 해당하는 그룹이 없을 경우에는 {@code loginId}에 해당하는 사용자 페이지를 * 보여준다. * * <p>when: 사용자 로그인 아이디나 아바타를 클릭할 때 사용한다. * * <p>{@code groups}에는 여러 그룹 이름이 콤마(,)를 기준으로 들어올 수 있으며, 각그룹에 해당하는 프로젝트 목록을 간추리고, 그 프로젝트 목록에 포함되는 * 이슈, 게시물, 풀리퀘, 마일스톤 데이터를 종합하고 최근 등록일 순으로 정렬하여 보여준다. * * @param loginId 로그인ID * @return */ public static Result userInfo(String loginId, String groups, int daysAgo, String selected) { Organization org = Organization.findByName(loginId); if (org != null) { return redirect(routes.OrganizationApp.organization(org.name)); } if (daysAgo == UNDEFINED) { Cookie cookie = request().cookie(DAYS_AGO_COOKIE); if (cookie != null) { daysAgo = Integer.parseInt(cookie.value()); } else { daysAgo = DAYS_AGO; response().setCookie(DAYS_AGO_COOKIE, daysAgo + ""); } } else { if (daysAgo < 0) { daysAgo = 1; } response().setCookie(DAYS_AGO_COOKIE, daysAgo + ""); } User user = User.findByLoginId(loginId); String[] groupNames = groups.trim().split(","); List<Posting> postings = new ArrayList<>(); List<Issue> issues = new ArrayList<>(); List<PullRequest> pullRequests = new ArrayList<>(); List<Milestone> milestones = new ArrayList<>(); List<Project> projects = collectProjects(loginId, user, groupNames); collectDatum(projects, postings, issues, pullRequests, milestones, daysAgo); sortDatum(postings, issues, pullRequests, milestones); sortByLastPushedDateAndName(projects); return ok( view.render( user, groupNames, projects, postings, issues, pullRequests, milestones, daysAgo, selected)); }