roese-utils/rspagination/rspagination.go

41 lines
1.0 KiB
Go

package rspagination
import (
"math"
"gorm.io/gorm"
)
// GetTotalPages returns total pages for pagination
// Example whereQuery = "stock_item_id = ?" and args = stockItemId is Where("stock_item_id = ?", stockItemId)
func GetTotalPages(database *gorm.DB, paginationLimit int, any interface{}, whereQuery interface{}, args ...interface{}) int {
var totalPages int64
if whereQuery == nil {
database.Model(any).
Count(&totalPages)
} else {
database.Model(any).
Where(whereQuery, args).
Count(&totalPages)
}
return int(math.Ceil(float64(totalPages) / float64(paginationLimit)))
}
func GetPageOffset(page int, paginationLimit int) int {
return (page - 1) * paginationLimit
}
type PageQuery struct {
Page int
}
func DbPageQuery(database *gorm.DB, query PageQuery, paginationLimit int, result any, orderBy, whereQuery interface{}, args ...interface{}) *gorm.DB {
return database.Limit(paginationLimit).
Offset(GetPageOffset(query.Page, paginationLimit)).
Where(whereQuery, args).
Order(orderBy).
Find(result)
}