Initial commit
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
package scope
|
||||
|
||||
import (
|
||||
"gorm.io/gorm"
|
||||
"pet-house.com/core/helper/str"
|
||||
)
|
||||
|
||||
// PaginateScope return paginate scope for gorm
|
||||
// - page int
|
||||
// - pageSize int
|
||||
// - sort string
|
||||
// - orderBy string
|
||||
func PaginateScope(page, pageSize int, sort, orderBy string) func(db *gorm.DB) *gorm.DB {
|
||||
return func(db *gorm.DB) *gorm.DB {
|
||||
pageSize := getPageSize(pageSize)
|
||||
offset := getOffset(page, pageSize)
|
||||
return db.Order(getOrderBy(sort, orderBy)).Offset(offset).Limit(pageSize)
|
||||
}
|
||||
}
|
||||
|
||||
// getOffset
|
||||
func getOffset(page, pageSize int) int {
|
||||
if page == 0 {
|
||||
page = 1
|
||||
}
|
||||
offset := (page - 1) * pageSize
|
||||
if page < 0 {
|
||||
offset = -1
|
||||
}
|
||||
return offset
|
||||
}
|
||||
|
||||
// getPageSize
|
||||
func getPageSize(pageSize int) int {
|
||||
switch {
|
||||
case pageSize > 100:
|
||||
pageSize = 100
|
||||
case pageSize < 0:
|
||||
pageSize = -1
|
||||
case pageSize == 0:
|
||||
pageSize = 10
|
||||
}
|
||||
return pageSize
|
||||
}
|
||||
|
||||
// getOrderBy
|
||||
func getOrderBy(sort, orderBy string) string {
|
||||
if sort == "" {
|
||||
sort = "desc"
|
||||
}
|
||||
if orderBy == "" {
|
||||
orderBy = "created_at"
|
||||
}
|
||||
return str.Join(orderBy, " ", sort)
|
||||
}
|
||||
Reference in New Issue
Block a user