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')
const libs = `${process.cwd()}/libs`;
const log = require(`${libs}/log`)(module);
const User = require(`${libs}/models/user`);
const Schema = mongoose.Schema;
// Should define this somewhere else
const MAX_SIMULATION_TIME = 10;
let SimulationSchema = new Schema({
name: {
type: String,
userId: {
type: Schema.Types.ObjectId,
required: true,
ref: 'User'
},
location: Object,
time: Number,
failure_rate: Array,
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;
content: {
type: String,
required: true,
}
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);
......@@ -14,6 +14,10 @@ const response = require(`${libs}/middlewares/response`);
const Simulation = require(`${libs}/models/simulation`);
const PQR = require(`${libs}/models/pqr`);
const passport = require('passport');
simulationApp.get('/time', (req, res, next) => {
const maxTime = parseInt(req.query.max_time, 10);
log.debug('maxTime: ', maxTime);
......@@ -29,133 +33,122 @@ simulationApp.get('/time', (req, res, next) => {
});
});
simulationApp.get('/', (req, res) => {
let out = { success: true, msg: 'controller working' };
out.result = new Array()
Simulation.find({}, function(err, sims) {
sims.forEach((sim) => {
out.result.push(sim);
});
res.send(out);
simulationApp.get('/pqr', (req, res) => {
PQR.findOne((err, pqr) => {
if(err) {
log.error(err);
return next({err});
}
res.json(pqr);
});
});
simulationApp.post('/', (req, res, next) => {
// This method must associate new entry with user.
/* Creates a new simulation. Requires a name. */
if (!req.body.name) {
res.send({ success: false, msg: 'Must send a name for new entry' });
} else {
next();
}
}, (req, res) => {
let currentdate = new Date();
let newSimulation = new Simulation({
name: req.body.name,
timestamp: currentdate.getDate(),
});
newSimulation.save((err) => {
if (err) {
res.send({ success: false, msg: err });
} else {
res.send({
success: true,
msg: 'new sim created',
id: newSimulation._id,
});
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'}});
}
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) => {
/* Can be used to check simulation construction status */
Simulation.findById(req.params.id, (err, simulation) => {
log.debug(req.params.id);
if (err) {
res.send({ success: false, msg: err });
return;
simulationApp.get('/', passport.authenticate('bearer', { session: false }), (req, res) => {
let user = req.user.toObject();
Simulation.find({userId: user._id}, (err, simulations) => {
if(err) {
log.error(err);
return next({err});
}
if (!simulation) {
res.send({ success: false, msg: 'Entry not found' });
} else {
res.send(simulation);
}
res.json(simulations);
});
});
simulationApp.post('/:id', (req, res, next) => {
if (!Object.keys(req.body).length) {
res.send({ success: false, msg: 'No field informed to update' });
} else {
next();
}
}, (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();
}
}
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
});
}, (req, res) => {
for (let property in req.body) {
if (Simulation.schema.tree.hasOwnProperty(property)) {
if(!req.simulation.update(property, req.body[property])){
res.send({
success: false,
msg: 'Invalid format for ' + property,
});
return ;
}
} else {
res.send({
success: false,
msg: 'Unknown property ' + property,
});
return ;
simulation.save((err) => {
if(err) {
log.error(err);
return next({err});
}
}
req.simulation.save((err) => {
if (err) {
res.send({ success: false, msg: err });
} else {
res.send({
success: true,
msg: 'sim updated',
id: req.simulation._id,
});
res.json({msg: 'Simulation created'});
})
});
simulationApp.get('/:id', passport.authenticate('bearer', { session: false }), (req, res) => {
let user = req.user.toObject();
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) => {
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 {
next();
}
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});
}
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) {
res.send({ success: false, msg: err });
} else {
res.send({
success: true,
msg: 'sim removed',
});
});
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});
}
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