UNPKG

@apihawk/billia-sdk

Version:

The ApiHawk Billia SDK

93 lines (92 loc) 2.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class QueryBuilder { /** * Parses a pagination query into a Billia Query Builder object. * * Supported types of queries: * * - sort by * - equal to * - filter * - between * - search * * @param query pagination query * @param options config */ parse(query, options) { const q = { page: query.page || 1, page_size: query.page_size || 25, where: [] }; // sort by if (query.sort_by && query.sort_order && query.sort_order.match(/^(A|DE)SC$/)) { q.order = [{ field: query.sort_by, sort: query.sort_order }]; } // equal to if (query.equalTo) { const equalTo = query.equalTo || {}; Object.keys(equalTo).forEach((field) => { q.where.push({ field: `${field}`, where: 'and', type: 'equalTo', value: equalTo[field] }); }); } // filter if (query.filter) { const f = query.filter || {}; Object.keys(f).forEach((field) => { if (Array.isArray(f[field]) && f[field].length > 0) { q.where.push({ field, where: 'and', type: 'in', values: f[field] }); } }); } // between if (query.between) { const between = query.between || {}; Object.keys(between).forEach((field) => { q.where.push({ field, where: 'and', type: 'greaterThanOrEqualTo', value: between[field].min }, { field, where: 'and', type: 'lessThanOrEqualTo', value: between[field].max }); }); } // search if (query.search) { const search = query.search || {}; Object.keys(search).forEach((field) => { q.where.push({ field, where: 'and', type: 'like', value: `%${search[field]}%` }); }); } if (q.where.length === 0) { delete q.where; } return q; } } exports.QueryBuilder = QueryBuilder; exports.default = new QueryBuilder();