Skip to content
Snippets Groups Projects
simulation.js 4.3 KiB
Newer Older
const express = require('express');

const simulationApp = express();

const libs = `${process.cwd()}/libs`;

const log = require(`${libs}/log`)(module);

const squel = require('squel');

const query = require(`${libs}/middlewares/query`).query;

const response = require(`${libs}/middlewares/response`);

const Simulation = require(`${libs}/models/simulation`);

Vytor Calixto's avatar
Vytor Calixto committed
const PQR = require(`${libs}/models/pqr`);

Vytor Calixto's avatar
Vytor Calixto committed
const passport = require('passport');

simulationApp.get('/time', (req, res, next) => {
    const maxTime = parseInt(req.query.max_time, 10);
    log.debug('maxTime: ', maxTime);
    if(isNaN(maxTime)) {
        res.status(400);
        next({
            status: 400,
            message: 'Invalid value for mandatory parameter max_time'
        });
    }
    res.json({
        result: Array.apply(null, {length: maxTime}).map(Number.call, Number).map((i)=>i+1)
    });
});

Vytor Calixto's avatar
Vytor Calixto committed
simulationApp.get('/pqr', (req, res) => {
    PQR.findOne((err, pqr) => {
        if(err) {
            log.error(err);
            return next({err});
        }

        res.json(pqr);
Vytor Calixto's avatar
Vytor Calixto committed
simulationApp.put('/pqr', passport.authenticate('bearer', { session: false }), (req, res, next) => {
    let user = req.user.toObject();

    PQR.findOne((err, pqr) => {
        if(err) {
            log.error(err)
            return next({err});
        }

        if(!user.admin) {
            log.info(`Usuário ${user.email} tentou alterar o PQR, mas não tem privilégio`);
            res.statusCode = 401;
            return next({err: { msg: 'Unauthorized'}});
Vytor Calixto's avatar
Vytor Calixto committed
        pqr.content = req.body.content || pqr.content;
Vytor Calixto's avatar
Vytor Calixto committed
        pqr.save((err) => {
            if(err) {
                log.error(err);
                return next({err});
            }
            res.json({msg: 'PQR updated'})
        });
Vytor Calixto's avatar
Vytor Calixto committed
simulationApp.get('/', passport.authenticate('bearer', { session: false }), (req, res) => {
    let user = req.user.toObject();
Vytor Calixto's avatar
Vytor Calixto committed
    let query = Simulation.find({userId: user._id}).select('userId name');
    query.exec((err, simulations) => {
Vytor Calixto's avatar
Vytor Calixto committed
        if(err) {
            log.error(err);
            return next({err});
Vytor Calixto's avatar
Vytor Calixto committed
        res.json(simulations);

    // Simulation.find({userId: user._id}, (err, simulations) => {
    //     if(err) {
    //         log.error(err);
    //         return next({err});
    //     }

    //     res.json(simulations);
    // });
Vytor Calixto's avatar
Vytor Calixto committed
simulationApp.post('/', passport.authenticate('bearer', { session: false }), (req, res, next) => {
    let user = req.user.toObject();

    let simulation = new Simulation({
        userId: user._id,
        content: req.body.content,
        name: req.body.name
Vytor Calixto's avatar
Vytor Calixto committed

    simulation.save((err) => {
        if(err) {
            log.error(err);
            return next({err});
        res.json({msg: 'Simulation created', simulation});
Vytor Calixto's avatar
Vytor Calixto committed
simulationApp.get('/:id', passport.authenticate('bearer', { session: false }), (req, res) => {
    let user = req.user.toObject();
Vytor Calixto's avatar
Vytor Calixto committed
    Simulation.findOne({_id: req.params.id, userId: user._id}, (err, simulation) => {
        if(err) {
            log.error(err);
            return next({err});
Vytor Calixto's avatar
Vytor Calixto committed

        res.json(simulation);
Vytor Calixto's avatar
Vytor Calixto committed
simulationApp.put('/:id', passport.authenticate('bearer', { session: false }), (req, res, next) => {
    let user = req.user.toObject();

    Simulation.findOne({_id: req.params.id, userId: user._id}, (err, simulation) => {
        if(err) {
            log.error(err);
            return next({err});
Vytor Calixto's avatar
Vytor Calixto committed

        if(!simulation) {
            res.statusCode = 404;
            return next({err: { msg: 'Simulation not found'}});
Vytor Calixto's avatar
Vytor Calixto committed
        simulation.content = req.body.content || simulation.content;
        simulation.name = req.body.name || simulation.name;
Vytor Calixto's avatar
Vytor Calixto committed

        simulation.save((err) => {
            if(err) {
                log.error(err);
                return next(err);
Vytor Calixto's avatar
Vytor Calixto committed

            res.json(simulation);
        });
Vytor Calixto's avatar
Vytor Calixto committed
});

simulationApp.delete('/:id', passport.authenticate('bearer', { session: false }), (req, res, next) => {
    let user = req.user.toObject();

    Simulation.remove({_id: req.params.id, userId: user._id}, (err, simulation) => {
        if(err) {
            log.error(err);
            return next({err});
Vytor Calixto's avatar
Vytor Calixto committed

        res.json({msg: 'Simulation removed'});
});

module.exports = simulationApp;