UNPKG

nodejs-rigorous

Version:
89 lines (62 loc) 2.84 kB
/* eslint class-methods-use-this: 0 */ const _ = require('lodash'); const { RigorousError, errorTypes } = require('../../factory/RigorousError/index'); const RigorousRoute = require('../RigorousRoute'); const rigorousConfig = require('../../config'); const h_format_checker = require('../../helpers/h_format_checker'); const h_secure_user_input = require('../../helpers/h_secure_user_input'); /** * * &reverse= true|false indique la direction (depuis la fin ou depuis le début) * &lastPaginateId = xxxxxxxxxx (_id d'un objet de la collection) indique le point de départ * * Note: * /switlist/me/read/paginate/all?reverse=true <=> /switlist/me/read/paginate/all?reverse=true&lastPaginateId=ffffffffffffffffffffffff * /switlist/me/read/paginate/all?reverse=false <=> /switlist/me/read/paginate/all?reverse=false&lastPaginateId=111111111111111111111111 * */ class Route extends RigorousRoute { constructor(middlewares, modelService, queryAuthorization, queryReadSearch, operationParams) { super(middlewares, operationParams, operationParams); this.modelService = modelService; this.userIdAsking = null; this.queryAuthorization = queryAuthorization; this.queryReadSearch = queryReadSearch; this.queryReadSearchVar = null; this.queryAuthorizationVar = null; } async secureInput(req) { this.userIdAsking = req.authuser.user_id; const inputs = { reverse: (_.get(req.query, 'reverse') === 'true'), lastPaginateId: h_secure_user_input.escapeHtml(_.get(req.query, 'lastPaginateId'), false), value: h_secure_user_input.escapeHtml(_.get(req.query, 'value'), false), }; if (h_format_checker.isNil(inputs.lastPaginateId)) { inputs.lastPaginateId = inputs.reverse ? rigorousConfig.PAGINATION_LAST_ID : rigorousConfig.PAGINATION_INITIAL_ID; } return inputs; } async checkConformityInput(inputs) { this.queryReadSearchVar = this.queryReadSearch(inputs.value); } async checkAuthorization(checker) { this.queryAuthorizationVar = this.queryAuthorization(this.userIdAsking); } async processData(inputs, checker) { const queryRead = { ...this.queryAuthorizationVar, ...this.queryReadSearchVar, }; const objects = await this.modelService.readMany(queryRead, inputs.lastPaginateId, inputs.reverse, this.operationParams); if (h_format_checker.isNil(objects)) { throw new RigorousError(errorTypes.RESPONSE_ERROR_DATA_NOT_CONFORM); } return { result: objects, notificationParam: null, }; } async sendNotification(inputs, notificationParam) { // None } } module.exports = Route;