Skip to content
Snippets Groups Projects
Commit 970831d7 authored by Vytor Calixto's avatar Vytor Calixto :space_invader:
Browse files

Merge branch 'issue/347' into 'development'

Issue/347

Closes SCRUM#347

See merge request !90
parents 58e8c12a 78c3a3dd
No related branches found
No related tags found
2 merge requests!116Release v1.0.0,!90Issue/347
Pipeline #
const mongoose = require('mongoose')
const libs = `${process.cwd()}/libs`;
const log = require(`${libs}/log`)(module);
const User = require(`${libs}/models/user`);
const Schema = mongoose.Schema;
let PQRSchema = new Schema({
content: {
type: String,
required: true,
}
});
module.exports = mongoose.model('PQR', PQRSchema);
...@@ -2,114 +2,20 @@ const mongoose = require('mongoose') ...@@ -2,114 +2,20 @@ const mongoose = require('mongoose')
const libs = `${process.cwd()}/libs`; const libs = `${process.cwd()}/libs`;
const log = require(`${libs}/log`)(module); const log = require(`${libs}/log`)(module);
const User = require(`${libs}/models/user`);
const Schema = mongoose.Schema; const Schema = mongoose.Schema;
// Should define this somewhere else
const MAX_SIMULATION_TIME = 10;
let SimulationSchema = new Schema({ let SimulationSchema = new Schema({
name: { userId: {
type: String, type: Schema.Types.ObjectId,
required: true, required: true,
ref: 'User'
}, },
location: Object, content: {
time: Number, type: String,
failure_rate: Array, required: true,
goals_care: Array,
goals_inclusion: Array,
enrollments: Array,
timestamp: Date,
});
SimulationSchema.methods.setTime = function (t) {
t = parseInt(t, 10);
if (!t || t > MAX_SIMULATION_TIME) {
// Throw an error?
return false;
}
this.time = t;
return true;
};
SimulationSchema.methods.setLocation = function (l) {
// Should sanitize
this.location = l;
return true;
};
SimulationSchema.methods.setFailureRate = function (fr) {
// Should sanitize
this.failure_rate = fr;
return true;
};
SimulationSchema.methods.setCareGoals = function (g) {
// Should sanitize
this.goals_care = g;
return true;
};
SimulationSchema.methods.setInclusionGoals = function (g) {
// Should sanitize
this.goals_inclusion = g;
return true;
};
SimulationSchema.methods.setEnrollments = function (e) {
try{
e = JSON.parse(e);
} catch (err) {
return false;
}
let success = true;
for(let i=0; i<e.length; i++){
if(!(e[i] instanceof Array)){
return false;
}
if(e[i].length !== this.time){
return false;
}
e[i].forEach((n, i, array) => {
if(n !== parseInt(n, 10)){
success = false;
}
});
}
if (success) this.enrollments = e;
return success;
}
SimulationSchema.methods.update = function (property, value) {
let success = true;
switch(property){
case 'time':
if (!this.setTime(value)) success = false;
break;
case 'location':
if (!this.setLocation(value)) success = false;
break;
case 'failure_rate':
if (!this.setFailureRate(value)) success = false;
break;
case 'goals_care':
if (!this.setCareGoals(value)) success = false;
break;
case 'goals_inclusion':
if (!this.setInclusionGoals(value)) success = false;
break;
case 'enrollments':
if (!this.setEnrollments(value)) success = false;
break;
case 'name':
this.name = value;
break;
} }
return success; });
};
SimulationSchema.methods.run = function () {
/* Runs the Simulation with given parameters */
// if (!this.name || !this.location || !this.time) {
// console.log('This is supposed to be an error.');
// }
};
module.exports = mongoose.model('Simulation', SimulationSchema); module.exports = mongoose.model('Simulation', SimulationSchema);
...@@ -14,6 +14,10 @@ const response = require(`${libs}/middlewares/response`); ...@@ -14,6 +14,10 @@ const response = require(`${libs}/middlewares/response`);
const Simulation = require(`${libs}/models/simulation`); const Simulation = require(`${libs}/models/simulation`);
const PQR = require(`${libs}/models/pqr`);
const passport = require('passport');
simulationApp.get('/time', (req, res, next) => { simulationApp.get('/time', (req, res, next) => {
const maxTime = parseInt(req.query.max_time, 10); const maxTime = parseInt(req.query.max_time, 10);
log.debug('maxTime: ', maxTime); log.debug('maxTime: ', maxTime);
...@@ -29,133 +33,122 @@ simulationApp.get('/time', (req, res, next) => { ...@@ -29,133 +33,122 @@ simulationApp.get('/time', (req, res, next) => {
}); });
}); });
simulationApp.get('/', (req, res) => { simulationApp.get('/pqr', (req, res) => {
let out = { success: true, msg: 'controller working' }; PQR.findOne((err, pqr) => {
out.result = new Array() if(err) {
Simulation.find({}, function(err, sims) { log.error(err);
sims.forEach((sim) => { return next({err});
out.result.push(sim); }
});
res.send(out); res.json(pqr);
}); });
}); });
simulationApp.post('/', (req, res, next) => { simulationApp.put('/pqr', passport.authenticate('bearer', { session: false }), (req, res, next) => {
// This method must associate new entry with user. let user = req.user.toObject();
/* Creates a new simulation. Requires a name. */
if (!req.body.name) { PQR.findOne((err, pqr) => {
res.send({ success: false, msg: 'Must send a name for new entry' }); if(err) {
} else { log.error(err)
next(); return next({err});
} }
}, (req, res) => {
let currentdate = new Date(); if(!user.admin) {
let newSimulation = new Simulation({ log.info(`Usuário ${user.email} tentou alterar o PQR, mas não tem privilégio`);
name: req.body.name, res.statusCode = 401;
timestamp: currentdate.getDate(), return next({err: { msg: 'Unauthorized'}});
});
newSimulation.save((err) => {
if (err) {
res.send({ success: false, msg: err });
} else {
res.send({
success: true,
msg: 'new sim created',
id: newSimulation._id,
});
} }
pqr.content = req.body.content | pqr.content;
pqr.save((err) => {
if(err) {
log.error(err);
return next({err});
}
res.json({msg: 'PQR updated'})
});
}); });
}); });
simulationApp.get('/:id', (req, res) => { simulationApp.get('/', passport.authenticate('bearer', { session: false }), (req, res) => {
/* Can be used to check simulation construction status */ let user = req.user.toObject();
Simulation.findById(req.params.id, (err, simulation) => { Simulation.find({userId: user._id}, (err, simulations) => {
log.debug(req.params.id); if(err) {
if (err) { log.error(err);
res.send({ success: false, msg: err }); return next({err});
return;
} }
if (!simulation) { res.json(simulations);
res.send({ success: false, msg: 'Entry not found' });
} else {
res.send(simulation);
}
}); });
}); });
simulationApp.post('/:id', (req, res, next) => { simulationApp.post('/', passport.authenticate('bearer', { session: false }), (req, res, next) => {
if (!Object.keys(req.body).length) { let user = req.user.toObject();
res.send({ success: false, msg: 'No field informed to update' });
} else { let simulation = new Simulation({
next(); userId: user._id,
} content: req.body.content
}, (req, res, next) => {
let simulation = Simulation.findById(req.params.id, (err, simulation) => {
if (err) {
res.send({ success: false, msg: err });
} else {
if (!simulation) {
res.send({ success: false, msg: 'Entry not found' });
} else {
req.simulation = simulation;
next();
}
}
}); });
}, (req, res) => {
for (let property in req.body) { simulation.save((err) => {
if (Simulation.schema.tree.hasOwnProperty(property)) { if(err) {
if(!req.simulation.update(property, req.body[property])){ log.error(err);
res.send({ return next({err});
success: false,
msg: 'Invalid format for ' + property,
});
return ;
}
} else {
res.send({
success: false,
msg: 'Unknown property ' + property,
});
return ;
} }
}
req.simulation.save((err) => { res.json({msg: 'Simulation created'});
if (err) { })
res.send({ success: false, msg: err }); });
} else {
res.send({ simulationApp.get('/:id', passport.authenticate('bearer', { session: false }), (req, res) => {
success: true, let user = req.user.toObject();
msg: 'sim updated',
id: req.simulation._id, Simulation.findOne({_id: req.params.id, userId: user._id}, (err, simulation) => {
}); if(err) {
log.error(err);
return next({err});
} }
res.json(simulation);
}); });
}); });
simulationApp.delete('/:id', (req, res, next) => { simulationApp.put('/:id', passport.authenticate('bearer', { session: false }), (req, res, next) => {
let simulation = Simulation.findById(req.params.id, (err, simulation) => { let user = req.user.toObject();
if (err) {
res.send({ success: false, msg: err }); Simulation.findOne({_id: req.params.id, userId: user._id}, (err, simulation) => {
} else { if(err) {
if (!simulation) { log.error(err);
res.send({ success: false, msg: 'Entry not found' }); return next({err});
} else { }
next();
} if(!simulation) {
res.statusCode = 404;
return next({err: { msg: 'Simulation not found'}});
} }
simulation.content = req.body.content | simulation.content;
simulation.save((err) => {
if(err) {
log.error(err);
return next(err);
}
res.json(simulation);
});
}); });
}, (req, res) => { });
Simulation.remove({"_id": req.params.id}, (err) => {
if (err) { simulationApp.delete('/:id', passport.authenticate('bearer', { session: false }), (req, res, next) => {
res.send({ success: false, msg: err }); let user = req.user.toObject();
} else {
res.send({ Simulation.remove({_id: req.params.id, userId: user._id}, (err, simulation) => {
success: true, if(err) {
msg: 'sim removed', log.error(err);
}); return next({err});
} }
res.json({msg: 'Simulation removed'});
}); });
}); });
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment