mirror of
https://github.com/goharbor/harbor.git
synced 2024-09-30 06:18:02 +02: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 ...
|
// Get ...
|
||||||
func (p *ProjectAPI) Get() {
|
func (p *ProjectAPI) Get() {
|
||||||
queryProject := models.Project{UserID: p.userID}
|
var projectList []models.Project
|
||||||
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)
|
|
||||||
}
|
|
||||||
isAdmin, err := dao.IsAdminRole(p.userID)
|
isAdmin, err := dao.IsAdminRole(p.userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Error occured in check admin, 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.")
|
||||||
}
|
}
|
||||||
var projectList []models.Project
|
projectName := p.GetString("project_name")
|
||||||
if isAdmin {
|
if len(projectName) > 0 {
|
||||||
projectList, err = dao.GetAllProjects()
|
projectName = "%" + projectName + "%"
|
||||||
} else {
|
|
||||||
projectList, err = dao.GetUserRelevantProjects(queryProject)
|
|
||||||
}
|
}
|
||||||
if err != nil {
|
var public int
|
||||||
log.Errorf("Error occured in QueryProject, error: %v", err)
|
isPublic := p.GetString("is_public")
|
||||||
p.CustomAbort(http.StatusInternalServerError, "Internal error.")
|
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++ {
|
for i := 0; i < len(projectList); i++ {
|
||||||
if isAdmin {
|
if isAdmin {
|
||||||
|
@ -55,7 +55,7 @@ func (s *SearchAPI) Get() {
|
|||||||
var projects []models.Project
|
var projects []models.Project
|
||||||
|
|
||||||
if isSysAdmin {
|
if isSysAdmin {
|
||||||
projects, err = dao.GetAllProjects()
|
projects, err = dao.GetAllProjects("")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("failed to get all projects: %v", err)
|
log.Errorf("failed to get all projects: %v", err)
|
||||||
s.CustomAbort(http.StatusInternalServerError, "internal error")
|
s.CustomAbort(http.StatusInternalServerError, "internal error")
|
||||||
|
@ -38,7 +38,6 @@ func (s *StatisticAPI) Prepare() {
|
|||||||
|
|
||||||
// Get total projects and repos of the user
|
// Get total projects and repos of the user
|
||||||
func (s *StatisticAPI) Get() {
|
func (s *StatisticAPI) Get() {
|
||||||
queryProject := models.Project{UserID: s.userID}
|
|
||||||
isAdmin, err := dao.IsAdminRole(s.userID)
|
isAdmin, err := dao.IsAdminRole(s.userID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Error occured in check admin, error: %v", err)
|
log.Errorf("Error occured in check admin, error: %v", err)
|
||||||
@ -46,9 +45,9 @@ func (s *StatisticAPI) Get() {
|
|||||||
}
|
}
|
||||||
var projectList []models.Project
|
var projectList []models.Project
|
||||||
if isAdmin {
|
if isAdmin {
|
||||||
projectList, err = dao.GetAllProjects()
|
projectList, err = dao.GetAllProjects("")
|
||||||
} else {
|
} else {
|
||||||
projectList, err = dao.GetUserRelevantProjects(queryProject)
|
projectList, err = dao.GetUserRelevantProjects(s.userID, "")
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("Error occured in QueryProject, error: %v", err)
|
log.Errorf("Error occured in QueryProject, error: %v", err)
|
||||||
|
@ -599,8 +599,7 @@ func TestProjectPermission(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestGetUserRelevantProjects(t *testing.T) {
|
func TestGetUserRelevantProjects(t *testing.T) {
|
||||||
project := models.Project{UserID: currentUser.UserID}
|
projects, err := GetUserRelevantProjects(currentUser.UserID, "")
|
||||||
projects, err := GetUserRelevantProjects(project)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Error occurred in GetUserRelevantProjects: %v", err)
|
t.Errorf("Error occurred in GetUserRelevantProjects: %v", err)
|
||||||
}
|
}
|
||||||
@ -613,7 +612,7 @@ func TestGetUserRelevantProjects(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestGetAllProjects(t *testing.T) {
|
func TestGetAllProjects(t *testing.T) {
|
||||||
projects, err := GetAllProjects()
|
projects, err := GetAllProjects("")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Error occurred in GetAllProjects: %v", err)
|
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.
|
// 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()
|
o := orm.NewOrm()
|
||||||
|
|
||||||
sql := `select distinct
|
sql := `select distinct
|
||||||
@ -203,33 +203,50 @@ func GetUserRelevantProjects(query models.Project) ([]models.Project, error) {
|
|||||||
where p.deleted = 0 and pm.user_id= ?`
|
where p.deleted = 0 and pm.user_id= ?`
|
||||||
|
|
||||||
queryParam := make([]interface{}, 1)
|
queryParam := make([]interface{}, 1)
|
||||||
queryParam = append(queryParam, query.UserID)
|
queryParam = append(queryParam, userId)
|
||||||
if query.Public == 1 {
|
if projectName != "" {
|
||||||
sql += ` and p.public = ?`
|
|
||||||
queryParam = append(queryParam, query.Public)
|
|
||||||
}
|
|
||||||
if query.Name != "" {
|
|
||||||
sql += " and p.name like ? "
|
sql += " and p.name like ? "
|
||||||
queryParam = append(queryParam, query.Name)
|
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 {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return r, nil
|
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
|
// GetAllProjects returns all projects which are not deleted
|
||||||
func GetAllProjects() ([]models.Project, error) {
|
func GetAllProjects(projectName string) ([]models.Project, error) {
|
||||||
o := orm.NewOrm()
|
o := orm.NewOrm()
|
||||||
sql := `select project_id, name, public
|
sql := `select project_id, name, public
|
||||||
from project
|
from project
|
||||||
where deleted = 0`
|
where deleted = 0`
|
||||||
|
if len(projectName) > 0 {
|
||||||
|
sql += " and name like '" + projectName + "'"
|
||||||
|
}
|
||||||
|
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).QueryRows(&projects); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
Loading…
Reference in New Issue
Block a user