Moved pager to the controller package. Added additional documentation.

This commit is contained in:
mikestefanello 2021-12-18 16:55:35 -05:00
parent 1fb4d83e0d
commit d28f02f8d6
5 changed files with 117 additions and 40 deletions

61
controller/pager.go Normal file
View file

@ -0,0 +1,61 @@
package controller
import (
"math"
"strconv"
"github.com/labstack/echo/v4"
)
const (
// DefaultItemsPerPage stores the default amount of items per page
DefaultItemsPerPage = 20
)
type Pager struct {
Items int
Page int
ItemsPerPage int
Pages int
}
func NewPager(c echo.Context) Pager {
p := Pager{
ItemsPerPage: DefaultItemsPerPage,
Page: 1,
}
if page := c.QueryParam("page"); page != "" {
if pageInt, err := strconv.Atoi(page); err != nil {
if pageInt > 0 {
p.Page = pageInt
}
}
}
return p
}
func (p *Pager) SetItems(items int) {
p.Items = items
p.Pages = int(math.Ceil(float64(items) / float64(p.ItemsPerPage)))
if p.Page > p.Pages {
p.Page = p.Pages
}
}
func (p *Pager) IsBeginning() bool {
return p.Page == 1
}
func (p *Pager) IsEnd() bool {
return p.Page >= p.Pages
}
func (p *Pager) GetOffset() int {
if p.Page == 0 {
p.Page = 1
}
return (p.Page - 1) * p.ItemsPerPage
}