1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| import ( "gorm.io/gorm" )
type PageResults struct { Total int64 `json:"total"` PageNum int `json:"page"` PageSize int `json:"size"` Pages int `json:"pages"` Data interface{} `json:"data"` }
type PageInfo struct { Page int `json:"page" form:"page"` Size int `json:"Size" form:"size"` }
func (p *PageInfo) check() { if p.Page <= 0 { p.Page = 1 } if p.Size <= 0 { p.Size = 10 } }
func (p *PageInfo) Paginate() func(db *gorm.DB) *gorm.DB { p.check() return func(db *gorm.DB) *gorm.DB { offset := (p.Page - 1) * p.Size return db.Offset(offset).Limit(p.Size) } }
func (p *PageInfo) BuildPageResults(data interface{}, total int64) *PageResults { t := int(total) pages := t / p.Size if t%p.Size != 0 { pages++ } return &PageResults{ Total: total, PageNum: p.Page, PageSize: p.Size, Pages: pages, Data: data, } }
|