change code for statistics and project api

This commit is contained in:
wemeya 2016-05-18 14:36:20 +08:00
parent 89fce7ed22
commit 3e1bf8c862
3 changed files with 34 additions and 27 deletions

View File

@ -114,16 +114,12 @@ func (p *ProjectAPI) Head() {
// Get ...
func (p *ProjectAPI) Get() {
var projectList []models.Project
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.")
}
projectName := p.GetString("project_name")
if len(projectName) > 0 {
projectName = "%" + projectName + "%"
}
var public int
var err error
isPublic := p.GetString("is_public")
if len(isPublic) > 0 {
public, err = strconv.Atoi(isPublic)
@ -132,29 +128,33 @@ func (p *ProjectAPI) Get() {
p.CustomAbort(http.StatusBadRequest, "invalid project Id")
}
}
isAdmin := false
if public == 1 {
projectList, err = dao.GetPublicProjects(projectName)
} else {
isAdmin, err = dao.IsAdminRole(p.userID)
if err != nil {
log.Errorf("Error occured in GetPulicProjects, error: %v", err)
log.Errorf("Error occured in check admin, error: %v", err)
p.CustomAbort(http.StatusInternalServerError, "Internal error.")
}
} else {
if isAdmin {
projectList, err = dao.GetAllProjects(projectName)
} else {
projectList, err = dao.GetUserRelevantProjects(p.userID, projectName)
}
if err != nil {
log.Errorf("Error occured in GetUserRelevantProjects, error: %v", err)
p.CustomAbort(http.StatusInternalServerError, "Internal error.")
}
}
if err != nil {
log.Errorf("Error occured in GetUserRelevantProjects, error: %v", err)
p.CustomAbort(http.StatusInternalServerError, "Internal error.")
}
for i := 0; i < len(projectList); i++ {
if isAdmin {
projectList[i].Role = models.PROJECTADMIN
}
if projectList[i].Role == models.PROJECTADMIN {
projectList[i].Togglable = true
if public != 1 {
if isAdmin {
projectList[i].Role = models.PROJECTADMIN
}
if projectList[i].Role == models.PROJECTADMIN {
projectList[i].Togglable = true
}
}
projectList[i].RepoCount = getRepoCountByProject(projectList[i].Name)
}

View File

@ -58,6 +58,16 @@ func (s *StatisticAPI) Get() {
proMap["my_repo_count"] = 0
proMap["public_project_count"] = 0
proMap["public_repo_count"] = 0
var publicProjects []models.Project
publicProjects, err = dao.GetPublicProjects("")
if err != nil {
log.Errorf("Error occured in QueryPublicProject, error: %v", err)
s.CustomAbort(http.StatusInternalServerError, "Internal error.")
}
proMap["public_project_count"] = len(publicProjects)
for i := 0; i < len(publicProjects); i++ {
proMap["public_repo_count"] += getRepoCountByProject(publicProjects[i].Name)
}
if isAdmin {
proMap["total_project_count"] = len(projectList)
proMap["total_repo_count"] = getTotalRepoCount()
@ -71,10 +81,6 @@ func (s *StatisticAPI) Get() {
proMap["my_project_count"]++
proMap["my_repo_count"] += getRepoCountByProject(projectList[i].Name)
}
if projectList[i].Public == 1 {
proMap["public_project_count"]++
proMap["public_repo_count"] += getRepoCountByProject(projectList[i].Name)
}
}
s.Data["json"] = proMap
s.ServeJSON()

View File

@ -195,7 +195,6 @@ func SearchProjects(userID int) ([]models.Project, error) {
// GetUserRelevantProjects returns the projects of the user which are not deleted and name like projectName
func GetUserRelevantProjects(userID int, projectName string) ([]models.Project, error) {
o := orm.NewOrm()
sql := `select distinct
p.project_id, p.owner_id, p.name,p.creation_time, p.update_time, p.public, pm.role role
from project p
@ -208,9 +207,7 @@ func GetUserRelevantProjects(userID int, projectName string) ([]models.Project,
sql += " and p.name like ? "
queryParam = append(queryParam, projectName)
}
sql += " order by p.name "
var r []models.Project
_, err := o.Raw(sql, queryParam).QueryRows(&r)
if err != nil {
@ -226,11 +223,13 @@ func GetPublicProjects(projectName string) ([]models.Project, error) {
sql := `select project_id, owner_id, creation_time, update_time, name, public
from project
where deleted = 0 and public=1`
queryParam := make([]interface{}, 1)
if len(projectName) > 0 {
sql += " and name like '" + projectName + "'"
sql += " and name like ? "
queryParam = append(queryParam, projectName)
}
sql += " order by name "
_, err := o.Raw(sql).QueryRows(&publicProjects)
_, err := o.Raw(sql, queryParam).QueryRows(&publicProjects)
if err != nil {
return nil, err
}
@ -243,12 +242,14 @@ func GetAllProjects(projectName string) ([]models.Project, error) {
sql := `select project_id, owner_id, creation_time, update_time, name, public
from project
where deleted = 0`
queryParam := make([]interface{}, 1)
if len(projectName) > 0 {
sql += " and name like '" + projectName + "'"
sql += " and name like ? "
queryParam = append(queryParam, projectName)
}
sql += " order by name "
var projects []models.Project
if _, err := o.Raw(sql).QueryRows(&projects); err != nil {
if _, err := o.Raw(sql, queryParam).QueryRows(&projects); err != nil {
return nil, err
}
return projects, nil