From 234462a29fb5c094ce1d9a4d93b5bd3e39690328 Mon Sep 17 00:00:00 2001
From: Markus Grigull <web@grigull.me>
Date: Sun, 26 Jun 2016 09:09:08 +0200
Subject: [PATCH] Add basic user model and route

For tests open mongodb port and access directly (without docker)
---
 .gitignore         |  1 +
 config.js          |  3 +-
 docker-compose.yml |  2 ++
 models/user.js     | 13 ++++++++
 routes/users.js    | 79 ++++++++++++++++++++++++++++++++++++++++++++++
 server.js          | 12 +++++++
 6 files changed, 109 insertions(+), 1 deletion(-)
 create mode 100644 models/user.js
 create mode 100644 routes/users.js

diff --git a/.gitignore b/.gitignore
index 87661f0..adac2d0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 # NodeJS
 node_modules/
+npm-debug.log
 
 # OS X
 .DS_Store
diff --git a/config.js b/config.js
index c518b77..8adc409 100644
--- a/config.js
+++ b/config.js
@@ -1,5 +1,6 @@
 module.exports = {
   'databaseName': 'VILLAS',
-  'databaseURL': 'mongodb://mongo:27017/',
+  /*'databaseURL': 'mongodb://mongo:27017/',*/
+  'databaseURL': 'mongodb://192.168.99.100:27017/',
   'port': 3000
 }
diff --git a/docker-compose.yml b/docker-compose.yml
index ec832e0..b189c0c 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -7,3 +7,5 @@ node:
 
 mongo:
   image: mongo
+  ports:
+    - "27017:27017"
diff --git a/models/user.js b/models/user.js
new file mode 100644
index 0000000..ea436b4
--- /dev/null
+++ b/models/user.js
@@ -0,0 +1,13 @@
+// include
+var mongoose = require('mongoose');
+
+var Schema = mongoose.Schema;
+
+// user model
+var userSchema = new Schema({
+  username: { type: String, unique: true, required: true },
+  password: { type: String, required: true },
+  adminLevel: { type: Number, default: 0 }
+});
+
+module.exports = mongoose.model('User', userSchema);
diff --git a/routes/users.js b/routes/users.js
new file mode 100644
index 0000000..db1529e
--- /dev/null
+++ b/routes/users.js
@@ -0,0 +1,79 @@
+// include
+var express = require('express');
+
+var User = require('../models/user');
+
+// create router
+var router = express.Router();
+
+// routes
+router.route('/users').get(function(req, res) {
+  // get all users
+  User.find(function(err, users) {
+    if (err) {
+      return res.send(err);
+    }
+
+    res.json(users);
+  });
+});
+
+router.route('/users').post(function(req, res) {
+  // create new user
+  var user = new User(req.body);
+
+  console.log(req.body);
+
+  user.save(function(err) {
+    if (err) {
+      return res.send(err);
+    }
+
+    res.send({ success: true, message: 'User added' });
+  });
+});
+
+router.route('/users/:id').put(function(req, res) {
+  // get user
+  User.findOne({ _id: req.params.id }, function(err, user) {
+    if (err) {
+      return res.send(err);
+    }
+
+    // update all properties
+    for (property in req.body) {
+      user[property] = req.body[property];
+    }
+
+    // save the changes
+    user.save(function(err) {
+      if (err) {
+        return res.send(err);
+      }
+
+      res.send({ success: true, message: 'User updated' });
+    });
+  });
+});
+
+router.route('/users/:id').get(function(req, res) {
+  User.findOne({ _id: req.params.id }, function(err, user) {
+    if (err) {
+      return res.send(err);
+    }
+
+    res.send(user);
+  });
+});
+
+router.route('/users/:id').delete(function(req, res) {
+  User.remove({ _id: req.params.id }, function(req, res) {
+    if (err) {
+      return res.send(err);
+    }
+
+    res.send({ success: true, message: 'User deleted' });
+  });
+});
+
+module.exports = router;
diff --git a/server.js b/server.js
index 08a5c6d..c3fc86b 100644
--- a/server.js
+++ b/server.js
@@ -1,16 +1,28 @@
 // include modules
 var express = require('express');
 var mongoose = require('mongoose');
+var bodyParser = require('body-parser');
 
 // local include
 var config = require('./config');
 
+var users = require('./routes/users');
+
+var User = require('./models/user');
+
 // create application
 var app = express();
 
+// configure app
+app.use(bodyParser.json());
+app.use(bodyParser.urlencoded({ extended: true }));
+
 // connect to database
 mongoose.connect(config.databaseURL + config.databaseName);
 
+// register routes
+app.use('/api/v1', users);
+
 // start the app
 app.listen(config.port, function() {
   console.log('Express server listening on port ' + config.port);
-- 
GitLab