From 1040238935ef8c9ba4ce85a3694c236613e33ebc Mon Sep 17 00:00:00 2001 From: Markus Grigull <web@grigull.me> Date: Tue, 28 Jun 2016 14:24:28 +0200 Subject: [PATCH] Add visualizations and plots routes and models --- models/plot.js | 15 ++++++++ models/project.js | 3 +- models/visualization.js | 12 ++++++ routes/plots.js | 81 ++++++++++++++++++++++++++++++++++++++++ routes/projects.js | 2 +- routes/visualizations.js | 81 ++++++++++++++++++++++++++++++++++++++++ server.js | 4 ++ 7 files changed, 196 insertions(+), 2 deletions(-) create mode 100644 models/plot.js create mode 100644 models/visualization.js create mode 100644 routes/plots.js create mode 100644 routes/visualizations.js diff --git a/models/plot.js b/models/plot.js new file mode 100644 index 0000000..41b163b --- /dev/null +++ b/models/plot.js @@ -0,0 +1,15 @@ +// include +var mongoose = require('mongoose'); + +var Schema = mongoose.Schema; + +// plot model +var plotSchema = new Schema({ + name: { type: String, required: true }, + signal: { type: String, required: true }, + width: { type: Number, required: true }, + height: { type: Number, required: true }, + title: { type: String } +}); + +module.exports = mongoose.model('Plot', plotSchema); diff --git a/models/project.js b/models/project.js index c530a1d..84d2548 100644 --- a/models/project.js +++ b/models/project.js @@ -6,7 +6,8 @@ var Schema = mongoose.Schema; // project model var projectSchema = new Schema({ name: { type: String, required: true }, - owner: { type: Schema.Types.ObjectId, ref: 'User', required: true } + owner: { type: Schema.Types.ObjectId, ref: 'User', required: true }, + visualizations: [{ type: Schema.Types.ObjectId, ref: 'Visualization' }] }); module.exports = mongoose.model('Project', projectSchema); diff --git a/models/visualization.js b/models/visualization.js new file mode 100644 index 0000000..b90b06d --- /dev/null +++ b/models/visualization.js @@ -0,0 +1,12 @@ +// include +var mongoose = require('mongoose'); + +var Schema = mongoose.Schema; + +// visualization model +var visualizationSchema = new Schema({ + name: { type: String, required: true }, + plots: [{ type: Schema.Types.ObjectId, ref: 'Plot' }] +}); + +module.exports = mongoose.model('Visualization', visualizationSchema); diff --git a/routes/plots.js b/routes/plots.js new file mode 100644 index 0000000..e9d2acd --- /dev/null +++ b/routes/plots.js @@ -0,0 +1,81 @@ +// include +var express = require('express'); + +var Plot = require('../models/plot'); +var auth = require('../auth'); + +// create router +var router = express.Router(); + +// all plot routes need authentication +router.use('/plots', auth.validateToken); + +// routes +router.get('/plots', function(req, res) { + // get all plots + Plot.find(function(err, plots) { + if (err) { + return res.send(err); + } + + res.send({ plots: plots }); + }); +}); + +router.route('/plots').post(function(req, res) { + // create new plot + var plot = new Plot(req.body.plot); + + plot.save(function(err) { + if (err) { + return res.send(err); + } + + res.send({ plot: plot }); + }); +}); + +router.route('/plots/:id').put(function(req, res) { + // get plot + Plot.findOne({ _id: req.params.id }, function(err, plot) { + if (err) { + return res.send(err); + } + + // update all properties + for (property in req.body.plot) { + plot[property] = req.body.plot[property]; + } + + // save the changes + plot.save(function(err) { + if (err) { + return res.send(err); + } + + res.send({ plot: plot }); + }); + }); +}); + +router.route('/plots/:id').get(function(req, res) { + Plot.findOne({ _id: req.params.id }, function(err, plot) { + if (err) { + return res.send(err); + } + + res.send({ plot: plot }); + }); +}); + +router.route('/plots/:id').delete(function(req, res) { + Plot.remove({ _id: req.params.id }, function(err, plot) { + if (err) { + return res.send(err); + } + + res.send({ plot: plot }); + }); +}); + +module.exports = router; diff --git a/routes/projects.js b/routes/projects.js index 7d88f14..b65a593 100644 --- a/routes/projects.js +++ b/routes/projects.js @@ -33,7 +33,7 @@ router.get('/projects', function(req, res) { return res.send(err); } - res.json({ projects: projects }); + res.send({ projects: projects }); }); }); diff --git a/routes/visualizations.js b/routes/visualizations.js new file mode 100644 index 0000000..abf2a2d --- /dev/null +++ b/routes/visualizations.js @@ -0,0 +1,81 @@ +// include +var express = require('express'); + +var Visualization = require('../models/visualization'); +var auth = require('../auth'); + +// create router +var router = express.Router(); + +// all visualization routes need authentication +router.use('/visualizations', auth.validateToken); + +// routes +router.get('/visualizations', function(req, res) { + // get all visualizations + Visualization.find(function(err, visualizations) { + if (err) { + return res.send(err); + } + + res.send({ visualizations: visualizations }); + }); +}); + +router.route('/visualizations').post(function(req, res) { + // create new visualization + var visualization = new Visualization(req.body.visualization); + + visualization.save(function(err) { + if (err) { + return res.send(err); + } + + res.send({ visualization: visualization }); + }); +}); + +router.route('/visualizations/:id').put(function(req, res) { + // get visualization + Visualization.findOne({ _id: req.params.id }, function(err, visualization) { + if (err) { + return res.send(err); + } + + // update all properties + for (property in req.body.visualization) { + visualization[property] = req.body.visualization[property]; + } + + // save the changes + visualization.save(function(err) { + if (err) { + return res.send(err); + } + + res.send({ visualization: visualization }); + }); + }); +}); + +router.route('/visualizations/:id').get(function(req, res) { + Visualization.findOne({ _id: req.params.id }, function(err, visualization) { + if (err) { + return res.send(err); + } + + res.send({ visualization: visualization }); + }); +}); + +router.route('/visualizations/:id').delete(function(req, res) { + Visualization.remove({ _id: req.params.id }, function(err, visualization) { + if (err) { + return res.send(err); + } + + res.send({ visualization: visualization }); + }); +}); + +module.exports = router; diff --git a/server.js b/server.js index ccc58d3..1b07975 100644 --- a/server.js +++ b/server.js @@ -10,6 +10,8 @@ var config = require('./config'); var users = require('./routes/users'); var projects = require('./routes/projects'); +var visualizations = require('./routes/visualizations'); +var plots = require('./routes/plots') var User = require('./models/user'); @@ -28,6 +30,8 @@ mongoose.connect(config.databaseURL + config.databaseName); // register routes app.use('/api/v1', users); app.use('/api/v1', projects); +app.use('/api/v1', visualizations); +app.use('/api/v1', plots); // start the app app.listen(config.port, function() { -- GitLab