| 94 | } |
| 95 | |
| 96 | func parseSortQuery(query string, allowedSorts []string, defaultSort string) []SortField { |
| 97 | if query == "" { |
| 98 | return []SortField{{Field: defaultSort, Order: ASC}} |
| 99 | } |
| 100 | |
| 101 | fields := strings.Split(query, ",") |
| 102 | sortFields := make([]SortField, 0, len(fields)) |
| 103 | |
| 104 | for _, field := range fields { |
| 105 | field = utils.TrimSpace(field) |
| 106 | if field == "" { |
| 107 | continue |
| 108 | } |
| 109 | order := ASC |
| 110 | if strings.HasPrefix(field, "-") { |
| 111 | order = DESC |
| 112 | field = utils.TrimSpace(field[1:]) |
| 113 | } |
| 114 | if field == "" { |
| 115 | continue |
| 116 | } |
| 117 | if slices.Contains(allowedSorts, field) { |
| 118 | sortFields = append(sortFields, SortField{Field: field, Order: order}) |
| 119 | } |
| 120 | } |
| 121 | |
| 122 | if len(sortFields) == 0 { |
| 123 | return []SortField{{Field: defaultSort, Order: ASC}} |
| 124 | } |
| 125 | |
| 126 | return sortFields |
| 127 | } |