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

Reply via email to