From 2bfdf1fb0339dbe8649f8ffa3d55e0756a963d26 Mon Sep 17 00:00:00 2001 From: Rudolf Copi Eckelberg <rce16@inf.ufpr.br> Date: Mon, 3 Oct 2016 10:52:38 -0300 Subject: [PATCH] First persistent simulation model --- src/libs/models/simulation.js | 1 + src/libs/routes/api.js | 3 + src/libs/routes/simulation.js | 105 ++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+) create mode 100644 src/libs/routes/simulation.js diff --git a/src/libs/models/simulation.js b/src/libs/models/simulation.js index dfefc8bc..7d9afbb0 100644 --- a/src/libs/models/simulation.js +++ b/src/libs/models/simulation.js @@ -1,6 +1,7 @@ const mongoose = require('mongoose') const libs = `${process.cwd()}/libs`; +const config = require(`${libs}/config`); const log = require(`${libs}/log`)(module); const locations = require(`${libs}/models/locations`); diff --git a/src/libs/routes/api.js b/src/libs/routes/api.js index 06953296..61c7121d 100644 --- a/src/libs/routes/api.js +++ b/src/libs/routes/api.js @@ -12,6 +12,8 @@ const city = require('./city'); const school = require('./school'); +const simulation = require('./simulation'); + api.get('/api/v1', (req, res) => { res.json({ msg: 'SimCAQ API is running' }); }); @@ -22,5 +24,6 @@ api.use('/api/v1/state', state); api.use('/api/v1/region', region); api.use('/api/v1/city', city); api.use('/api/v1/school', school); +api.use('/api/v1/simulation', simulation); module.exports = api; diff --git a/src/libs/routes/simulation.js b/src/libs/routes/simulation.js new file mode 100644 index 00000000..a776795f --- /dev/null +++ b/src/libs/routes/simulation.js @@ -0,0 +1,105 @@ +const express = require('express'); + +const simulationApp = express(); + +const libs = `${process.cwd()}/libs`; + + +const log = require(`${libs}/log`)(module); +const config = require(`${libs}/config`); + +const squel = require('squel'); + +const query = require(`${libs}/middlewares/query`); + +const response = require(`${libs}/middlewares/response`); + +const Simulation = require(`${libs}/models/simulation`); + +simulationApp.get('/', (req, res) => { + res.send({ success: true, msg: 'controller working' }); +}); + + + +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 newSimulation = new Simulation({ + name: req.body.name, + }); + newSimulation.save((err) => { + if (err) { + res.send({ success: false, msg: err }); + } else { + res.send({ + success: true, + msg: 'new sim created', + id: newSimulation._id, + }); + } + }); +}); + +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; + } + + if (!simulation) { + res.send({ success: false, msg: 'Entry not found' }); + } else { + res.send(JSON.stringify(simulation)); + } + }); +}); + +simulationApp.post('/:id', (req, res, next) => { + if (!req.body) { + 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(); + } + } + }); +}, (req, res) => { + for (let property in req.body) { + if(Simulation.schema.tree.hasOwnProperty(property)) { + req.simulation[property] = req.body[property]; + } + } + req.simulation.save((err) => { + if (err) { + res.send({ success: false, msg: err }); + } else { + res.send({ + success: true, + msg: 'sim updated', + id: req.simulation._id, + }); + } + }); +}); + +module.exports = simulationApp; -- GitLab