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 639985460 fix(framework): update trigger api's request body schema 
(#7888)
639985460 is described below

commit 6399854605ae9e075d3863a1a9419af8fcfd094b
Author: Lynwee <[email protected]>
AuthorDate: Tue Aug 13 17:36:53 2024 +0800

    fix(framework): update trigger api's request body schema (#7888)
    
    * fix(framework): update trigger api's request body schema
    
    * fix(framework): fix test errors
    
    * fix(framework): fix test errors
---
 backend/core/models/blueprint.go                             | 12 ++++++++----
 backend/helpers/e2ehelper/data_flow_tester.go                |  4 +++-
 .../helpers/pluginhelper/api/collector_state_manager_test.go |  8 ++++----
 .../helpers/pluginhelper/api/subtask_state_manager_test.go   |  8 ++++----
 backend/server/api/blueprints/blueprints.go                  | 12 ++++++------
 backend/server/services/blueprint.go                         | 12 ++++++++----
 6 files changed, 33 insertions(+), 23 deletions(-)

diff --git a/backend/core/models/blueprint.go b/backend/core/models/blueprint.go
index 354c94408..f30adec9f 100644
--- a/backend/core/models/blueprint.go
+++ b/backend/core/models/blueprint.go
@@ -82,9 +82,13 @@ func (BlueprintScope) TableName() string {
        return "_devlake_blueprint_scopes"
 }
 
+type TriggerSyncPolicy struct {
+       SkipCollectors bool `json:"skipCollectors"`
+       FullSync       bool `json:"fullSync"`
+}
+
 type SyncPolicy struct {
-       SkipOnFail     bool       `json:"skipOnFail"`
-       SkipCollectors bool       `json:"skipCollectors"`
-       FullSync       bool       `json:"fullSync"`
-       TimeAfter      *time.Time `json:"timeAfter"`
+       SkipOnFail bool       `json:"skipOnFail"`
+       TimeAfter  *time.Time `json:"timeAfter"`
+       TriggerSyncPolicy
 }
diff --git a/backend/helpers/e2ehelper/data_flow_tester.go 
b/backend/helpers/e2ehelper/data_flow_tester.go
index b409fd360..82fff33c1 100644
--- a/backend/helpers/e2ehelper/data_flow_tester.go
+++ b/backend/helpers/e2ehelper/data_flow_tester.go
@@ -228,7 +228,9 @@ func (t *DataFlowTester) Subtask(subtaskMeta 
plugin.SubTaskMeta, taskData interf
 // SubtaskContext creates a subtask context
 func (t *DataFlowTester) SubtaskContext(taskData interface{}) 
plugin.SubTaskContext {
        syncPolicy := &models.SyncPolicy{
-               FullSync: true,
+               TriggerSyncPolicy: models.TriggerSyncPolicy{
+                       FullSync: true,
+               },
        }
        return contextimpl.NewStandaloneSubTaskContext(context.Background(), 
runner.CreateBasicRes(t.Cfg, t.Log, t.Db), t.Name, taskData, t.Name, syncPolicy)
 }
diff --git a/backend/helpers/pluginhelper/api/collector_state_manager_test.go 
b/backend/helpers/pluginhelper/api/collector_state_manager_test.go
index 5ffc39805..f42eecd2a 100644
--- a/backend/helpers/pluginhelper/api/collector_state_manager_test.go
+++ b/backend/helpers/pluginhelper/api/collector_state_manager_test.go
@@ -101,7 +101,7 @@ func TestCollectorStateManager(t *testing.T) {
                {
                        name:                      "Full sync - with timeAfter",
                        state:                     
&models.CollectorLatestState{TimeAfter: &time1, LatestSuccessStart: &time1},
-                       syncPolicy:                &models.SyncPolicy{FullSync: 
true},
+                       syncPolicy:                
&models.SyncPolicy{TriggerSyncPolicy: models.TriggerSyncPolicy{FullSync: true}},
                        expectedIsIncremental:     false,
                        expectedSince:             &time1,
                        expectedNewStateTimeAfter: &time1,
@@ -109,7 +109,7 @@ func TestCollectorStateManager(t *testing.T) {
                {
                        name:                      "Full sync - with newer 
timeAfter",
                        state:                     
&models.CollectorLatestState{TimeAfter: &time1, LatestSuccessStart: &time1},
-                       syncPolicy:                
&models.SyncPolicy{TimeAfter: &time2, FullSync: true},
+                       syncPolicy:                
&models.SyncPolicy{TimeAfter: &time2, TriggerSyncPolicy: 
models.TriggerSyncPolicy{FullSync: true}},
                        expectedIsIncremental:     false,
                        expectedSince:             &time2,
                        expectedNewStateTimeAfter: &time2,
@@ -117,7 +117,7 @@ func TestCollectorStateManager(t *testing.T) {
                {
                        name:                      "Full sync - with older 
timeAfter",
                        state:                     
&models.CollectorLatestState{TimeAfter: &time1, LatestSuccessStart: &time1},
-                       syncPolicy:                
&models.SyncPolicy{TimeAfter: &time0, FullSync: true},
+                       syncPolicy:                
&models.SyncPolicy{TimeAfter: &time0, TriggerSyncPolicy: 
models.TriggerSyncPolicy{FullSync: true}},
                        expectedIsIncremental:     false,
                        expectedSince:             &time0,
                        expectedNewStateTimeAfter: &time0,
@@ -125,7 +125,7 @@ func TestCollectorStateManager(t *testing.T) {
                {
                        name:                      "Full sync - without 
timeAfter",
                        state:                     
&models.CollectorLatestState{TimeAfter: nil, LatestSuccessStart: &time1},
-                       syncPolicy:                &models.SyncPolicy{FullSync: 
true},
+                       syncPolicy:                
&models.SyncPolicy{TriggerSyncPolicy: models.TriggerSyncPolicy{FullSync: true}},
                        expectedIsIncremental:     false,
                        expectedSince:             nil,
                        expectedNewStateTimeAfter: nil,
diff --git a/backend/helpers/pluginhelper/api/subtask_state_manager_test.go 
b/backend/helpers/pluginhelper/api/subtask_state_manager_test.go
index 9bbcc4f39..06eeaa433 100644
--- a/backend/helpers/pluginhelper/api/subtask_state_manager_test.go
+++ b/backend/helpers/pluginhelper/api/subtask_state_manager_test.go
@@ -111,7 +111,7 @@ func TestSubtaskStateManager(t *testing.T) {
                {
                        name:                      "Full sync - with timeAfter",
                        state:                     
&models.SubtaskState{TimeAfter: &time1, PrevStartedAt: &time1},
-                       syncPolicy:                &models.SyncPolicy{FullSync: 
true},
+                       syncPolicy:                
&models.SyncPolicy{TriggerSyncPolicy: models.TriggerSyncPolicy{FullSync: true}},
                        expectedIsIncremental:     false,
                        expectedSince:             &time1,
                        expectedNewStateTimeAfter: &time1,
@@ -119,7 +119,7 @@ func TestSubtaskStateManager(t *testing.T) {
                {
                        name:                      "Full sync - with newer 
timeAfter",
                        state:                     
&models.SubtaskState{TimeAfter: &time1, PrevStartedAt: &time1},
-                       syncPolicy:                
&models.SyncPolicy{TimeAfter: &time2, FullSync: true},
+                       syncPolicy:                
&models.SyncPolicy{TimeAfter: &time2, TriggerSyncPolicy: 
models.TriggerSyncPolicy{FullSync: true}},
                        expectedIsIncremental:     false,
                        expectedSince:             &time2,
                        expectedNewStateTimeAfter: &time2,
@@ -127,7 +127,7 @@ func TestSubtaskStateManager(t *testing.T) {
                {
                        name:                      "Full sync - with older 
timeAfter",
                        state:                     
&models.SubtaskState{TimeAfter: &time1, PrevStartedAt: &time1},
-                       syncPolicy:                
&models.SyncPolicy{TimeAfter: &time0, FullSync: true},
+                       syncPolicy:                
&models.SyncPolicy{TimeAfter: &time0, TriggerSyncPolicy: 
models.TriggerSyncPolicy{FullSync: true}},
                        expectedIsIncremental:     false,
                        expectedSince:             &time0,
                        expectedNewStateTimeAfter: &time0,
@@ -135,7 +135,7 @@ func TestSubtaskStateManager(t *testing.T) {
                {
                        name:                      "Full sync - without 
timeAfter",
                        state:                     
&models.SubtaskState{TimeAfter: nil, PrevStartedAt: &time1},
-                       syncPolicy:                &models.SyncPolicy{FullSync: 
true},
+                       syncPolicy:                
&models.SyncPolicy{TriggerSyncPolicy: models.TriggerSyncPolicy{FullSync: true}},
                        expectedIsIncremental:     false,
                        expectedSince:             nil,
                        expectedNewStateTimeAfter: nil,
diff --git a/backend/server/api/blueprints/blueprints.go 
b/backend/server/api/blueprints/blueprints.go
index cbe36cb43..23383d468 100644
--- a/backend/server/api/blueprints/blueprints.go
+++ b/backend/server/api/blueprints/blueprints.go
@@ -165,7 +165,7 @@ func Patch(c *gin.Context) {
 // @Tags framework/blueprints
 // @Accept application/json
 // @Param blueprintId path string true "blueprintId"
-// @Param skipCollectors body models.SyncPolicy false "json"
+// @Param skipCollectors body models.TriggerSyncPolicy false "json"
 // @Success 200 {object} models.Pipeline
 // @Failure 400 {object} shared.ApiBody "Bad Request"
 // @Failure 500 {object} shared.ApiBody "Internal Error"
@@ -178,18 +178,18 @@ func Trigger(c *gin.Context) {
                return
        }
 
-       syncPolicy := &models.SyncPolicy{}
+       triggerSyncPolicy := &models.TriggerSyncPolicy{}
        if c.Request.Body == nil || c.Request.ContentLength == 0 {
-               syncPolicy.SkipCollectors = false
-               syncPolicy.FullSync = false
+               triggerSyncPolicy.SkipCollectors = false
+               triggerSyncPolicy.FullSync = false
        } else {
-               err = c.ShouldBindJSON(syncPolicy)
+               err = c.ShouldBindJSON(triggerSyncPolicy)
                if err != nil {
                        shared.ApiOutputError(c, errors.BadInput.Wrap(err, 
"error binding request body"))
                        return
                }
        }
-       pipeline, err := services.TriggerBlueprint(id, syncPolicy, true)
+       pipeline, err := services.TriggerBlueprint(id, triggerSyncPolicy, true)
        if err != nil {
                shared.ApiOutputError(c, errors.Default.Wrap(err, "error 
triggering blueprint"))
                return
diff --git a/backend/server/services/blueprint.go 
b/backend/server/services/blueprint.go
index cf7d20ccf..d400abae2 100644
--- a/backend/server/services/blueprint.go
+++ b/backend/server/services/blueprint.go
@@ -400,7 +400,7 @@ func SequentializePipelinePlans(plans 
...models.PipelinePlan) models.PipelinePla
 }
 
 // TriggerBlueprint triggers blueprint immediately
-func TriggerBlueprint(id uint64, syncPolicy *models.SyncPolicy, shouldSanitize 
bool) (*models.Pipeline, errors.Error) {
+func TriggerBlueprint(id uint64, triggerSyncPolicy *models.TriggerSyncPolicy, 
shouldSanitize bool) (*models.Pipeline, errors.Error) {
        // load record from db
        blueprint, err := GetBlueprint(id, false)
        if err != nil {
@@ -410,9 +410,13 @@ func TriggerBlueprint(id uint64, syncPolicy 
*models.SyncPolicy, shouldSanitize b
        if !blueprint.Enable {
                return nil, errors.BadInput.New("blueprint is not enabled")
        }
-       blueprint.SkipCollectors = syncPolicy.SkipCollectors
-       blueprint.FullSync = syncPolicy.FullSync
-       pipeline, err := createPipelineByBlueprint(blueprint, syncPolicy)
+       blueprint.SkipCollectors = triggerSyncPolicy.SkipCollectors
+       blueprint.FullSync = triggerSyncPolicy.FullSync
+       pipeline, err := createPipelineByBlueprint(blueprint, 
&models.SyncPolicy{
+               SkipOnFail:        false,
+               TimeAfter:         nil,
+               TriggerSyncPolicy: *triggerSyncPolicy,
+       })
        if err != nil {
                return nil, err
        }

Reply via email to