Skip to content

Commit 3d48577

Browse files
authored
feat(api): list all tasks related to a regular user (#238)
Signed-off-by: Romain Beuque <556072+rbeuque74@users.noreply.github.com>
1 parent 566c556 commit 3d48577

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

api/handler/task.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ func ListTasks(c *gin.Context, in *listTasksIn) (t []*task.Task, err error) {
142142
filter.PotentialResolverUser = user
143143
case taskTypeAll:
144144
if err2 := auth.IsAdmin(c); err2 != nil {
145-
return nil, err2
145+
filter.RequesterOrPotentialResolverUser = user
146146
}
147147
default:
148148
return nil, errors.BadRequestf("Unknown type for listing: '%s'. Was expecting '%s', '%s' or '%s'", in.Type, taskTypeOwn, taskTypeResolvable, taskTypeAll)

models/task/task.go

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -269,16 +269,17 @@ func loadDetails(dbp zesty.DBProvider, t *Task, withComments bool) (err error) {
269269

270270
// ListFilter holds parameters for filtering a list of tasks
271271
type ListFilter struct {
272-
RequesterUser *string
273-
PotentialResolverUser *string
274-
Last *string
275-
State *string
276-
Batch *Batch
277-
PageSize uint64
278-
Before *time.Time
279-
After *time.Time
280-
Tags map[string]string
281-
Template *string
272+
RequesterUser *string
273+
PotentialResolverUser *string
274+
RequesterOrPotentialResolverUser *string
275+
Last *string
276+
State *string
277+
Batch *Batch
278+
PageSize uint64
279+
Before *time.Time
280+
After *time.Time
281+
Tags map[string]string
282+
Template *string
282283
}
283284

284285
// ListTasks returns a list of tasks, optionally filtered on one or several criteria
@@ -322,6 +323,16 @@ func ListTasks(dbp zesty.DBProvider, filter ListFilter) (t []*Task, err error) {
322323
})
323324
}
324325

326+
if filter.RequesterOrPotentialResolverUser != nil {
327+
arg := strconv.Quote(*filter.RequesterOrPotentialResolverUser)
328+
sel = sel.Where(squirrel.Or{
329+
squirrel.Eq{`"task".requester_username`: *filter.RequesterOrPotentialResolverUser},
330+
squirrel.Expr(`"task".watcher_usernames @> ?::jsonb`, arg),
331+
squirrel.Expr(`"task_template".allowed_resolver_usernames @> ?::jsonb`, arg),
332+
squirrel.Expr(`"task".resolver_usernames @> ?::jsonb`, arg),
333+
})
334+
}
335+
325336
if filter.State != nil {
326337
sel = sel.Where(squirrel.Eq{`"task".state`: *filter.State})
327338
}

0 commit comments

Comments
 (0)