Skip to content
Snippets Groups Projects
Commit 941223f3 authored by Markus Grigull's avatar Markus Grigull
Browse files

Add model route

parent c8c2629f
No related branches found
No related tags found
No related merge requests found
......@@ -14,3 +14,4 @@ This is the backend for the VILLASweb frontend. It is build upon NodeJS, Express
- Add proper error messages to all routes
- Handle missing objects (e.g. visualization is removed and belonging project does not exist anymore)
- Save model creation date
- Add project/visualization sharing
// include
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
// model model
var modelSchema = new Schema({
name: { type: String, required: true, unique: true },
running: { type: Boolean, default: false },
projects: { type: Schema.Types.ObjectId, ref: 'Project' },
owner: { type: Schema.Types.ObjectId, ref: 'User' }
});
module.exports = mongoose.model('Model', modelSchema);
......@@ -11,8 +11,8 @@ var plotSchema = new Schema({
height: { type: Number, required: true },
title: { type: String },
type: { type: String, required: true },
row: { type: Number, default: 0 },
column: { type: Number, default: 0 },
x: { type: Number, default: 0 },
y: { type: Number, default: 0 },
visualization: { type: Schema.Types.ObjectId, ref: 'Visualization' }
});
......
......@@ -3,6 +3,7 @@ var mongoose = require('mongoose');
var bcrypt = require('bcrypt-nodejs');
var Project = require('./project');
var Model = require('./model');
var Schema = mongoose.Schema;
......@@ -12,7 +13,8 @@ var userSchema = new Schema({
password: { type: String, required: true },
adminLevel: { type: Number, default: 0 },
projects: [{ type: Schema.Types.ObjectId, ref: 'Project', default: [] }],
mail: { type: String, default: "" }
mail: { type: String, default: "" },
models: [{ type: Schema.Types.ObjectId, ref: 'Model', default: [] }]
});
userSchema.methods.verifyPassword = function(password, callback) {
......@@ -72,6 +74,21 @@ userSchema.pre('remove', function(callback) {
});
});
// delete all models belonging to this user
this.models.forEach(function(id) {
Model.findOne({ _id: id }, function(err, model) {
if (err) {
return console.log(err);
}
model.remove(function(err) {
if (err) {
return console.log(err);
}
});
});
});
callback();
});
......
// include
var express = require('express');
var auth = require('../auth');
// models
var Model = require('../models/model');
// create router
var router = express.Router();
// all model routes need authentication
router.use('/models', auth.validateToken);
// routes
router.get('/models', function(req, res) {
// get all models
Model.find(function(err, models) {
if (err) {
return res.send(err);
}
res.send({ models: models });
});
});
router.post('/models', function(req, res) {
// create new model
var model = new Model(req.body.model);
model.save(function(err) {
if (err) {
return res.send(err);
}
res.send({ model: model });
});
// add model to user
Model.findOne({ _id: model.owner }, function(err, user) {
if (err) {
return console.log(err);
}
user.models.push(model._id);
user.save(function(err) {
if (err) {
console.log(err);
}
});
});
});
router.put('/models/:id', function(req, res) {
// get model
Model.findOne({ _id: req.params.id }, function(err, model) {
if (err) {
return res.send(err);
}
// update all properties
for (property in req.body.model) {
model[property] = req.body.model[property];
}
// save the changes
model.save(function(err) {
if (err) {
return res.send(err);
}
res.send({ model: model });
});
});
});
router.get('/models/:id', function(req, res) {
Model.findOne({ _id: req.params.id }, function(err, model) {
if (err) {
return res.send(err);
}
res.send({ model: model });
});
});
router.delete('/models/:id', function(req, res) {
Model.findOne({ _id: req.params.id }, function(err, model) {
if (err) {
return res.send(err);
}
// remove from owner's list
User.findOne({ _id: model.owner }, function(err, user) {
if (err) {
return console.log(err);
}
for (var i = 0; user.models.length; i++) {
var id = String(user.models[i]);
if (id == model._id) {
user.models.splice(i, 1);
}
}
user.save(function(err) {
if (err) {
return console.log(err);
}
});
});
model.remove(function(err) {
if (err) {
return res.send(err);
}
res.send({});
});
});
});
module.exports = router;
......@@ -11,7 +11,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 plots = require('./routes/plots');
var models = require('./routes/models');
var User = require('./models/user');
......@@ -32,6 +33,7 @@ app.use('/api/v1', users);
app.use('/api/v1', projects);
app.use('/api/v1', visualizations);
app.use('/api/v1', plots);
app.use('/api/v1', models);
// start the app
app.listen(config.port, function() {
......
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