node-rigorous
Version:
Rigorous Framework
94 lines (67 loc) • 2.9 kB
JavaScript
/* 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;