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{}

Reply via email to