bilibili-backup/app/service/main/antispam/util/pagination.go
2019-04-22 02:59:20 +00:00

65 lines
1.4 KiB
Go

package util
const (
// DefaultPerPage .
DefaultPerPage = 20
)
// SimplePage calculate "from", "to" without total_counts
// "from" index start from 1
func (p *Pagination) SimplePage() (from int64, to int64) {
if p.CurPage == 0 || p.PerPage == 0 {
p.CurPage, p.PerPage = 1, DefaultPerPage
}
from = (p.CurPage-1)*p.PerPage + 1
to = from + p.PerPage - 1
return
}
// Page calculate "from", "to" with total_counts
// index start from 1
func (p *Pagination) Page(total int64) (from int64, to int64) {
if p.CurPage == 0 {
p.CurPage = 1
}
if p.PerPage == 0 {
p.PerPage = DefaultPerPage
}
if total == 0 || total < p.PerPage*(p.CurPage-1) {
return
}
if total <= p.PerPage {
return 1, total
}
from = (p.CurPage-1)*p.PerPage + 1
if (total - from + 1) < p.PerPage {
return from, total
}
return from, from + p.PerPage - 1
}
// VagueOffsetLimit calculate "offset", "limit" without total_counts
func (p *Pagination) VagueOffsetLimit() (offset int64, limit int64) {
from, to := p.SimplePage()
if to == 0 || from == 0 {
return 0, 0
}
return from - 1, to - from + 1
}
// OffsetLimit calculate "offset" and "start" with total_counts
func (p *Pagination) OffsetLimit(total int64) (offset int64, limit int64) {
from, to := p.Page(total)
if to == 0 || from == 0 {
return 0, 0
}
return from - 1, to - from + 1
}
// Pagination perform page algorithm
type Pagination struct {
CurPage int64
PerPage int64
}