(r *http.Request, allowedFields map[string]bool, defaultSort []models.SortField)
| 9 | ) |
| 10 | |
| 11 | func sort(r *http.Request, allowedFields map[string]bool, defaultSort []models.SortField) (*models.SortParams, error) { |
| 12 | sortParams := &models.SortParams{ |
| 13 | Fields: defaultSort, |
| 14 | } |
| 15 | urlParams := r.URL.Query() |
| 16 | if values, exists := urlParams["sort"]; exists && len(values) > 0 { |
| 17 | sortParams.Fields = []models.SortField{} |
| 18 | for _, value := range values { |
| 19 | parts := strings.SplitN(value, " ", 2) |
| 20 | field := parts[0] |
| 21 | if _, ok := allowedFields[field]; !ok { |
| 22 | return nil, fmt.Errorf("bad field for sort '%v'", field) |
| 23 | } |
| 24 | |
| 25 | dir := models.Descending |
| 26 | if len(parts) > 1 { |
| 27 | switch strings.ToUpper(parts[1]) { |
| 28 | case string(models.Ascending): |
| 29 | dir = models.Ascending |
| 30 | case string(models.Descending): |
| 31 | dir = models.Descending |
| 32 | default: |
| 33 | return nil, fmt.Errorf("bad direction for sort '%v', only 'asc' and 'desc' allowed", parts[1]) |
| 34 | } |
| 35 | } |
| 36 | sortParams.Fields = append(sortParams.Fields, models.SortField{Name: field, Dir: dir}) |
| 37 | } |
| 38 | } |
| 39 | |
| 40 | return sortParams, nil |
| 41 | } |
no outgoing calls
no test coverage detected
searching dependent graphs…