Swiftpack.co - Package - vapor-community/pagination

Vapor Pagination

Pagination is based off of the Fluent 2 pagination system.

Getting Started

Add this to your Package.swift file

.package(url: "https://github.com/vapor-community/pagination.git", from: "1.0.0")

Conform your model to Paginatable

extension MyModel: Paginatable { }

Once you have done that, it's as simple as returning your query in paginated format.

func test(_ req: Request) throws -> Future<Paginated<MyModel>> {
    return try MyModel.query(on: req).paginate(for: req)
}

Even return items off of the query builder

func test(_ req: Request) throws -> Future<Paginated<MyModel>> {
    return try MyModel.query(on: req).filter(\MyModel.name == "Test").paginate(for: req)
}

Making a request with the parameters is easy is appending ?page= and/or ?per=

curl "http://localhost:8080/api/v1/models?page=1&per=10"

A response looks like this

{
  "data": [{
    "updatedAt": "2018-03-07T00:00:00Z",
    "createdAt": "2018-03-07T00:00:00Z",
    "name": "My Test Model"
  }],
  "page": {
    "position": {
      "current": 1,
      "max": 1
    },
    "data": {
      "per": 10,
      "total": 2
    }
  }
}

Github

link
Stars: 16
Help us keep the lights on

Releases

1.0.2 - May 22, 2018

Whats News

  • Syntax Change: key was renamed to pageKey
  • Syntax Change: pagePerKey was renamed to perPageKey ⚠️ This could potentially break some implementations if you are manually working with the Query Builder and Pagination
  • Page and Paginated are now public allowing you to easily create your own custom paginated responses

Fixes

The max pages and total item count are now based on the total amount of objects queried before the pagination.

1.0.1 - May 5, 2018

Upgraded the package to support the office Vapor 3.0.0 release!

1.0.0 - May 3, 2018

Vapor 3 Pagination

1.0.0 Release

Checkout the read me for an example response, and how to implement and use Pagination

1.0.0-rc.5 - May 2, 2018

Fixed an issue where the query count would throw an error instead of returning 0

1.0.0-rc.4 - Apr 30, 2018

When running a query and paginating the results with filters now works as expected.

User.query(on: req).filter(\User.name == "Test").paginate(for: req)