This is an automated email from the ASF dual-hosted git repository.
klesh pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
The following commit(s) were added to refs/heads/main by this push:
new e0d6916c fix: lowcase params and fix detail error lost (#3857)
e0d6916c is described below
commit e0d6916c0c79fd78b94b76e65540f4188a58b96f
Author: mappjzc <[email protected]>
AuthorDate: Tue Dec 6 11:02:33 2022 +0800
fix: lowcase params and fix detail error lost (#3857)
Use lowcase for params input and output.
Fix the error about detail lost.
Nddtfjiang <[email protected]>
---
api/project/project.go | 29 +++++++++++++++++------------
api/shared/api_output.go | 2 +-
models/project.go | 20 ++++++++++----------
services/project_helper.go | 4 ++++
4 files changed, 32 insertions(+), 23 deletions(-)
diff --git a/api/project/project.go b/api/project/project.go
index 826797bc..786d8a75 100644
--- a/api/project/project.go
+++ b/api/project/project.go
@@ -29,8 +29,8 @@ import (
)
type PaginatedProjects struct {
- Projects []*models.Project
- Count int64
+ Projects []*models.BaseProject `json:"projects"`
+ Count int64 `json:"count"`
}
// @Summary Create and run a new project
@@ -63,10 +63,10 @@ func GetProject(c *gin.Context) {
}
// @Summary Get list of projects
-// @Description GET /projects?page=1&pagesize=10
+// @Description GET /projects?page=1&pageSize=10
// @Tags framework/projects
// @Param page query int true "query"
-// @Param pagesize query int true "query"
+// @Param pageSize query int true "query"
// @Success 200 {object} PaginatedProjects
// @Failure 400 {string} errcode.Error "Bad Request"
// @Failure 500 {string} errcode.Error "Internel Error"
@@ -83,8 +83,14 @@ func GetProjects(c *gin.Context) {
shared.ApiOutputAbort(c, errors.Default.Wrap(err, "error
getting projects"))
return
}
+
+ baseProjects := make([]*models.BaseProject, count)
+ for i, project := range projects {
+ baseProjects[i] = &project.BaseProject
+ }
+
shared.ApiOutputSuccess(c, PaginatedProjects{
- Projects: projects,
+ Projects: baseProjects,
Count: count,
}, http.StatusOK)
}
@@ -110,7 +116,7 @@ func PostProject(c *gin.Context) {
err = services.CreateProject(&models.Project{BaseProject:
projectInput.BaseProject})
if err != nil {
- shared.ApiOutputError(c, errors.Default.Wrap(err, "error
creating project"))
+ shared.ApiOutputError(c, errors.BadInput.Wrap(err, "error
creating project"))
return
}
@@ -130,13 +136,12 @@ func PostProject(c *gin.Context) {
shared.ApiOutputError(c, errors.BadInput.Wrap(err,
"Failed to flush project metrics"))
return
}
-
}
projectOutput.BaseProject = projectInput.BaseProject
err = services.LoadBluePrintAndMetrics(projectOutput)
if err != nil {
- shared.ApiOutputError(c, errors.BadInput.Wrap(err,
fmt.Sprintf("Failed to LoadBluePrintAndMetrics on PostProject for %s",
projectOutput.Name)))
+ shared.ApiOutputError(c, errors.Default.Wrap(err,
fmt.Sprintf("Failed to LoadBluePrintAndMetrics on PostProject for %s",
projectOutput.Name)))
return
}
@@ -164,7 +169,7 @@ func PatchProject(c *gin.Context) {
projectOutput, err := services.PatchProject(projectName, body)
if err != nil {
- shared.ApiOutputError(c, errors.Default.Wrap(err, "error patch
project"))
+ shared.ApiOutputError(c, errors.BadInput.Wrap(err, "error patch
project"))
return
}
@@ -196,7 +201,7 @@ func GetProjectMetrics(c *gin.Context) {
projectMetric, err := services.GetProjectMetric(projectName, pluginName)
if err != nil {
- shared.ApiOutputError(c, errors.Default.Wrap(err, "error
getting project metric"))
+ shared.ApiOutputError(c, errors.BadInput.Wrap(err, "error
getting project metric"))
return
}
@@ -232,7 +237,7 @@ func PostProjectMetrics(c *gin.Context) {
projectMetric.ProjectName = projectName
err =
services.CreateProjectMetric(&models.ProjectMetric{BaseProjectMetric:
*projectMetric})
if err != nil {
- shared.ApiOutputError(c, errors.Default.Wrap(err, "error
creating project"))
+ shared.ApiOutputError(c, errors.BadInput.Wrap(err, "error
creating project metric"))
return
}
@@ -261,7 +266,7 @@ func PatchProjectMetrics(c *gin.Context) {
projectMetric, err := services.PatchProjectMetric(projectName,
pluginName, body)
if err != nil {
- shared.ApiOutputError(c, errors.Default.Wrap(err, "error patch
project"))
+ shared.ApiOutputError(c, errors.BadInput.Wrap(err, "error patch
project metric"))
return
}
diff --git a/api/shared/api_output.go b/api/shared/api_output.go
index 188b82f0..4a1fb399 100644
--- a/api/shared/api_output.go
+++ b/api/shared/api_output.go
@@ -47,7 +47,7 @@ func ApiOutputError(c *gin.Context, err error) {
messages := e.Messages()
c.JSON(e.GetType().GetHttpCode(), &ApiBody{
Success: false,
- Message: messages.Get(),
+ Message: e.Error(),
Causes: messages.Causes(),
})
} else {
diff --git a/models/project.go b/models/project.go
index 2fa38cf0..6de2911f 100644
--- a/models/project.go
+++ b/models/project.go
@@ -20,8 +20,8 @@ package models
import "github.com/apache/incubator-devlake/models/common"
type BaseProject struct {
- Name string `gorm:"primaryKey;type:varchar(255)"`
- Description string `gorm:"type:text"`
+ Name string `json:"name" gorm:"primaryKey;type:varchar(255)"`
+ Description string `json:"description" gorm:"type:text"`
}
type Project struct {
@@ -34,13 +34,13 @@ func (Project) TableName() string {
}
type BaseMetric struct {
- PluginName string `gorm:"primaryKey;type:varchar(255)"`
- PluginOption string `gorm:"type:text"`
- Enable bool `gorm:"type:boolean"`
+ PluginName string `json:"pluginName"
gorm:"primaryKey;type:varchar(255)"`
+ PluginOption string `json:"pluginOption" gorm:"type:text"`
+ Enable bool `json:"enable" gorm:"type:boolean"`
}
type BaseProjectMetric struct {
- ProjectName string `gorm:"primaryKey;type:varchar(255)"`
+ ProjectName string `json:"projectName"
gorm:"primaryKey;type:varchar(255)"`
BaseMetric
}
@@ -55,12 +55,12 @@ func (ProjectMetric) TableName() string {
type ApiInputProject struct {
BaseProject
- Enable *bool
- Metrics *[]BaseMetric
+ Enable *bool `json:"enable"`
+ Metrics *[]BaseMetric `json:"metrics"`
}
type ApiOutputProject struct {
BaseProject
- Metrics *[]BaseMetric
- Blueprint *Blueprint
+ Metrics *[]BaseMetric `json:"metrics"`
+ Blueprint *Blueprint `json:"blueprint"`
}
diff --git a/services/project_helper.go b/services/project_helper.go
index 181a8b12..1d95989c 100644
--- a/services/project_helper.go
+++ b/services/project_helper.go
@@ -20,6 +20,7 @@ package services
import (
goerror "errors"
"fmt"
+ "strings"
"github.com/apache/incubator-devlake/errors"
"github.com/apache/incubator-devlake/models"
@@ -30,6 +31,9 @@ import (
func CreateDbProject(project *models.Project) errors.Error {
err := db.Create(project).Error
if err != nil {
+ if strings.Contains(err.Error(), "duplicate") {
+ return errors.BadInput.New("The project [%s] already
exists,cannot be created again")
+ }
return errors.Default.Wrap(err, "error creating DB project")
}
return nil