UNPKG

node-rigorous

Version:
94 lines (67 loc) 2.9 kB
/* eslint class-methods-use-this: 0 */ const _ = require('lodash'); const RigorousError = require('../../facades/RigorousError'); const errorsMessages = require('../../etc/errorsMessages'); const RigorousRoute = require('./RigorousRoute'); const rigorousConfig = require('../../config'); const format_checker = require('../../helpers/format_checker'); const secure_user_input = require('../../helpers/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, operationParams, modelService, queryAuthorization, queryReadSearch) { super(middlewares, operationParams); this.modelService = modelService; this.queryAuthorization = queryAuthorization; this.queryReadSearch = queryReadSearch; this.userIdAsking = null; this.queryReadSearchVar = null; this.queryAuthorizationVar = null; } async secureInput(req) { this.userIdAsking = req.authuser.user_id; const inputs = { reverse: (_.get(req.query, 'reverse') === 'true'), lastPaginateId: secure_user_input.escapeHtml(_.get(req.query, 'lastPaginateId'), false), value: secure_user_input.escapeHtml(_.get(req.query, 'value'), false), }; if (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 (format_checker.isNil(objects)) { throw new RigorousError(errorsMessages.DataNotConformError); } return { result: objects, notificationParam: null, }; } async sendNotification(inputs, notificationParam) { // None } } module.exports = Route;