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) }