pagination.go 620 B

123456789101112131415161718192021222324252627282930313233343536
  1. package middleware
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin"
  5. "strconv"
  6. )
  7. // Pagination sets page, pageSize and pageOffset to *gin.Context
  8. func Pagination() gin.HandlerFunc {
  9. return func(c *gin.Context) {
  10. page := getSetItem(c, "page", 1)
  11. size := getSetItem(c, "pageSize", 20)
  12. c.Set("pageOffset", (page-1)*size)
  13. c.Next()
  14. }
  15. }
  16. func getSetItem(c *gin.Context, k string, d int) int {
  17. var n int
  18. if v := c.Query(k); v != "" {
  19. if i, err := strconv.Atoi(v); err == nil {
  20. if i > 0 {
  21. n = i
  22. }
  23. }
  24. }
  25. if n == 0 {
  26. n = d
  27. }
  28. c.Set(k, n)
  29. c.Request.URL.Query().Set(k, fmt.Sprintf("%d", n))
  30. return n
  31. }