Swiftpack.co - Package - vapor-community/pagination

Swift Vapor CircleCI

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: 26
Help us keep the lights on

Releases

1.0.6 - Jun 26, 2018

Models no longer need to conform to Content

1.0.5 - Jun 19, 2018

1.0.4 - Jun 19, 2018

All the new syntax and query builder fixes for Fluent 3 RC3 support.

1.0.3 - May 29, 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. Marks the variables in the paginated struct public

Addendum to 1.0.2

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.