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