github.com/kubeshop/testkube@v1.17.23/pkg/server/pager.go (about)

     1  package server
     2  
     3  import (
     4  	"strconv"
     5  
     6  	"github.com/gofiber/fiber/v2"
     7  )
     8  
     9  const (
    10  	MaxLimit      = 1000
    11  	DefaultLimit  = 100
    12  	DefaultOffset = 100
    13  )
    14  
    15  // Pager is abstracion to handle data grid like data paging
    16  type Pager struct {
    17  	Limit  int
    18  	Offset int
    19  	NextID string
    20  }
    21  
    22  // GetPager returns new configured Pager instance
    23  func (s HTTPServer) GetPager(c *fiber.Ctx) Pager {
    24  	limit, err := strconv.Atoi(c.Query("limit", "100"))
    25  	if err != nil || limit < 1 {
    26  		limit = DefaultLimit
    27  	} else if limit > MaxLimit {
    28  		limit = MaxLimit
    29  	}
    30  
    31  	offset, err := strconv.Atoi(c.Query("offset", "100"))
    32  	if err != nil || limit < 1 {
    33  		offset = DefaultLimit
    34  	} else if limit > MaxLimit {
    35  		offset = MaxLimit
    36  	}
    37  
    38  	return Pager{
    39  		Limit:  limit,
    40  		Offset: offset,
    41  		NextID: c.Query("nextID", ""),
    42  	}
    43  }