| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| package pager |
| |
| import ( |
| "reflect" |
| ) |
| |
| // PageModel page model |
| type PageModel struct { |
| Count int64 `json:"count"` |
| List any `json:"list"` |
| } |
| |
| // PageCond page condition |
| type PageCond struct { |
| Page int |
| PageSize int |
| } |
| |
| // NewPageModel new page model |
| func NewPageModel(totalRecords int64, records any) *PageModel { |
| sliceValue := reflect.Indirect(reflect.ValueOf(records)) |
| if sliceValue.Kind() != reflect.Slice { |
| panic("not a slice") |
| } |
| |
| if totalRecords < 0 { |
| totalRecords = 0 |
| } |
| |
| return &PageModel{ |
| Count: totalRecords, |
| List: records, |
| } |
| } |
| |
| // ValPageAndPageSize validate page pageSize |
| func ValPageAndPageSize(page, pageSize int) (int, int) { |
| if page <= 0 { |
| page = 1 |
| } |
| if pageSize <= 0 { |
| pageSize = 10 |
| } |
| return page, pageSize |
| } |
| |
| // ValPageOutOfRange validate page out of range |
| func ValPageOutOfRange(total int64, page, pageSize int) bool { |
| if total <= 0 { |
| return false |
| } |
| if pageSize <= 0 { |
| return true |
| } |
| totalPages := (total + int64(pageSize) - 1) / int64(pageSize) |
| return page < 1 || page > int(totalPages) |
| } |