123456789101112131415161718192021222324252627282930313233343536373839 |
- 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)
- }
- }
|