Page Query
Definition
PageQuery
is a generic pagination query parameter structure designed to standardize common list query requirements such as pagination and sorting. PageQuery
has three fields, PageNumber
and PageSize
is used to build the paging clause, and Sort
is used to build the sorting clause. PageQuery
implements the Query
interface.
package core
type PageQuery struct {
PageNumber *int `json:"page,omitempty"`
PageSize *int `json:"size,omitempty"`
Sort *string `json:"sort,omitempty"`
}
Usage
When defining query objects, embed the PageQuery
struct through composition to reuse standardized pagination and sorting functionality.
type UserQuery struct {
PageQuery
ScoreLt *int
MemoNull *bool
Deleted *bool
}
Paging
userQuery := UserQuery{PageQuery: PageQuery{}}
users, err := userDataAccess.Query(ctx, userQuery)
//SELECT id, score, memo FROM User
userQuery := UserQuery{PageQuery: PageQuery{PageSize: P(20)}}
users, err := userDataAccess.Query(ctx, userQuery)
//SELECT id, score, memo FROM User LIMIT 20 OFFSET 0
// When only PageNumber is set, PageSize will be set to 10
userQuery := UserQuery{PageQuery: PageQuery{PageNumber: P(5)}}
users, err := userDataAccess.Query(ctx, userQuery)
//SELECT id, score, memo FROM User LIMIT 10 OFFSET 40
userQuery := UserQuery{PageQuery: PageQuery{PageSize: P(50), PageNumber: P(3)}}
users, err := userDataAccess.Query(ctx, userQuery)
//SELECT id, score, memo FROM User LIMIT 10 OFFSET 100
Sorting
The Sort
string should follow regexp.MustCompile("(?i)(\w+)(,(asC|dEsc))?;?")
userQuery := UserQuery{PageQuery: PageQuery{Sort: P("id,desc;score,asc;memo")}}
users, err := userDataAccess.Query(ctx, userQuery)
//SELECT id, score, memo FROM User ORDER BY id DESC, score ASC, memo
Last updated
Was this helpful?