@autofleet/sheilta 1.0.5 → 1.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,12 @@
1
1
  declare type OrderItem = string | [string, string];
2
2
  declare type SequelizeOrder = string | OrderItem[];
3
- export declare const formatOrder: ({ order, }: {
4
- order?: any[];
5
- }) => SequelizeOrder[] | undefined;
6
- export {};
3
+ declare const formatPayload: ({ order, page, perPage, }: {
4
+ order: any;
5
+ page?: number;
6
+ perPage?: number;
7
+ }) => {
8
+ order: SequelizeOrder[];
9
+ page: any;
10
+ perPage: any;
11
+ };
12
+ export default formatPayload;
@@ -1,9 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.formatOrder = void 0;
4
3
  const utils_1 = require("../utils");
5
4
  const DESCENDING_KEY = 'DESC';
6
- exports.formatOrder = ({ order = [], }) => (order.length === 0 ? undefined :
5
+ const formatOrder = ({ order = [], }) => (order.length === 0 ? undefined :
7
6
  order.map((o) => {
8
7
  const isOrderDescOrder = utils_1.isOrderDesc(o);
9
8
  let column = o;
@@ -13,3 +12,18 @@ exports.formatOrder = ({ order = [], }) => (order.length === 0 ? undefined :
13
12
  }
14
13
  return [column];
15
14
  }));
15
+ const formatPage = page => page || utils_1.PAGE_DEFAULT;
16
+ const formatPerPage = perPage => perPage || utils_1.PER_PAGE_DEFAULT;
17
+ const formatPayload = ({ order, page = utils_1.PAGE_DEFAULT, perPage = utils_1.PER_PAGE_DEFAULT, }) => {
18
+ const formattedOrder = formatOrder({
19
+ order,
20
+ });
21
+ const formattedPage = formatPage(page);
22
+ const formattedPerPage = formatPerPage(perPage);
23
+ return {
24
+ order: formattedOrder,
25
+ page: formattedPage,
26
+ perPage: formattedPerPage,
27
+ };
28
+ };
29
+ exports.default = formatPayload;
@@ -1,17 +1,20 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const _1 = require(".");
6
+ const _1 = __importDefault(require("."));
4
7
  describe('formatting test', () => {
5
8
  it('check order formatting', () => {
6
- const payload = _1.formatOrder({
9
+ const { order } = _1.default({
7
10
  order: ['startTime', '-endTime'],
8
11
  });
9
- expect(JSON.stringify(payload)).toBe(JSON.stringify([['startTime'], ['endTime', 'DESC']]));
12
+ expect(JSON.stringify(order)).toBe(JSON.stringify([['startTime'], ['endTime', 'DESC']]));
10
13
  });
11
14
  it('check order formatting', () => {
12
- const payload = _1.formatOrder({
15
+ const { order } = _1.default({
13
16
  order: ['startTime', 'endTime'],
14
17
  });
15
- expect(JSON.stringify(payload)).toBe(JSON.stringify([['startTime'], ['endTime']]));
18
+ expect(JSON.stringify(order)).toBe(JSON.stringify([['startTime'], ['endTime']]));
16
19
  });
17
20
  });
@@ -8,18 +8,23 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.queryFormatMiddleware = exports.queryValidationMiddleware = void 0;
13
16
  const errors_1 = require("@autofleet/errors");
14
- const formatter_1 = require("../formatter");
17
+ const formatter_1 = __importDefault(require("../formatter"));
15
18
  const validations_1 = require("../validations");
16
19
  exports.queryValidationMiddleware = model => (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
17
- const { query, attributes, order, } = req.body;
20
+ const { query, attributes, order, page, perPage, } = req.body;
18
21
  try {
19
22
  validations_1.validatePayload({
20
23
  query,
21
24
  attributes,
22
25
  order,
26
+ page,
27
+ perPage,
23
28
  }, model);
24
29
  return next();
25
30
  }
@@ -36,10 +41,14 @@ exports.queryValidationMiddleware = model => (req, res, next) => __awaiter(void
36
41
  }
37
42
  });
38
43
  exports.queryFormatMiddleware = () => (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
39
- const { order, } = req.body;
40
- const formattedOrder = formatter_1.formatOrder({
44
+ const { order, page, perPage, } = req.body;
45
+ const { order: formattedOrder, page: formattedPage, perPage: formattedPerPage, } = formatter_1.default({
41
46
  order,
47
+ page,
48
+ perPage,
42
49
  });
43
50
  req.body.order = formattedOrder;
51
+ req.body.page = formattedPage;
52
+ req.body.perPage = formattedPerPage;
44
53
  return next();
45
54
  });
package/lib/utils.d.ts CHANGED
@@ -1,3 +1,9 @@
1
1
  export declare const ORDER_PREFIX = "-";
2
+ export declare const PER_PAGE_DEFAULT = 20;
3
+ export declare const PAGE_DEFAULT = 1;
4
+ export declare const PER_PAGE_MAX_LIMIT = 100;
5
+ export declare const PER_PAGE_MIN_LIMIT = 1;
6
+ export declare const PAGE_MIN = 1;
2
7
  export declare const extractAttributeNameFromOrder: (order: any) => string;
3
8
  export declare const isOrderDesc: (order: any) => boolean;
9
+ export declare const throwBadRequestError: (message: string) => never;
package/lib/utils.js CHANGED
@@ -1,6 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isOrderDesc = exports.extractAttributeNameFromOrder = exports.ORDER_PREFIX = void 0;
3
+ exports.throwBadRequestError = exports.isOrderDesc = exports.extractAttributeNameFromOrder = exports.PAGE_MIN = exports.PER_PAGE_MIN_LIMIT = exports.PER_PAGE_MAX_LIMIT = exports.PAGE_DEFAULT = exports.PER_PAGE_DEFAULT = exports.ORDER_PREFIX = void 0;
4
+ const errors_1 = require("@autofleet/errors");
4
5
  exports.ORDER_PREFIX = '-';
6
+ exports.PER_PAGE_DEFAULT = 20;
7
+ exports.PAGE_DEFAULT = 1;
8
+ exports.PER_PAGE_MAX_LIMIT = 100;
9
+ exports.PER_PAGE_MIN_LIMIT = 1;
10
+ exports.PAGE_MIN = 1;
5
11
  exports.extractAttributeNameFromOrder = (order) => order.split(exports.ORDER_PREFIX)[1];
6
12
  exports.isOrderDesc = (order) => order.includes(exports.ORDER_PREFIX);
13
+ exports.throwBadRequestError = (message) => { throw new errors_1.BadRequest(message, null); };
@@ -1,5 +1,7 @@
1
- export declare const validatePayload: ({ query, order, attributes, }: {
1
+ export declare const validatePayload: ({ query, order, attributes, page, perPage, }: {
2
2
  query?: {};
3
3
  order?: any[];
4
4
  attributes?: any[];
5
+ page?: number;
6
+ perPage?: number;
5
7
  }, model: any) => boolean;
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.validatePayload = void 0;
7
- const errors_1 = require("@autofleet/errors");
8
7
  const lodash_1 = __importDefault(require("lodash"));
9
8
  const utils_1 = require("../utils");
10
9
  const operators_1 = require("../operators");
@@ -13,18 +12,18 @@ const validateQueryAttribute = (attribute, modelAttributes) => modelAttributes.i
13
12
  const validateSingleOrder = (currentOrder, rawAttributes) => {
14
13
  const isOrderDescOrder = utils_1.isOrderDesc(currentOrder);
15
14
  if (isOrderDescOrder && currentOrder[0] !== utils_1.ORDER_PREFIX) {
16
- throw new errors_1.BadRequest(`${utils_1.ORDER_PREFIX} must be only at the beginning of the word`, null);
15
+ utils_1.throwBadRequestError(`${utils_1.ORDER_PREFIX} must be only at the beginning of the word`);
17
16
  }
18
17
  const formattedOrderString = isOrderDescOrder ?
19
18
  utils_1.extractAttributeNameFromOrder(currentOrder) :
20
19
  currentOrder;
21
20
  if (!rawAttributes.includes(formattedOrderString)) {
22
- throw new errors_1.BadRequest(`${currentOrder} is invalid`, null);
21
+ utils_1.throwBadRequestError(`${currentOrder} is invalid`);
23
22
  }
24
23
  };
25
24
  const validateSingleAttribute = (currentAttribute, rawAttributes) => {
26
25
  if (!rawAttributes.includes(currentAttribute)) {
27
- throw new errors_1.BadRequest(`${currentAttribute} is invalid`, null);
26
+ utils_1.throwBadRequestError(`${currentAttribute} is invalid`);
28
27
  }
29
28
  };
30
29
  const validateOrderAttributes = (order, rawAttributes) => {
@@ -48,11 +47,19 @@ const validateQueryPayload = (query, rawAttributes) => {
48
47
  }
49
48
  }
50
49
  else {
51
- throw new errors_1.BadRequest(`invalid key: ${key}`, null);
50
+ utils_1.throwBadRequestError(`invalid key: ${key}`);
52
51
  }
53
52
  });
54
53
  };
55
- exports.validatePayload = ({ query = {}, order = [], attributes = [], }, model) => {
54
+ const validatePagination = ({ page, perPage, }) => {
55
+ if (page < utils_1.PAGE_MIN) {
56
+ utils_1.throwBadRequestError('Page must be greater than 0');
57
+ }
58
+ if (perPage >= utils_1.PER_PAGE_MAX_LIMIT || perPage <= utils_1.PER_PAGE_MIN_LIMIT) {
59
+ utils_1.throwBadRequestError(`PerPage must be between ${utils_1.PER_PAGE_MIN_LIMIT} to ${utils_1.PER_PAGE_MAX_LIMIT}`);
60
+ }
61
+ };
62
+ exports.validatePayload = ({ query = {}, order = [], attributes = [], page = utils_1.PAGE_DEFAULT, perPage = utils_1.PER_PAGE_DEFAULT, }, model) => {
56
63
  const rawAttributes = Object.keys(model.rawAttributes);
57
64
  if (!attributes || attributes.length === 0) {
58
65
  // eslint-disable-next-line no-param-reassign
@@ -63,5 +70,9 @@ exports.validatePayload = ({ query = {}, order = [], attributes = [], }, model)
63
70
  }
64
71
  validateOrderAttributes(order, rawAttributes);
65
72
  validateQueryPayload(query, rawAttributes);
73
+ validatePagination({
74
+ page,
75
+ perPage,
76
+ });
66
77
  return true;
67
78
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autofleet/sheilta",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "manage cache",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",