| package common |
|
|
| import ( |
| "strconv" |
|
|
| "github.com/gin-gonic/gin" |
| ) |
|
|
| type PageInfo struct { |
| Page int `json:"page"` |
| PageSize int `json:"page_size"` |
|
|
| Total int `json:"total"` |
| Items any `json:"items"` |
| } |
|
|
| func (p *PageInfo) GetStartIdx() int { |
| return (p.Page - 1) * p.PageSize |
| } |
|
|
| func (p *PageInfo) GetEndIdx() int { |
| return p.Page * p.PageSize |
| } |
|
|
| func (p *PageInfo) GetPageSize() int { |
| return p.PageSize |
| } |
|
|
| func (p *PageInfo) GetPage() int { |
| return p.Page |
| } |
|
|
| func (p *PageInfo) SetTotal(total int) { |
| p.Total = total |
| } |
|
|
| func (p *PageInfo) SetItems(items any) { |
| p.Items = items |
| } |
|
|
| func GetPageQuery(c *gin.Context) *PageInfo { |
| pageInfo := &PageInfo{} |
| |
| if page, err := strconv.Atoi(c.Query("p")); err == nil { |
| pageInfo.Page = page |
| } |
| if pageSize, err := strconv.Atoi(c.Query("page_size")); err == nil { |
| pageInfo.PageSize = pageSize |
| } |
| if pageInfo.Page < 1 { |
| |
| page, _ := strconv.Atoi(c.Query("p")) |
| if page != 0 { |
| pageInfo.Page = page |
| } else { |
| pageInfo.Page = 1 |
| } |
| } |
|
|
| if pageInfo.PageSize == 0 { |
| |
| pageSize, _ := strconv.Atoi(c.Query("ps")) |
| if pageSize != 0 { |
| pageInfo.PageSize = pageSize |
| } |
| if pageInfo.PageSize == 0 { |
| pageSize, _ = strconv.Atoi(c.Query("size")) |
| if pageSize != 0 { |
| pageInfo.PageSize = pageSize |
| } |
| } |
| if pageInfo.PageSize == 0 { |
| pageInfo.PageSize = ItemsPerPage |
| } |
| } |
|
|
| if pageInfo.PageSize > 100 { |
| pageInfo.PageSize = 100 |
| } |
|
|
| return pageInfo |
| } |
|
|