17
17
package repository
18
18
19
19
import (
20
+ "fmt"
21
+ "github.com/devtron-labs/devtron/pkg/resourceQualifiers"
20
22
"github.com/devtron-labs/devtron/pkg/sql"
21
23
"github.com/go-pg/pg"
22
24
"github.com/go-pg/pg/orm"
25
+ "k8s.io/utils/pointer"
23
26
"strconv"
24
27
)
25
28
@@ -83,6 +86,7 @@ type NotificationSettings struct {
83
86
ViewId int `sql:"view_id"`
84
87
NotificationRuleId int `sql:"notification_rule_id"`
85
88
AdditionalConfigJson string `sql:"additional_config_json"` // user defined config json;
89
+ ClusterId * int `sql:"cluster_id"`
86
90
}
87
91
88
92
type SettingOptionDTO struct {
@@ -94,6 +98,7 @@ type SettingOptionDTO struct {
94
98
PipelineType string `json:"pipelineType"`
95
99
AppName string `json:"appName"`
96
100
EnvironmentName string `json:"environmentName,omitempty"`
101
+ ClusterName string `json:"clusterName"`
97
102
}
98
103
99
104
func (impl * NotificationSettingsRepositoryImpl ) FindNSViewCount () (int , error ) {
@@ -221,40 +226,54 @@ func (impl *NotificationSettingsRepositoryImpl) DeleteNotificationSettingsViewBy
221
226
222
227
func (impl * NotificationSettingsRepositoryImpl ) FindNotificationSettingDeploymentOptions (settingRequest * SearchRequest ) ([]* SettingOptionDTO , error ) {
223
228
var settingOption []* SettingOptionDTO
224
- query := "SELECT p.id as pipeline_id,p.pipeline_name, env.environment_name, a.app_name FROM pipeline p" +
229
+ query := "SELECT p.id as pipeline_id,p.pipeline_name, env.environment_name, a.app_name,c.cluster_name AS cluster_name " +
230
+ " FROM pipeline p" +
225
231
" INNER JOIN app a on a.id=p.app_id" +
226
- " INNER JOIN environment env on env.id = p.environment_id"
232
+ " INNER JOIN environment env on env.id = p.environment_id " +
233
+ " INNER JOIN cluster c on c.id = env.cluster_id"
227
234
query = query + " WHERE p.deleted = false"
228
235
236
+ var envProdIdentifier * bool
237
+ envIds := make ([]* int , 0 )
238
+ for _ , envId := range settingRequest .EnvId {
239
+ if * envId == resourceQualifiers .AllExistingAndFutureProdEnvsInt || * envId == resourceQualifiers .AllExistingAndFutureNonProdEnvsInt {
240
+ envProdIdentifier = pointer .Bool (* envId == resourceQualifiers .AllExistingAndFutureProdEnvsInt )
241
+ continue
242
+ }
243
+ envIds = append (envIds , envId )
244
+ }
245
+
246
+ queryParams := make ([]interface {}, 0 )
229
247
if len (settingRequest .TeamId ) > 0 {
230
248
query = query + " AND a.team_id in (?)"
231
- } else if len (settingRequest .EnvId ) > 0 {
232
- query = query + " AND p.environment_id in (?)"
249
+ queryParams = append (queryParams , pg .In (settingRequest .TeamId ))
250
+ } else if len (envIds ) > 0 || envProdIdentifier != nil {
251
+ envQuery := ""
252
+ if len (envIds ) > 0 {
253
+ envQuery = " p.environment_id in (?) "
254
+ queryParams = append (queryParams , pg .In (envIds ))
255
+ }
256
+ if envProdIdentifier != nil {
257
+ if len (envQuery ) > 0 {
258
+ envQuery += " OR "
259
+ }
260
+ envQuery += " env.default = ? "
261
+ queryParams = append (queryParams , * envProdIdentifier )
262
+
263
+ }
264
+ query = query + fmt .Sprintf (" AND (%s)" , envQuery )
233
265
} else if len (settingRequest .AppId ) > 0 {
234
266
query = query + " AND p.app_id in (?)"
267
+ queryParams = append (queryParams , pg .In (settingRequest .AppId ))
235
268
} else if len (settingRequest .PipelineName ) > 0 {
236
269
query = query + " AND p.pipeline_name like (?)"
270
+ queryParams = append (queryParams , settingRequest .PipelineName )
271
+ } else if len (settingRequest .ClusterId ) > 0 {
272
+ query = query + fmt .Sprintf (" AND env.cluster_id IN (?)" )
273
+ queryParams = append (queryParams , pg .In (settingRequest .ClusterId ))
237
274
}
238
- query = query + " GROUP BY 1,2,3,4;"
239
-
240
- var err error
241
- if len (settingRequest .TeamId ) > 0 && len (settingRequest .EnvId ) == 0 && len (settingRequest .AppId ) == 0 {
242
- _ , err = impl .dbConnection .Query (& settingOption , query , pg .In (settingRequest .TeamId ))
243
- } else if len (settingRequest .TeamId ) == 0 && len (settingRequest .EnvId ) > 0 && len (settingRequest .AppId ) == 0 {
244
- _ , err = impl .dbConnection .Query (& settingOption , query , pg .In (settingRequest .EnvId ))
245
- } else if len (settingRequest .TeamId ) == 0 && len (settingRequest .EnvId ) == 0 && len (settingRequest .AppId ) > 0 {
246
- _ , err = impl .dbConnection .Query (& settingOption , query , pg .In (settingRequest .AppId ))
247
- } else if len (settingRequest .TeamId ) > 0 && len (settingRequest .EnvId ) > 0 && len (settingRequest .AppId ) == 0 {
248
- _ , err = impl .dbConnection .Query (& settingOption , query , pg .In (settingRequest .TeamId ), pg .In (settingRequest .EnvId ))
249
- } else if len (settingRequest .TeamId ) > 0 && len (settingRequest .EnvId ) == 0 && len (settingRequest .AppId ) > 0 {
250
- _ , err = impl .dbConnection .Query (& settingOption , query , pg .In (settingRequest .TeamId ), pg .In (settingRequest .AppId ))
251
- } else if len (settingRequest .TeamId ) == 0 && len (settingRequest .EnvId ) > 0 && len (settingRequest .AppId ) > 0 {
252
- _ , err = impl .dbConnection .Query (& settingOption , query , pg .In (settingRequest .EnvId ), pg .In (settingRequest .AppId ))
253
- } else if len (settingRequest .TeamId ) > 0 && len (settingRequest .EnvId ) > 0 && len (settingRequest .AppId ) > 0 {
254
- _ , err = impl .dbConnection .Query (& settingOption , query , pg .In (settingRequest .TeamId ), pg .In (settingRequest .EnvId ), pg .In (settingRequest .AppId ))
255
- } else if len (settingRequest .PipelineName ) > 0 {
256
- _ , err = impl .dbConnection .Query (& settingOption , query , settingRequest .PipelineName )
257
- }
275
+ query = query + " GROUP BY 1,2,3,4,5;"
276
+ _ , err := impl .dbConnection .Query (& settingOption , query , queryParams ... )
258
277
if err != nil {
259
278
return nil , err
260
279
}
@@ -263,44 +282,44 @@ func (impl *NotificationSettingsRepositoryImpl) FindNotificationSettingDeploymen
263
282
264
283
func (impl * NotificationSettingsRepositoryImpl ) FindNotificationSettingBuildOptions (settingRequest * SearchRequest ) ([]* SettingOptionDTO , error ) {
265
284
var settingOption []* SettingOptionDTO
285
+ envIds := make ([]* int , 0 )
286
+ for _ , envId := range settingRequest .EnvId {
287
+ if * envId == resourceQualifiers .AllExistingAndFutureProdEnvsInt || * envId == resourceQualifiers .AllExistingAndFutureNonProdEnvsInt {
288
+ continue
289
+ }
290
+ envIds = append (envIds , envId )
291
+ }
292
+
266
293
query := "SELECT cip.id as pipeline_id,cip.name as pipeline_name, a.app_name from ci_pipeline cip" +
267
294
" INNER JOIN app a on a.id = cip.app_id" +
268
295
" INNER JOIN team t on t.id= a.team_id"
269
- if len (settingRequest .EnvId ) > 0 {
296
+ if len (envIds ) > 0 || len ( settingRequest .ClusterId ) > 0 {
270
297
query = query + " INNER JOIN ci_artifact cia on cia.pipeline_id = cip.id"
271
298
query = query + " INNER JOIN cd_workflow wf on wf.ci_artifact_id = cia.id"
272
299
query = query + " INNER JOIN pipeline p on p.id = wf.pipeline_id"
300
+ query = query + " INNER JOIN environment e on e.id = p.environment_id"
273
301
}
274
- query = query + " WHERE cip.deleted = false"
275
302
303
+ queryParams := make ([]interface {}, 0 )
304
+ query = query + " WHERE cip.deleted = false"
276
305
if len (settingRequest .TeamId ) > 0 {
277
306
query = query + " AND a.team_id in (?)"
278
- } else if len (settingRequest .EnvId ) > 0 {
279
- query = query + " AND p.environment_id in (?)"
307
+ queryParams = append (queryParams , pg .In (settingRequest .TeamId ))
308
+ } else if len (envIds ) > 0 {
309
+ query = query + " AND e.id in (?)"
310
+ queryParams = append (queryParams , pg .In (envIds ))
280
311
} else if len (settingRequest .AppId ) > 0 {
281
312
query = query + " AND cip.app_id in (?)"
313
+ queryParams = append (queryParams , pg .In (settingRequest .AppId ))
282
314
} else if len (settingRequest .PipelineName ) > 0 {
283
- query = query + " AND cip.name like (?)"
315
+ query = query + " AND cip.name like ?"
316
+ queryParams = append (queryParams , "%" + settingRequest .PipelineName + "%" )
317
+ } else if len (settingRequest .ClusterId ) > 0 {
318
+ query = query + fmt .Sprintf (" AND e.cluster_id IN (?)" )
319
+ queryParams = append (queryParams , pg .In (settingRequest .ClusterId ))
284
320
}
285
321
query = query + " GROUP BY 1,2,3;"
286
- var err error
287
- if len (settingRequest .TeamId ) > 0 && len (settingRequest .EnvId ) == 0 && len (settingRequest .AppId ) == 0 {
288
- _ , err = impl .dbConnection .Query (& settingOption , query , pg .In (settingRequest .TeamId ))
289
- } else if len (settingRequest .TeamId ) == 0 && len (settingRequest .EnvId ) > 0 && len (settingRequest .AppId ) == 0 {
290
- _ , err = impl .dbConnection .Query (& settingOption , query , pg .In (settingRequest .EnvId ))
291
- } else if len (settingRequest .TeamId ) == 0 && len (settingRequest .EnvId ) == 0 && len (settingRequest .AppId ) > 0 {
292
- _ , err = impl .dbConnection .Query (& settingOption , query , pg .In (settingRequest .AppId ))
293
- } else if len (settingRequest .TeamId ) > 0 && len (settingRequest .EnvId ) > 0 && len (settingRequest .AppId ) == 0 {
294
- _ , err = impl .dbConnection .Query (& settingOption , query , pg .In (settingRequest .TeamId ), pg .In (settingRequest .EnvId ))
295
- } else if len (settingRequest .TeamId ) > 0 && len (settingRequest .EnvId ) == 0 && len (settingRequest .AppId ) > 0 {
296
- _ , err = impl .dbConnection .Query (& settingOption , query , pg .In (settingRequest .TeamId ), pg .In (settingRequest .AppId ))
297
- } else if len (settingRequest .TeamId ) == 0 && len (settingRequest .EnvId ) > 0 && len (settingRequest .AppId ) > 0 {
298
- _ , err = impl .dbConnection .Query (& settingOption , query , pg .In (settingRequest .EnvId ), pg .In (settingRequest .AppId ))
299
- } else if len (settingRequest .TeamId ) > 0 && len (settingRequest .EnvId ) > 0 && len (settingRequest .AppId ) > 0 {
300
- _ , err = impl .dbConnection .Query (& settingOption , query , pg .In (settingRequest .TeamId ), pg .In (settingRequest .EnvId ), pg .In (settingRequest .AppId ))
301
- } else if len (settingRequest .PipelineName ) > 0 {
302
- _ , err = impl .dbConnection .Query (& settingOption , query , settingRequest .PipelineName )
303
- }
322
+ _ , err := impl .dbConnection .Query (& settingOption , query , queryParams ... )
304
323
if err != nil {
305
324
return nil , err
306
325
}
@@ -311,6 +330,7 @@ type SearchRequest struct {
311
330
TeamId []* int `json:"teamId" validate:"number"`
312
331
EnvId []* int `json:"envId" validate:"number"`
313
332
AppId []* int `json:"appId" validate:"number"`
333
+ ClusterId []* int `json:"clusterId" validate:"number"`
314
334
PipelineName string `json:"pipelineName"`
315
335
UserId int32 `json:"-"`
316
336
}
0 commit comments