Merge branch 'main' into login
This commit is contained in:
16
app/repository/ordering.go
Normal file
16
app/repository/ordering.go
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package repository
|
||||||
|
|
||||||
|
const ORDERING_ASC = "asc"
|
||||||
|
const ORDERING_DESC = "desc"
|
||||||
|
|
||||||
|
type Ordering struct {
|
||||||
|
Field string
|
||||||
|
Direction string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewOrdering(field string, direction string) Ordering {
|
||||||
|
return Ordering{
|
||||||
|
Field: field,
|
||||||
|
Direction: direction,
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -5,8 +5,9 @@ type Pagination struct {
|
|||||||
Page int
|
Page int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Pagination) New() *Pagination {
|
func NewPagination() Pagination {
|
||||||
p.PageSize = 50
|
return Pagination{
|
||||||
p.Page = 1
|
PageSize: 50,
|
||||||
return p
|
Page: 1,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
package repository
|
package repository
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"iris-test/app/models"
|
"iris-test/app/models"
|
||||||
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
@ -34,11 +35,36 @@ func applyFilter(db *gorm.DB, filter *UserFilter) *gorm.DB {
|
|||||||
return query
|
return query
|
||||||
}
|
}
|
||||||
|
|
||||||
func (repository *UsersRepository) List(filter *UserFilter) *[]models.User {
|
func applyPagination(db *gorm.DB, pagination *Pagination) *gorm.DB {
|
||||||
|
query := db
|
||||||
|
|
||||||
|
if pagination != nil {
|
||||||
|
query.Limit(pagination.PageSize)
|
||||||
|
query.Offset(pagination.PageSize * (pagination.Page - 1))
|
||||||
|
}
|
||||||
|
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
func applyOrdering(db *gorm.DB, ordering *[]Ordering) *gorm.DB {
|
||||||
|
query := db
|
||||||
|
|
||||||
|
if ordering != nil {
|
||||||
|
for _, order := range *ordering {
|
||||||
|
query.Order(fmt.Sprintf("%s %s", order.Field, order.Direction))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return query
|
||||||
|
}
|
||||||
|
|
||||||
|
func (repository *UsersRepository) List(filter *UserFilter, pagination *Pagination, ordering *[]Ordering) *[]models.User {
|
||||||
var users []models.User
|
var users []models.User
|
||||||
|
|
||||||
query := repository.db.Model(&models.User{})
|
query := repository.db.Model(&models.User{})
|
||||||
query = applyFilter(query, filter)
|
query = applyFilter(query, filter)
|
||||||
|
query = applyOrdering(query, ordering)
|
||||||
|
query = applyPagination(query, pagination)
|
||||||
query.Find(&users)
|
query.Find(&users)
|
||||||
|
|
||||||
return &users
|
return &users
|
||||||
|
|||||||
@ -12,7 +12,13 @@ func GetUsersPage(ctx iris.Context) {
|
|||||||
|
|
||||||
userRepository := repository.Dao.UsersRepository
|
userRepository := repository.Dao.UsersRepository
|
||||||
|
|
||||||
users := userRepository.List(&repository.UserFilter{})
|
pagination := repository.NewPagination()
|
||||||
|
ordering := []repository.Ordering{
|
||||||
|
repository.NewOrdering("first_name", repository.ORDERING_ASC),
|
||||||
|
repository.NewOrdering("last_name", repository.ORDERING_ASC),
|
||||||
|
}
|
||||||
|
|
||||||
|
users := userRepository.List(&repository.UserFilter{}, &pagination, &ordering)
|
||||||
|
|
||||||
ctx.ViewData("users", users)
|
ctx.ViewData("users", users)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user