|
6 | 6 | "strings"
|
7 | 7 |
|
8 | 8 | "github.com/go-gorp/gorp"
|
| 9 | + "github.com/lib/pq" |
9 | 10 |
|
| 11 | + "github.com/ovh/cds/engine/api/database/gorpmapping" |
10 | 12 | "github.com/ovh/cds/sdk"
|
11 | 13 | )
|
12 | 14 |
|
@@ -148,14 +150,52 @@ func checkAtLeastOneGroupWithWriteRoleOnWorkflow(db gorp.SqlExecutor, wID int64)
|
148 | 150 | return nb > 0, err
|
149 | 151 | }
|
150 | 152 |
|
| 153 | +type LinkWorkflowGroupPermission struct { |
| 154 | + WorkflowID int64 `db:"workflow_id"` |
| 155 | + GroupID int64 `db:"group_id"` |
| 156 | + GroupName string `db:"group_name"` |
| 157 | + Role int `db:"role"` |
| 158 | +} |
| 159 | + |
| 160 | +// LoadWorkflowGroupsByWorkflowIDs returns a map with key: workflowID and value the slite of groups |
| 161 | +func LoadWorkflowGroupsByWorkflowIDs(db gorp.SqlExecutor, workflowIDs []int64) (map[int64][]sdk.GroupPermission, error) { |
| 162 | + result := make(map[int64][]sdk.GroupPermission, len(workflowIDs)) |
| 163 | + query := gorpmapping.NewQuery(` |
| 164 | + SELECT workflow_perm.workflow_id, "group".id as "group_id", "group".name as "group_name", workflow_perm.role |
| 165 | + FROM "group" |
| 166 | + JOIN project_group ON project_group.group_id = "group".id |
| 167 | + JOIN workflow_perm ON workflow_perm.project_group_id = project_group.id |
| 168 | + WHERE workflow_perm.workflow_id = ANY($1) |
| 169 | + ORDER BY workflow_perm.workflow_id, "group".name ASC |
| 170 | + `).Args(pq.Int64Array(workflowIDs)) |
| 171 | + var dbResultSet = []LinkWorkflowGroupPermission{} |
| 172 | + if err := gorpmapping.GetAll(context.Background(), db, query, &dbResultSet); err != nil { |
| 173 | + return nil, err |
| 174 | + } |
| 175 | + |
| 176 | + for _, row := range dbResultSet { |
| 177 | + perms := result[row.WorkflowID] |
| 178 | + perms = append(perms, sdk.GroupPermission{ |
| 179 | + Permission: row.Role, |
| 180 | + Group: sdk.Group{ |
| 181 | + ID: row.GroupID, |
| 182 | + Name: row.GroupName, |
| 183 | + }, |
| 184 | + }) |
| 185 | + result[row.WorkflowID] = perms |
| 186 | + } |
| 187 | + |
| 188 | + return result, nil |
| 189 | +} |
| 190 | + |
151 | 191 | // LoadWorkflowGroups load groups for a workflow
|
152 | 192 | func LoadWorkflowGroups(db gorp.SqlExecutor, workflowID int64) ([]sdk.GroupPermission, error) {
|
153 | 193 | wgs := []sdk.GroupPermission{}
|
154 | 194 |
|
155 | 195 | query := `SELECT "group".id, "group".name, workflow_perm.role
|
156 | 196 | FROM "group"
|
157 |
| - JOIN project_group ON project_group.group_id = "group".id |
158 |
| - JOIN workflow_perm ON workflow_perm.project_group_id = project_group.id |
| 197 | + JOIN project_group ON project_group.group_id = "group".id |
| 198 | + JOIN workflow_perm ON workflow_perm.project_group_id = project_group.id |
159 | 199 | WHERE workflow_perm.workflow_id = $1
|
160 | 200 | ORDER BY "group".name ASC`
|
161 | 201 | rows, errq := db.Query(query, workflowID)
|
|
0 commit comments