@@ -20,6 +20,7 @@ package appWorkflow
20
20
import (
21
21
"errors"
22
22
"fmt"
23
+ util2 "github.com/devtron-labs/devtron/util"
23
24
"time"
24
25
25
26
mapset "github.com/deckarep/golang-set"
@@ -59,7 +60,7 @@ type AppWorkflowService interface {
59
60
FindAppWorkflowMappingByComponent (id int , compType string ) ([]* appWorkflow.AppWorkflowMapping , error )
60
61
CheckCdPipelineByCiPipelineId (id int ) bool
61
62
FindAppWorkflowByName (name string , appId int ) (AppWorkflowDto , error )
62
-
63
+ IsWorkflowNameFound ( workflowName string , appId int ) ( bool , error )
63
64
FindAllWorkflowsComponentDetails (appId int ) (* AllAppWorkflowComponentDetails , error )
64
65
FindAppWorkflowsByEnvironmentId (request resourceGroup2.ResourceGroupingRequest , token string ) ([]* AppWorkflowDto , error )
65
66
FindAllWorkflowsForApps (request WorkflowNamesRequest ) (* WorkflowNamesResponse , error )
@@ -178,7 +179,10 @@ func (impl AppWorkflowServiceImpl) CreateAppWorkflow(req AppWorkflowDto) (AppWor
178
179
var wf * appWorkflow.AppWorkflow
179
180
var savedAppWf * appWorkflow.AppWorkflow
180
181
var err error
181
-
182
+ ok , err := impl .IsWorkflowNameFound (req .Name , req .AppId )
183
+ if err != nil {
184
+ return req , err
185
+ }
182
186
if req .Id != 0 {
183
187
wf = & appWorkflow.AppWorkflow {
184
188
Id : req .Id ,
@@ -189,19 +193,20 @@ func (impl AppWorkflowServiceImpl) CreateAppWorkflow(req AppWorkflowDto) (AppWor
189
193
UpdatedBy : req .UserId ,
190
194
},
191
195
}
192
- savedAppWf , err = impl .appWorkflowRepository .UpdateAppWorkflow (wf )
193
- } else {
194
- workflow , err := impl .appWorkflowRepository .FindByNameAndAppId (req .Name , req .AppId )
195
- if err != nil && err != pg .ErrNoRows {
196
- impl .Logger .Errorw ("error in finding workflow by app id and name" , "name" , req .Name , "appId" , req .AppId )
197
- return req , err
198
- }
199
- if workflow .Id != 0 {
196
+ // if workflow name already exists then we will not allow update workflow name with same name
197
+ if ok {
200
198
impl .Logger .Errorw ("workflow with this name already exist" , "err" , err )
201
199
return req , errors .New (bean2 .WORKFLOW_EXIST_ERROR )
202
200
}
201
+ savedAppWf , err = impl .appWorkflowRepository .UpdateAppWorkflow (wf )
202
+ } else {
203
+ workflowName := req .Name
204
+ // if workflow already exists then we will assign a new name to the workflow
205
+ if ok {
206
+ workflowName = util2 .GenerateNewWorkflowName (workflowName )
207
+ }
203
208
wf := & appWorkflow.AppWorkflow {
204
- Name : req . Name ,
209
+ Name : workflowName ,
205
210
AppId : req .AppId ,
206
211
Active : true ,
207
212
AuditLog : sql.AuditLog {
@@ -911,3 +916,15 @@ func getMappingsFromIds(identifierToNodeMapping map[PipelineIdentifier]*AppWorkf
911
916
}
912
917
return result
913
918
}
919
+
920
+ func (impl AppWorkflowServiceImpl ) IsWorkflowNameFound (workflowName string , appId int ) (bool , error ) {
921
+ workflow , err := impl .appWorkflowRepository .FindByNameAndAppId (workflowName , appId )
922
+ if err != nil && ! errors .Is (err , pg .ErrNoRows ) && ! errors .Is (err , pg .ErrMultiRows ) {
923
+ impl .Logger .Errorw ("error in finding workflow by app id and name" , "name" , workflowName , "appId" , appId )
924
+ return false , err
925
+ }
926
+ if workflow .Id != 0 {
927
+ return true , nil
928
+ }
929
+ return false , nil
930
+ }
0 commit comments