This is an automated email from the ASF dual-hosted git repository. lynwee pushed a commit to branch dev-1 in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
commit 86e2cbce15c90a7110d78f9c159cdec4e2a6e08b Author: d4x1 <[email protected]> AuthorDate: Wed Sep 25 10:27:23 2024 +0800 feat(project): add token check result in project check API --- backend/core/models/project.go | 22 +++++++++++++++++++++- backend/server/api/project/project.go | 9 +++++++++ backend/server/services/project.go | 27 +++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) diff --git a/backend/core/models/project.go b/backend/core/models/project.go index 99c61785d..5227d2a1c 100644 --- a/backend/core/models/project.go +++ b/backend/core/models/project.go @@ -73,9 +73,29 @@ type ApiOutputProject struct { } type ApiProjectCheck struct { - Exist bool `json:"exist" mapstructure:"exist"` + Exist bool `json:"exist" mapstructure:"exist"` + Tokens *ApiProjectCheckToken `json:"tokens,omitempty" mapstructure:"tokens"` } +type SuccessAndMessage struct { + Success bool `json:"success" mapstructure:"success"` + Message string `json:"message" mapstructure:"message"` +} + +// ApiProjectCheckToken +// +// { +// "plugin_name": +// { +// "connection_id": +// { +// "success": true, +// "message": "" +// } +// } +// } +type ApiProjectCheckToken = map[string]map[int]SuccessAndMessage + type Store struct { StoreKey string `gorm:"primaryKey;type:varchar(255)"` StoreValue json.RawMessage `gorm:"type:json;serializer:json"` diff --git a/backend/server/api/project/project.go b/backend/server/api/project/project.go index e826c71d1..b4a14fff5 100644 --- a/backend/server/api/project/project.go +++ b/backend/server/api/project/project.go @@ -73,6 +73,15 @@ func GetProjectCheck(c *gin.Context) { projectOutputCheck.Exist = true } + if c.Query("check_token") == "1" { + checkTokenResult, err := services.CheckProjectTokens(projectName) + if err != nil { + shared.ApiOutputError(c, errors.Default.Wrap(err, "error check project tokens")) + return + } + projectOutputCheck.Tokens = checkTokenResult + } + shared.ApiOutputSuccess(c, projectOutputCheck, http.StatusOK) // //shared.ApiOutputSuccess(c, projectOutputCheck, http.StatusOK) } diff --git a/backend/server/services/project.go b/backend/server/services/project.go index 614f10680..2e5c28aa8 100644 --- a/backend/server/services/project.go +++ b/backend/server/services/project.go @@ -193,6 +193,33 @@ func GetProject(name string) (*models.ApiOutputProject, errors.Error) { return makeProjectOutput(project, false) } +func CheckProjectTokens(name string) (*models.ApiProjectCheckToken, errors.Error) { + blueprint, err := GetBlueprintByProjectName(name) + if err != nil { + return nil, err + } + ret := make(map[string]map[int]models.SuccessAndMessage) + for _, connection := range blueprint.Connections { + pluginName := connection.PluginName + connectionId := int(connection.ConnectionId) + if _, ok := ret[pluginName]; !ok { + ret[pluginName] = make(map[int]models.SuccessAndMessage) + } + connectionTokenResult := models.SuccessAndMessage{ + Success: true, + Message: "success", + } + if err := checkConnectionToken(logger, *connection); err != nil { + ret[pluginName][connectionId] = models.SuccessAndMessage{ + Success: false, + Message: err.Error(), + } + } + ret[pluginName][connectionId] = connectionTokenResult + } + return &ret, nil +} + // PatchProject FIXME ... func PatchProject(name string, body map[string]interface{}) (*models.ApiOutputProject, errors.Error) { projectInput := &models.ApiInputProject{}
