Sequelize model decorator which provides cursor based pagination queries. Some motivation and background.
yarn add sequelize-cursor-pagination
Define a sequelize model:
// ...
const withPagination = require('sequelize-cursor-pagination');
const Counter = sequelize.define('counter', {
id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true },
value: Sequelize.INTEGER,
});
const options = {
methodName: 'paginate',
primaryKeyField: 'id',
};
withPagination(options)(Counter);
The withPagination
function has the following options:
- methodName, the name of the pagination method. The default value is
paginate
. - primaryKeyField, the primary key field of the model. The default value is
id
.
Call the paginate
(default method name) method:
// ...
Counter.paginate({
where: { value: { $gt: 2 } },
limit: 10,
});
The paginate
method returns an object with following properties:
- results, the results of the query
- cursors, object containing the cursors' related data
- cursors.before, the first record in the result serialized
- cursors.after, the last record in the result serialized
- cursors.hasNext,
true
orfalse
depending on whether there are records after theafter
cursor - cursors.hasPrevious,
true
orfalse
depending on whether there are records before thebefore
cursor
The paginate
method has the following options:
- where, the query applied to findAll call
- attributes, the query applied to findAll and select only some attributes
- include, applied to
findAll
for eager loading - limit, limit the number of records returned
- desc, whether to sort in descending order. The default value is
false
. - before, the before cursor
- after, the after cursor
- paginationField, the field to be used for the pagination. The default value is the
primaryKeyField
option value. - raw, whether the query will return Sequelize Models or raw data. The default is
false
.
yarn test