change api for statistics and project

This commit is contained in:
wemeya 2016-05-17 17:03:40 +08:00
parent f6375414b1
commit 313887967e
5 changed files with 61 additions and 39 deletions

View File

@ -113,34 +113,41 @@ func (p *ProjectAPI) Head() {
// Get ...
func (p *ProjectAPI) Get() {
queryProject := models.Project{UserID: p.userID}
projectName := p.GetString("project_name")
if len(projectName) > 0 {
queryProject.Name = "%" + projectName + "%"
}
isPublic := p.GetString("is_public")
if len(isPublic) > 0 {
public, err := strconv.ParseInt(isPublic, 10, 64)
if err != nil {
log.Errorf("Error parsing public property: %d, error: %v", isPublic, err)
p.CustomAbort(http.StatusBadRequest, "invalid project Id")
}
queryProject.Public = int(public)
}
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.")
}
var projectList []models.Project
if isAdmin {
projectList, err = dao.GetAllProjects()
} else {
projectList, err = dao.GetUserRelevantProjects(queryProject)
projectName := p.GetString("project_name")
if len(projectName) > 0 {
projectName = "%" + projectName + "%"
}
if err != nil {
log.Errorf("Error occured in QueryProject, error: %v", err)
p.CustomAbort(http.StatusInternalServerError, "Internal error.")
var public int
isPublic := p.GetString("is_public")
if len(isPublic) > 0 {
public, err = strconv.Atoi(isPublic)
if err != nil {
log.Errorf("Error parsing public property: %d, error: %v", isPublic, err)
p.CustomAbort(http.StatusBadRequest, "invalid project Id")
}
}
if public == 1 {
projectList, err = dao.GetPublicProjects(projectName)
if err != nil {
log.Errorf("Error occured in GetPulicProjects, 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.")
}
}
for i := 0; i < len(projectList); i++ {
if isAdmin {

View File

@ -55,7 +55,7 @@ func (s *SearchAPI) Get() {
var projects []models.Project
if isSysAdmin {
projects, err = dao.GetAllProjects()
projects, err = dao.GetAllProjects("")
if err != nil {
log.Errorf("failed to get all projects: %v", err)
s.CustomAbort(http.StatusInternalServerError, "internal error")

View File

@ -38,7 +38,6 @@ func (s *StatisticAPI) Prepare() {
// Get total projects and repos of the user
func (s *StatisticAPI) Get() {
queryProject := models.Project{UserID: s.userID}
isAdmin, err := dao.IsAdminRole(s.userID)
if err != nil {
log.Errorf("Error occured in check admin, error: %v", err)
@ -46,9 +45,9 @@ func (s *StatisticAPI) Get() {
}
var projectList []models.Project
if isAdmin {
projectList, err = dao.GetAllProjects()
projectList, err = dao.GetAllProjects("")
} else {
projectList, err = dao.GetUserRelevantProjects(queryProject)
projectList, err = dao.GetUserRelevantProjects(s.userID, "")
}
if err != nil {
log.Errorf("Error occured in QueryProject, error: %v", err)

View File

@ -599,8 +599,7 @@ func TestProjectPermission(t *testing.T) {
}
func TestGetUserRelevantProjects(t *testing.T) {
project := models.Project{UserID: currentUser.UserID}
projects, err := GetUserRelevantProjects(project)
projects, err := GetUserRelevantProjects(currentUser.UserID, "")
if err != nil {
t.Errorf("Error occurred in GetUserRelevantProjects: %v", err)
}
@ -613,7 +612,7 @@ func TestGetUserRelevantProjects(t *testing.T) {
}
func TestGetAllProjects(t *testing.T) {
projects, err := GetAllProjects()
projects, err := GetAllProjects("")
if err != nil {
t.Errorf("Error occurred in GetAllProjects: %v", err)
}

View File

@ -193,7 +193,7 @@ func SearchProjects(userID int) ([]models.Project, error) {
}
// GetUserRelevantProjects returns the projects based on publicity and user, disregarding the names etc.
func GetUserRelevantProjects(query models.Project) ([]models.Project, error) {
func GetUserRelevantProjects(userId int, projectName string) ([]models.Project, error) {
o := orm.NewOrm()
sql := `select distinct
@ -203,33 +203,50 @@ func GetUserRelevantProjects(query models.Project) ([]models.Project, error) {
where p.deleted = 0 and pm.user_id= ?`
queryParam := make([]interface{}, 1)
queryParam = append(queryParam, query.UserID)
if query.Public == 1 {
sql += ` and p.public = ?`
queryParam = append(queryParam, query.Public)
}
if query.Name != "" {
queryParam = append(queryParam, userId)
if projectName != "" {
sql += " and p.name like ? "
queryParam = append(queryParam, query.Name)
queryParam = append(queryParam, projectName)
}
sql += " order by p.name "
var r []models.Project
_, err := o.Raw(sql, queryParam).QueryRows(&r)
if err != nil {
return nil, err
}
return r, nil
}
//GetPublicProjects return all public projects whose name like projectName
func GetPublicProjects(projectName string) ([]models.Project, error) {
o := orm.NewOrm()
var publicProjects []models.Project
sql := `select project_id, name, public
from project
where deleted = 0 and public=1`
if len(projectName) > 0 {
sql += " and name like '" + projectName + "'"
}
sql += " order by name "
_, err := o.Raw(sql).QueryRows(&publicProjects)
if err != nil {
return nil, err
}
return publicProjects, nil
}
// GetAllProjects returns all projects which are not deleted
func GetAllProjects() ([]models.Project, error) {
func GetAllProjects(projectName string) ([]models.Project, error) {
o := orm.NewOrm()
sql := `select project_id, name, public
from project
where deleted = 0`
if len(projectName) > 0 {
sql += " and name like '" + projectName + "'"
}
sql += " order by name "
var projects []models.Project
if _, err := o.Raw(sql).QueryRows(&projects); err != nil {
return nil, err