init
This commit is contained in:
commit
bb957c8027
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/.idea
|
10
go.mod
Normal file
10
go.mod
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
module leafdev.top/ivampiresp/helpers
|
||||||
|
|
||||||
|
go 1.22.3
|
||||||
|
|
||||||
|
require gorm.io/gorm v1.25.10
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||||
|
github.com/jinzhu/now v1.1.5 // indirect
|
||||||
|
)
|
6
go.sum
Normal file
6
go.sum
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
|
||||||
|
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||||
|
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
|
||||||
|
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||||
|
gorm.io/gorm v1.25.10 h1:dQpO+33KalOA+aFYGlK+EfxcI5MbO7EP2yYygwh9h+s=
|
||||||
|
gorm.io/gorm v1.25.10/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
|
63
paginate.go
Normal file
63
paginate.go
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
package helpers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Paginator 分页器
|
||||||
|
type Paginator[T any] struct {
|
||||||
|
Page int
|
||||||
|
Limit int
|
||||||
|
Count int64
|
||||||
|
Total int
|
||||||
|
Data []T
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewPaginator 创建一个新的分页器实例
|
||||||
|
func NewPaginator[T any](tx *gorm.DB, page, limit int) (*Paginator[T], error) {
|
||||||
|
if page < 1 {
|
||||||
|
page = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
// get T
|
||||||
|
beans := new([]T)
|
||||||
|
|
||||||
|
count := int64(0)
|
||||||
|
|
||||||
|
session := tx.Count(&count)
|
||||||
|
|
||||||
|
if session.Error != nil {
|
||||||
|
return nil, session.Error
|
||||||
|
}
|
||||||
|
|
||||||
|
paginator := &Paginator[T]{
|
||||||
|
Page: page,
|
||||||
|
Limit: limit,
|
||||||
|
Count: count,
|
||||||
|
Total: int((count + int64(limit) - 1) / int64(limit)),
|
||||||
|
}
|
||||||
|
|
||||||
|
// find
|
||||||
|
session = tx.Scopes(paginate(page, limit)).Find(&beans)
|
||||||
|
|
||||||
|
paginator.Data = *beans
|
||||||
|
|
||||||
|
return paginator, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func paginate(page int, limit int) func(db *gorm.DB) *gorm.DB {
|
||||||
|
return func(db *gorm.DB) *gorm.DB {
|
||||||
|
if page == 0 {
|
||||||
|
page = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case limit > 100:
|
||||||
|
limit = 100
|
||||||
|
case limit <= 0:
|
||||||
|
limit = 10
|
||||||
|
}
|
||||||
|
offset := (page - 1) * limit
|
||||||
|
return db.Offset(offset).Limit(limit)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user