@@ -53,6 +53,7 @@ func parseFilter(filterParameter string) ([]*Filter, bool, error) {
5353 if filterParameter == "" {
5454 return nil , false , nil
5555 }
56+
5657 // Replace the matched pattern in regexp 'normalizeEqualsRe' with just '=' (basically the spaces and tabs are removed)
5758 normalizedFilterParameter := normalizeEqualsRe .ReplaceAllString (filterParameter , "=" )
5859
@@ -73,21 +74,21 @@ func parseFilter(filterParameter string) ([]*Filter, bool, error) {
7374 selectors := strings .Split (element , "=" )
7475 if currentFilter != nil || len (selectors ) != 2 || selectors [0 ] == "" || selectors [1 ] == "" {
7576 // Error condition - too many equals
76- return nil , false , fmt .Errorf ("filter: invalid filter request: %s" , elements )
77+ return nil , false , fmt .Errorf ("filter: invalid filter request (=) : %s" , elements )
7778 }
7879 currentFilter = & Filter {
7980 Name : selectors [0 ],
8081 Value : selectors [1 ],
8182 }
8283 case element == "OR" :
8384 if currentFilter == nil || index == len (elements )- 1 {
84- return nil , false , fmt .Errorf ("filter: invalid filter request: %s" , elements )
85+ return nil , false , fmt .Errorf ("filter: invalid filter request (OR) : %s" , elements )
8586 }
8687 filters = append (filters , currentFilter )
8788 currentFilter = nil
8889 case element == "AND" :
8990 if currentFilter == nil || index == len (elements )- 1 {
90- return nil , false , fmt .Errorf ("filter: invalid filter request: %s" , elements )
91+ return nil , false , fmt .Errorf ("filter: invalid filter request (AND) : %s" , elements )
9192 }
9293 filters = append (filters , currentFilter )
9394 currentFilter = nil
@@ -116,6 +117,7 @@ func parseOrderBy(orderByParameter string) ([]*OrderBy, error) {
116117 if orderByParameter == "" {
117118 return nil , nil
118119 }
120+
119121 // orderBy commands should be separated by ',' if there are more than one.
120122 // Split them by ',' delimiter.
121123 elements := strings .Split (orderByParameter , "," )
@@ -128,14 +130,15 @@ func parseOrderBy(orderByParameter string) ([]*OrderBy, error) {
128130 if len (direction ) == 0 || len (direction ) > 2 {
129131 return nil , errors .New ("invalid order by: " + element )
130132 }
133+
131134 if len (direction ) == 2 {
132135 switch direction [1 ] {
133136 case "asc" :
134137 descending = false
135138 case "desc" :
136139 descending = true
137140 default :
138- return nil , errors .New ("invalid order by: " + element )
141+ return nil , errors .New ("invalid order by direction : " + element )
139142 }
140143 }
141144 orderBys = append (orderBys , & OrderBy {
@@ -167,6 +170,7 @@ func computePageRange(pageSize int32, offset int32, totalCount int) (int, int) {
167170func PaginateItems [T any ](items []T , pageSize , offset int ) (* []T , error ) {
168171 paginatedItems , err := applyPagination (items , pageSize , offset )
169172 if err != nil {
173+ slog .Error ("failed to apply pagination" , "pageSize" , pageSize , "offset" , offset , "error" , err )
170174 return nil , err
171175 }
172176 return & paginatedItems , nil
@@ -183,6 +187,7 @@ func applyPagination[T any](items []T, pageSize, offset int) ([]T, error) {
183187func FilterItems [T any ](items []T , filter string , filterFunc func (T , * Filter ) bool ) ([]T , error ) {
184188 filters , useAnd , err := parseFilter (filter )
185189 if err != nil {
190+ slog .Error ("failed to parse filter" , "filter" , filter , "error" , err )
186191 return nil , err
187192 }
188193
@@ -211,17 +216,20 @@ func FilterItems[T any](items []T, filter string, filterFunc func(T, *Filter) bo
211216 }
212217 }
213218
219+ slog .Debug ("applied filter" , "filter" , filter , "items" , filteredItems )
220+
214221 return filteredItems , nil
215222}
216223
217224func OrderItems [T any ](items []T , orderBy string , orderFunc func (T , T , * OrderBy ) bool ) ([]T , error ) {
218225 orderBys , err := parseOrderBy (orderBy )
219226 if err != nil {
227+ slog .Error ("failed to parse order by" , "orderBy" , orderBy , "error" , err )
220228 return nil , err
221229 }
222230
223231 orderedItems := applyOrderBy (items , orderBys , orderFunc )
224- slog .Debug ("applied order by" , "orderBy" , orderBy , "orderedItems " , orderedItems )
232+ slog .Debug ("applied order by" , "orderBy" , orderBy , "items " , orderedItems )
225233 return orderedItems , nil
226234}
227235
@@ -244,30 +252,23 @@ func extractParamsFields(params any) (pageSize, offset *int, orderBy, filter *st
244252 case api.GetV2TemplatesParams :
245253 return p .PageSize , p .Offset , p .OrderBy , p .Filter , nil
246254 default :
247- return nil , nil , nil , nil , fmt .Errorf ("unsupported params type" )
255+ return nil , nil , nil , nil , fmt .Errorf ("unsupported params type: %v (%v)" , p , params )
248256 }
249257}
250258
251259// ValidateParams validates the incoming parameters for pagination
252260func ValidateParams (params any ) (pageSize , offset * int , orderBy , filter * string , err error ) {
253261 pageSize , offset , orderBy , filter , err = extractParamsFields (params )
254- if err != nil {
255- return nil , nil , nil , nil , err
256- }
257-
258- if pageSize == nil || * pageSize <= 0 {
262+ switch {
263+ case err != nil :
264+ return nil , nil , nil , nil , fmt .Errorf ("failed to extract params fields: %w" , err )
265+ case pageSize == nil , * pageSize <= 0 :
259266 return nil , nil , nil , nil , fmt .Errorf ("invalid pageSize: must be greater than 0" )
260- }
261-
262- if offset == nil || * offset < 0 {
267+ case offset == nil , * offset < 0 :
263268 return nil , nil , nil , nil , fmt .Errorf ("invalid offset: must be non-negative" )
264- }
265-
266- if orderBy == nil || * orderBy == "" {
269+ case orderBy == nil , * orderBy == "" :
267270 return nil , nil , nil , nil , fmt .Errorf ("invalid orderBy: cannot be empty" )
268- }
269-
270- if filter == nil || * filter == "" {
271+ case filter == nil , * filter == "" :
271272 return nil , nil , nil , nil , fmt .Errorf ("invalid filter: cannot be empty" )
272273 }
273274
@@ -276,7 +277,7 @@ func ValidateParams(params any) (pageSize, offset *int, orderBy, filter *string,
276277 orderBy = convert .Ptr (orderByParts [0 ] + " asc" )
277278 } else if len (orderByParts ) == 2 {
278279 if ! validOrderByFields [orderByParts [0 ]] || (orderByParts [1 ] != "asc" && orderByParts [1 ] != "desc" ) {
279- return nil , nil , nil , nil , fmt .Errorf ("invalid orderBy field" )
280+ return nil , nil , nil , nil , fmt .Errorf ("invalid orderBy field: %s" , * orderBy )
280281 }
281282 }
282283
@@ -286,7 +287,7 @@ func ValidateParams(params any) (pageSize, offset *int, orderBy, filter *string,
286287 for _ , part := range filterParts {
287288 subParts := strings .Split (part , "=" )
288289 if len (subParts ) != 2 || ! validFilterFields [subParts [0 ]] {
289- return nil , nil , nil , nil , fmt .Errorf ("invalid filter field" )
290+ return nil , nil , nil , nil , fmt .Errorf ("invalid filter field: %s" , * filter )
290291 }
291292 }
292293
0 commit comments