mirror of
https://github.com/goharbor/harbor
synced 2025-05-06 11:53:19 +00:00
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…
x
Reference in New Issue
Block a user