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

View File

@ -58,6 +58,16 @@ func (s *StatisticAPI) Get() {
proMap["my_repo_count"] = 0 proMap["my_repo_count"] = 0
proMap["public_project_count"] = 0 proMap["public_project_count"] = 0
proMap["public_repo_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 { if isAdmin {
proMap["total_project_count"] = len(projectList) proMap["total_project_count"] = len(projectList)
proMap["total_repo_count"] = getTotalRepoCount() proMap["total_repo_count"] = getTotalRepoCount()
@ -71,10 +81,6 @@ func (s *StatisticAPI) Get() {
proMap["my_project_count"]++ proMap["my_project_count"]++
proMap["my_repo_count"] += getRepoCountByProject(projectList[i].Name) 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.Data["json"] = proMap
s.ServeJSON() 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 // GetUserRelevantProjects returns the projects of the user which are not deleted and name like projectName
func GetUserRelevantProjects(userID int, projectName string) ([]models.Project, error) { func GetUserRelevantProjects(userID int, projectName string) ([]models.Project, error) {
o := orm.NewOrm() o := orm.NewOrm()
sql := `select distinct sql := `select distinct
p.project_id, p.owner_id, p.name,p.creation_time, p.update_time, p.public, pm.role role p.project_id, p.owner_id, p.name,p.creation_time, p.update_time, p.public, pm.role role
from project p from project p
@ -208,9 +207,7 @@ func GetUserRelevantProjects(userID int, projectName string) ([]models.Project,
sql += " and p.name like ? " sql += " and p.name like ? "
queryParam = append(queryParam, projectName) queryParam = append(queryParam, projectName)
} }
sql += " order by p.name " sql += " order by p.name "
var r []models.Project var r []models.Project
_, err := o.Raw(sql, queryParam).QueryRows(&r) _, err := o.Raw(sql, queryParam).QueryRows(&r)
if err != nil { 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 sql := `select project_id, owner_id, creation_time, update_time, name, public
from project from project
where deleted = 0 and public=1` where deleted = 0 and public=1`
queryParam := make([]interface{}, 1)
if len(projectName) > 0 { if len(projectName) > 0 {
sql += " and name like '" + projectName + "'" sql += " and name like ? "
queryParam = append(queryParam, projectName)
} }
sql += " order by name " sql += " order by name "
_, err := o.Raw(sql).QueryRows(&publicProjects) _, err := o.Raw(sql, queryParam).QueryRows(&publicProjects)
if err != nil { if err != nil {
return nil, err 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 sql := `select project_id, owner_id, creation_time, update_time, name, public
from project from project
where deleted = 0` where deleted = 0`
queryParam := make([]interface{}, 1)
if len(projectName) > 0 { if len(projectName) > 0 {
sql += " and name like '" + projectName + "'" sql += " and name like ? "
queryParam = append(queryParam, projectName)
} }
sql += " order by name " sql += " order by name "
var projects []models.Project 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 nil, err
} }
return projects, nil return projects, nil