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, memoLast updated
Was this helpful?