Files
YouduWiki/backend/domain/pager.go
2026-05-21 19:52:45 +08:00

42 lines
806 B
Go

package domain
type Pager struct {
Page int `json:"page" query:"page" validate:"required,min=1" message:"page must be greater than 0"`
PageSize int `json:"per_page" query:"per_page" validate:"required,min=1" message:"per_page must be greater than 0"`
}
type PagerInfo struct {
Total int64 `json:"total"`
}
func (p *Pager) Offset() int {
offset := (p.Page - 1) * p.PageSize
if offset < 0 {
offset = 0
}
return offset
}
func (p *Pager) Limit() int {
limit := p.PageSize
if limit < 0 {
limit = 0
}
if limit > 100 {
limit = 100
}
return limit
}
type PaginatedResult[T any] struct {
Total uint64 `json:"total"`
Data T `json:"data"`
}
func NewPaginatedResult[T any](data T, total uint64) *PaginatedResult[T] {
return &PaginatedResult[T]{
Total: total,
Data: data,
}
}