// List runs the list action. // Prev and Next links will be present only when there actually IS a next or previous page. // Last will always be present. Total Item count needs to be computed from the "Last" link. func (c *WorkitemController) List(ctx *app.ListWorkitemContext) error { var additionalQuery []string exp, err := query.Parse(ctx.Filter) if err != nil { return jsonapi.JSONErrorResponse(ctx, errors.NewBadParameterError("could not parse filter", err)) } if ctx.FilterAssignee != nil { assignee := ctx.FilterAssignee exp = criteria.And(exp, criteria.Equals(criteria.Field("system.assignees"), criteria.Literal([]string{*assignee}))) additionalQuery = append(additionalQuery, "filter[assignee]="+*assignee) } if ctx.FilterIteration != nil { iteration := ctx.FilterIteration exp = criteria.And(exp, criteria.Equals(criteria.Field(workitem.SystemIteration), criteria.Literal(string(*iteration)))) additionalQuery = append(additionalQuery, "filter[iteration]="+*iteration) } if ctx.FilterWorkitemtype != nil { wit := ctx.FilterWorkitemtype exp = criteria.And(exp, criteria.Equals(criteria.Field("Type"), criteria.Literal([]string{*wit}))) additionalQuery = append(additionalQuery, "filter[workitemtype]="+*wit) } if ctx.FilterArea != nil { area := ctx.FilterArea exp = criteria.And(exp, criteria.Equals(criteria.Field(workitem.SystemArea), criteria.Literal(string(*area)))) additionalQuery = append(additionalQuery, "filter[area]="+*area) } offset, limit := computePagingLimts(ctx.PageOffset, ctx.PageLimit) return application.Transactional(c.db, func(tx application.Application) error { result, tc, err := tx.WorkItems().List(ctx.Context, exp, &offset, &limit) count := int(tc) if err != nil { return jsonapi.JSONErrorResponse(ctx, errs.Wrap(err, "Error listing work items")) } response := app.WorkItem2List{ Links: &app.PagingLinks{}, Meta: &app.WorkItemListResponseMeta{TotalCount: count}, Data: ConvertWorkItems(ctx.RequestData, result), } setPagingLinks(response.Links, buildAbsoluteURL(ctx.RequestData), len(result), offset, limit, count, additionalQuery...) return ctx.OK(&response) }) }
// List runs the list action. func (c *TrackerController) List(ctx *app.ListTrackerContext) error { exp, err := query.Parse(ctx.Filter) if err != nil { jerrors, _ := jsonapi.ErrorToJSONAPIErrors(goa.ErrBadRequest(fmt.Sprintf("could not parse filter: %s", err.Error()))) return ctx.BadRequest(jerrors) } start, limit, err := parseLimit(ctx.Page) if err != nil { jerrors, _ := jsonapi.ErrorToJSONAPIErrors(goa.ErrBadRequest(fmt.Sprintf("could not parse paging: %s", err.Error()))) return ctx.BadRequest(jerrors) } return application.Transactional(c.db, func(appl application.Application) error { result, err := appl.Trackers().List(ctx.Context, exp, start, &limit) if err != nil { jerrors, _ := jsonapi.ErrorToJSONAPIErrors(goa.ErrInternal(fmt.Sprintf("Error listing trackers: %s", err.Error()))) return ctx.InternalServerError(jerrors) } return ctx.OK(result) }) }