Skip to content

Commit

Permalink
Upgrade to latest changes in Paginator
Browse files Browse the repository at this point in the history
  • Loading branch information
System-Glitch committed Dec 1, 2023
1 parent 5f3b365 commit 2ab656a
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 66 deletions.
4 changes: 2 additions & 2 deletions go.mod
Expand Up @@ -7,7 +7,7 @@ require (
github.com/stretchr/testify v1.8.4
gorm.io/driver/sqlite v1.5.4
gorm.io/gorm v1.25.5
goyave.dev/goyave/v5 v5.0.0-preview5
goyave.dev/goyave/v5 v5.0.0-preview6.0.20231201171501-32722c77ca39
)

require (
Expand All @@ -18,7 +18,7 @@ require (
github.com/jinzhu/now v1.1.5 // indirect
github.com/mattn/go-sqlite3 v1.14.18 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect
golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
goyave.dev/copier v0.4.3 // indirect
)
8 changes: 4 additions & 4 deletions go.sum
Expand Up @@ -16,8 +16,8 @@ github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM=
github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 h1:mchzmB1XO2pMaKFRqk/+MV3mgGG96aqaPXaMifQU47w=
golang.org/x/exp v0.0.0-20231108232855-2478ac86f678/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
Expand All @@ -28,5 +28,5 @@ gorm.io/gorm v1.25.5 h1:zR9lOiiYf09VNh5Q1gphfyia1JpiClIWG9hQaxB/mls=
gorm.io/gorm v1.25.5/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
goyave.dev/copier v0.4.3 h1:MxX2wBnhQUbv0mHPXEgw/zS4TZMtTVpzj/aYS3h4amk=
goyave.dev/copier v0.4.3/go.mod h1:WJu0Ex81v29f5U0eMWzSNsMTGmuGY6lQ/q5yGlyLDsU=
goyave.dev/goyave/v5 v5.0.0-preview5 h1:mcX7mAzyxJGCMuNrLOAhAN3rLQNOqV4zdBBvGe+NPCs=
goyave.dev/goyave/v5 v5.0.0-preview5/go.mod h1:VgRY1EJfaQrW2UfDiXQYe3tK1YuUDGQW0RJOnlmbgic=
goyave.dev/goyave/v5 v5.0.0-preview6.0.20231201171501-32722c77ca39 h1:BZwps/AOhKBafAI9RUUt4UcEVTym938e7a2oM/xt7VE=
goyave.dev/goyave/v5 v5.0.0-preview6.0.20231201171501-32722c77ca39/go.mod h1:sCz3xtCWJhFQvDqIaRvcqO4rWhDLIEBb678zTxAxgHo=
35 changes: 21 additions & 14 deletions settings.go
Expand Up @@ -125,7 +125,7 @@ func parseModel(db *gorm.DB, model any) (*schema.Schema, error) {
}

// Scope using the default FilterSettings. See `FilterSettings.Scope()` for more details.
func Scope[T any](db *gorm.DB, request *Request, dest *[]T) (*database.Paginator[T], *gorm.DB) {
func Scope[T any](db *gorm.DB, request *Request, dest *[]T) (*database.Paginator[T], error) {
return (&Settings[T]{}).Scope(db, request, dest)
}

Expand All @@ -135,26 +135,33 @@ func ScopeUnpaginated[T any](db *gorm.DB, request *Request, dest *[]T) *gorm.DB
}

// Scope apply all filters, sorts and joins defined in the request's data to the given `*gorm.DB`
// and process pagination. Returns the resulting `*database.Paginator` and the `*gorm.DB` result,
// which can be used to check for database errors.
// and process pagination. Returns the resulting `*database.Paginator`.
// The given request is expected to be validated using `ApplyValidation`.
func (s *Settings[T]) Scope(db *gorm.DB, request *Request, dest *[]T) (*database.Paginator[T], *gorm.DB) {
db, schema, hasJoins := s.scopeCommon(db, request, dest)
func (s *Settings[T]) Scope(db *gorm.DB, request *Request, dest *[]T) (*database.Paginator[T], error) {

page := request.Page.Default(1)
pageSize := request.PerPage.Default(DefaultPageSize)

paginator := database.NewPaginator(db, page, pageSize, dest)
paginator.UpdatePageInfo()
var paginator *database.Paginator[T]
err := db.Transaction(func(tx *gorm.DB) error {
tx, schema, hasJoins := s.scopeCommon(tx, request, dest)

paginator.DB = s.scopeSort(paginator.DB, request, schema)
if fieldsDB := s.scopeFields(paginator.DB, request, schema, hasJoins); fieldsDB != nil {
paginator.DB = fieldsDB
} else {
return nil, paginator.DB
}
paginator = database.NewPaginator(tx, page, pageSize, dest)
err := paginator.UpdatePageInfo()
if err != nil {
return errors.New(err)
}
paginator.DB = s.scopeSort(paginator.DB, request, schema)
if fieldsDB := s.scopeFields(paginator.DB, request, schema, hasJoins); fieldsDB != nil {
paginator.DB = fieldsDB
} else {
return errors.New(paginator.DB.Error)
}

return paginator.Find()
})

return paginator, paginator.Find()
return paginator, err
}

// ScopeUnpaginated apply all filters, sorts and joins defined in the request's data to the given `*gorm.DB`
Expand Down

0 comments on commit 2ab656a

Please sign in to comment.