mirror of
				https://github.com/owncast/owncast.git
				synced 2025-11-04 13:27:21 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			40 lines
		
	
	
		
			952 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			40 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)
 | 
						|
	}
 | 
						|
}
 |