Tool for API Filter and Pagination and Sort to Sequelize Where and Limit and Offset and Order.
Sequtil From RESTful API Specification
npm install sequtil
const sequtil = new Sequtil();
const query = {
page: 1,
pageSize: 1,
sort: 'field1:asc',
field1: '1',
filters: JSON.stringify([
{ field: 'field1', op: 'eq', value: 1 }
])
};
// pagination
const page = sequtil.genPage(query); // { page: 1, pageSize: 1, limit: 1, offset: 0 }
// order
const order = sequtil.genOrder(query.sort, { field1: null }); // [ [ 'field1', 'asc' ] ]
// where
const where = sequtil.genWhere(query, {
field1: { type: Sequtil.Types.Number, op: 'eq' }
}); // { field1: { [Symbol(eq)]: 1 } }
const condWhere = sequtil.genCondWhere(query.filters, {
field1: { type: Sequtil.Types.Number }
}); // { field1: { [Symbol(eq)]: 1 } }
// set config
const sequtil = new Sequtil({
size: 20,
maxSize: 100,
minSize: 1
});
const page = sequtil.genPage({
page: 1,
pageSize: 101
}); // { page: 1, pageSize: 100, limit: 100, offset: 0 }
// override config
const page = sequtil.genPage({
page: 1,
pageSize: 101
}, {
maxSize: 2
}); // { page: 1, pageSize: 2, limit: 2, offset: 0 }
const sequtil = new Sequtil();
// default order
const order = sequtil.genOrder(null, { default: ['id', 'ASC'] }); // [ [ 'id', 'ASC' ] ]
const query = {
id: 123,
name: 'xx'
};
const order = sequtil.(query.sort, { id: null, name: null }); // [ [ 'id', 'asc' ] ]
const sequtil = new Sequtil();
const query = {
id: '123',
name: 'xx'
};
const where = sequtil.genWhere(query, {
id: { type: Sequtil.Types.Number, op: Sequtil.Op.eq },
name: { type: Sequtil.Types.String, op: Sequtil.Op.like }
}); // { id: { [Symbol(eq)]: 123 }, name: { [Symbol(like)]: Literal { val: "'xx%'" } } }
const sequtil = new Sequtil();
const query = {
filters: JSON.stringify([
{ field: 'id', op: 'eq', value: [1, 2] },
{ field: 'name', op: 'like', value: 'xx' }
])
};
const where = sequtil.genCondWhere(query.filters, {
id: { type: Sequtil.Types.Number },
name: { type: Sequtil.Types.String }
}); // { id: { [Symbol(in)]: [ 1, 2 ] }, name: { [Symbol(like)]: Literal { val: "'xx%'" } } }
The same as Sequelize operators
The filter type
Type | Description |
---|---|
Date |
Symbol('date') |
Number |
Symbol('number') |
String |
Symbol('string') |
Create Sequtil instance
Parameters
config
- Object - The configuration for worker.config.size
- Int - Default pagination size.config.maxSize
- Int - Max pagination size.config.minSize
- Int - Min pagination size.
Return
Sequtil instance
Set config
Get config
Generate order
Parameters
sort
- String - The sort value, 'field1:asc', 'field2:DESC', etc.options
- Object - The sort value, 'field1:asc', 'field1:asc,field2:DESC', etc.options.default
- Array - The default Sequelize sort value, ['field1', 'ASC'], etc.options.{field}
- String - The Sequelize sort filed, 'id', 'name', etc.
Return
Generate pagination
Parameters
params
- Object - The page & pageSize, { page: 1, pageSize: 100 }, etc.params.page
- Int - Pagination page.params.pageSize
- Int - Pagination pageSize.options
- Object - The pagination config.options.size
- Int - Default pagination size, will override sequtil.config.size.options.maxSize
- Int - Max pagination size, will override sequtil.config.maxSize.options.minSize
- Int - Min pagination size, will override sequtil.config.minSize.
Return
- Pagination
page
- Int - Pagination page.pageSize
- Int - Pagination size.limit
- Int - Pagination limit.offset
- Int - Pagination offset.
Generate Sequelize where
Parameters
filters
- Object - The filters k-vs, { id: 123, name: 'xx' }, etc.definitions
- Object{Field-Definition} - The filter definitions, { id: { type: Sequtil.Types.Number, op: Sequtil.Op.eq } }, etc.definition
- Object - The filter definition.definition.col
- Object - The table col, optional, default to filed.definition.type
- Sequtil.Types - The filter type.definition.op
- Sequtil.Op - The operator.
Return
Generate Sequelize where
Parameters
filters
- String - The filters string '[fiter1, filter2, ...]', '[{"field":"id","op":"eq","value":1}, ...]', etc.filter
- Object - Single filter.filter.field
- String - The filter name.filter.op
- String - The filter operator, Sequtil.Op string.filter.value
- Any - The filter value, multiple values use array [v1, v2, ...].definitions
- Object{Field-Definition} - The filter definitions, { id: { type: Sequtil.Types.Number } }, etc.definition
- Object - The filter definition.definition.col
- Object - The table col, optional, default to filed.definition.type
- Sequtil.Types - The filter type.
Return
- Sequelize Where