Skip to content

Commit b7e7658

Browse files
committed
chore: add the logging
Signed-off-by: Eoghan Lawless <[email protected]>
1 parent 70be0c8 commit b7e7658

File tree

1 file changed

+23
-22
lines changed

1 file changed

+23
-22
lines changed

internal/pagination/pagination.go

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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) {
167170
func 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) {
183187
func 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

217224
func 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
252260
func 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

Comments
 (0)