mirror of https://github.com/goharbor/harbor.git
				
				
				
			change api for statistics and project
This commit is contained in:
		
							parent
							
								
									f6375414b1
								
							
						
					
					
						commit
						313887967e
					
				| 
						 | 
				
			
			@ -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 {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue