You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
952 B
39 lines
952 B
package middleware |
|
|
|
import ( |
|
"net/http" |
|
"strconv" |
|
) |
|
|
|
// PaginatedHandlerFunc is a handler for endpoints that require pagination. |
|
type PaginatedHandlerFunc func(int, int, http.ResponseWriter, *http.Request) |
|
|
|
// HandlePagination is a middleware handler that pulls pagination values |
|
// and passes them along. |
|
func HandlePagination(handler PaginatedHandlerFunc) http.HandlerFunc { |
|
return func(w http.ResponseWriter, r *http.Request) { |
|
// Default 50 items per page |
|
limitString := r.URL.Query().Get("limit") |
|
if limitString == "" { |
|
limitString = "50" |
|
} |
|
limit, err := strconv.Atoi(limitString) |
|
if err != nil { |
|
w.WriteHeader(http.StatusBadRequest) |
|
return |
|
} |
|
|
|
// Default first page 0 |
|
offsetString := r.URL.Query().Get("offset") |
|
if offsetString == "" { |
|
offsetString = "0" |
|
} |
|
offset, err := strconv.Atoi(offsetString) |
|
if err != nil { |
|
w.WriteHeader(http.StatusBadRequest) |
|
return |
|
} |
|
|
|
handler(offset, limit, w, r) |
|
} |
|
}
|
|
|