add paginator

git 2025-12-13 13:19:02 +08:00
parent 0e7247d483
commit 25c582735f
Signed by: git
GPG Key ID: 3F65EFFA44207ADD
1 changed files with 116 additions and 0 deletions

116
paginator/paginator.go Normal file
View File

@ -0,0 +1,116 @@
package paginator
// Paginator
type Paginator struct {
page int
limit int
}
// New
func New(page, limit int) *Paginator {
return &Paginator{page: page, limit: limit}
}
// Offset
func (p *Paginator) Offset() int {
if p.page < 1 {
p.page = 1
}
offset := p.limit * (p.page - 1)
return int(offset)
}
// Limit
func (p *Paginator) Limit() int {
return p.limit
}
// Pagination
func (p *Paginator) Pagination(totalCount int) *Pagination {
pg := Pagination{}
total := (totalCount / p.limit)
// Calculator Total Page
remainder := totalCount % p.limit
if remainder == 0 {
pg.totalPage = total
} else {
pg.totalPage = total + 1
}
// Set current/record per page meta data
pg.currentPage = p.page
pg.recordPerPage = p.limit
// Calculator the Next/Previous Page
if p.page <= 0 {
pg.next = p.page + 1
} else if p.page < pg.totalPage {
pg.previous = p.page - 1
pg.next = p.page + 1
} else if p.page == pg.totalPage {
pg.previous = p.page - 1
pg.next = 0
}
return &pg
}
// Pagination Object
type Pagination struct {
next int
previous int
recordPerPage int
currentPage int
totalPage int
}
// PageRange 迭代页码
func (p *Pagination) PageRange() []int {
pages := []int{}
for i := 1; i <= p.totalPage; i++ {
pages = append(pages, i)
}
return pages
}
// NumPages 页码数量
func (p *Pagination) NumPages() int {
return p.totalPage
}
// HasPrevious 是否有上一页
func (p *Pagination) HasPrevious() bool {
return p.previous > 0
}
// PreviousPageNumber 上一页的页码
func (p *Pagination) PreviousPageNumber() int {
return p.previous
}
// HasNext 是否有下一页
func (p *Pagination) HasNext() bool {
return p.next > 0
}
// NextPageNumber 下一页的页码
func (p *Pagination) NextPageNumber() int {
return p.next
}
// Number 当前页码
func (p *Pagination) Number() int {
return p.currentPage
}
// Number 当前页码
func (p *Pagination) IsFirstPage() bool {
return true
}
// Number 当前页码
func (p *Pagination) IsLastPage() bool {
return false
}