Ordering
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,
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,7 @@
|
||||
package repository
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"iris-test/app/models"
|
||||
|
||||
"gorm.io/gorm"
|
||||
@ -45,11 +46,24 @@ func applyPagination(db *gorm.DB, pagination *Pagination) *gorm.DB {
|
||||
return query
|
||||
}
|
||||
|
||||
func (repository *UsersRepository) List(filter *UserFilter, pagination *Pagination) *[]models.User {
|
||||
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
|
||||
|
||||
query := repository.db.Model(&models.User{})
|
||||
query = applyFilter(query, filter)
|
||||
query = applyOrdering(query, ordering)
|
||||
query = applyPagination(query, pagination)
|
||||
query.Find(&users)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user