// Get total projects and repos of the user func (s *StatisticAPI) Get() { statistic := map[string]int64{} n, err := dao.GetTotalOfProjects("", 1) if err != nil { log.Errorf("failed to get total of public projects: %v", err) s.CustomAbort(http.StatusInternalServerError, "") } statistic[PPC] = n n, err = dao.GetTotalOfPublicRepositories("") if err != nil { log.Errorf("failed to get total of public repositories: %v", err) s.CustomAbort(http.StatusInternalServerError, "") } statistic[PRC] = n isAdmin, err := dao.IsAdminRole(s.userID) if err != nil { log.Errorf("Error occured in check admin, error: %v", err) s.CustomAbort(http.StatusInternalServerError, "Internal error.") } if isAdmin { n, err := dao.GetTotalOfProjects("") if err != nil { log.Errorf("failed to get total of projects: %v", err) s.CustomAbort(http.StatusInternalServerError, "") } statistic[MPC] = n statistic[TPC] = n n, err = dao.GetTotalOfRepositories("") if err != nil { log.Errorf("failed to get total of repositories: %v", err) s.CustomAbort(http.StatusInternalServerError, "") } statistic[MRC] = n statistic[TRC] = n } else { n, err := dao.GetTotalOfUserRelevantProjects(s.userID, "") if err != nil { log.Errorf("failed to get total of projects for user %d: %v", s.userID, err) s.CustomAbort(http.StatusInternalServerError, "") } statistic[MPC] = n n, err = dao.GetTotalOfUserRelevantRepositories(s.userID, "") if err != nil { log.Errorf("failed to get total of repositories for user %d: %v", s.userID, err) s.CustomAbort(http.StatusInternalServerError, "") } statistic[MRC] = n } s.Data["json"] = statistic s.ServeJSON() }
// List ... func (p *ProjectAPI) List() { var total int64 var public int var err error page, pageSize := p.GetPaginationParams() var projectList []models.Project projectName := p.GetString("project_name") isPublic := p.GetString("is_public") if len(isPublic) > 0 { public, err = strconv.Atoi(isPublic) if err != nil { log.Errorf("Error parsing public property: %v, error: %v", isPublic, err) p.CustomAbort(http.StatusBadRequest, "invalid project Id") } } isAdmin := false if public == 1 { total, err = dao.GetTotalOfProjects(projectName, 1) if err != nil { log.Errorf("failed to get total of projects: %v", err) p.CustomAbort(http.StatusInternalServerError, "") } projectList, err = dao.GetProjects(projectName, 1, pageSize, pageSize*(page-1)) if err != nil { log.Errorf("failed to get projects: %v", err) p.CustomAbort(http.StatusInternalServerError, "") } } else { //if the request is not for public projects, user must login or provide credential p.userID = p.ValidateUser() isAdmin, err = dao.IsAdminRole(p.userID) if err != nil { log.Errorf("Error occured in check admin, error: %v", err) p.CustomAbort(http.StatusInternalServerError, "Internal error.") } if isAdmin { total, err = dao.GetTotalOfProjects(projectName) if err != nil { log.Errorf("failed to get total of projects: %v", err) p.CustomAbort(http.StatusInternalServerError, "") } projectList, err = dao.GetProjects(projectName, pageSize, pageSize*(page-1)) if err != nil { log.Errorf("failed to get projects: %v", err) p.CustomAbort(http.StatusInternalServerError, "") } } else { total, err = dao.GetTotalOfUserRelevantProjects(p.userID, projectName) if err != nil { log.Errorf("failed to get total of projects: %v", err) p.CustomAbort(http.StatusInternalServerError, "") } projectList, err = dao.GetUserRelevantProjects(p.userID, projectName, pageSize, pageSize*(page-1)) if err != nil { log.Errorf("failed to get projects: %v", err) p.CustomAbort(http.StatusInternalServerError, "") } } } for i := 0; i < len(projectList); i++ { if public != 1 { if isAdmin { projectList[i].Role = models.PROJECTADMIN } else { roles, err := dao.GetUserProjectRoles(p.userID, projectList[i].ProjectID) if err != nil { log.Errorf("failed to get user's project role: %v", err) p.CustomAbort(http.StatusInternalServerError, "") } projectList[i].Role = roles[0].RoleID } if projectList[i].Role == models.PROJECTADMIN { projectList[i].Togglable = true } } repos, err := dao.GetRepositoryByProjectName(projectList[i].Name) if err != nil { log.Errorf("failed to get repositories of project %s: %v", projectList[i].Name, err) p.CustomAbort(http.StatusInternalServerError, "") } projectList[i].RepoCount = len(repos) } p.SetPaginationHeader(total, page, pageSize) p.Data["json"] = projectList p.ServeJSON() }