This commit is contained in:
Eden Kirin
2023-10-25 20:18:35 +02:00
parent 30fccde9e5
commit 21607a5c48
3 changed files with 37 additions and 2 deletions

View 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,
}
}

View File

@ -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)

View File

@ -13,7 +13,12 @@ func GetUsersPage(ctx iris.Context) {
userRepository := repository.Dao.UsersRepository
pagination := repository.NewPagination()
users := userRepository.List(&repository.UserFilter{}, &pagination)
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)