Pagination

This commit is contained in:
Eden Kirin
2023-10-25 20:06:13 +02:00
parent 0188f97e60
commit 30fccde9e5
3 changed files with 20 additions and 6 deletions

View File

@ -5,8 +5,9 @@ type Pagination struct {
Page int
}
func (p *Pagination) New() *Pagination {
p.PageSize = 50
p.Page = 1
return p
func NewPagination() Pagination {
return Pagination{
PageSize: 50,
Page: 1,
}
}

View File

@ -34,11 +34,23 @@ func applyFilter(db *gorm.DB, filter *UserFilter) *gorm.DB {
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 (repository *UsersRepository) List(filter *UserFilter, pagination *Pagination) *[]models.User {
var users []models.User
query := repository.db.Model(&models.User{})
query = applyFilter(query, filter)
query = applyPagination(query, pagination)
query.Find(&users)
return &users

View File

@ -12,7 +12,8 @@ func GetUsersPage(ctx iris.Context) {
userRepository := repository.Dao.UsersRepository
users := userRepository.List(&repository.UserFilter{})
pagination := repository.NewPagination()
users := userRepository.List(&repository.UserFilter{}, &pagination)
ctx.ViewData("users", users)