mirror of
https://github.com/owncast/owncast.git
synced 2024-11-21 20:28:15 +03:00
39 lines
952 B
Go
39 lines
952 B
Go
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)
|
|
}
|
|
}
|