From fda840d11911623d9a6e9ba5a1fcc0c339215f43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Amra=20=C5=A0abi=C4=87?= Date: Sat, 17 Feb 2018 11:44:35 +0100 Subject: [PATCH] added mongose and express, modified server, for testing purpose added user controller, model and routes --- api/controllers/userController.js | 54 ++++++++++++ api/models/userModel.js | 18 ++++ api/routes/userRoutes.js | 15 ++++ package-lock.json | 131 +++++++++++++++++++++++++++++- package.json | 3 +- server.js | 14 +++- 6 files changed, 231 insertions(+), 4 deletions(-) diff --git a/api/controllers/userController.js b/api/controllers/userController.js index e69de29..bbd9a55 100644 --- a/api/controllers/userController.js +++ b/api/controllers/userController.js @@ -0,0 +1,54 @@ +'use strict'; + +var mongoose = require('mongoose'), +User = mongoose.model('User'); + +exports.list_all = function(req, res) { + User.find({}, function(err, user) { + if (err) { + res.send(err); + } + res.json(user); + }); +}; + +exports.add_user = function(req, res) { + var new_user = new User(req.body); + new_user.save(function(err, user) { + if (err) { + res.send(err); + } + res.json(user); + }); +}; + +exports.get_user = function(req, res) { + User.findById(req.params.userId, function(err, user) { + if (err) { + res.send(err); + } + res.json(user); + }); +}; + +// TODO modify to update user permitions +exports.update_user = function(req, res) { + User.findOneAndUpdate({_id: req.params.userId}, req.body, {new: true}, function(err, user) { + if (err) { + res.send(err); + } + res.json(user); + }); +}; + +// TODO modify to remove user permitions / group +exports.remove_user = function(req, res) { + User.remove({ + _id: req.params.userId + }, function(err, user) { + if (err) { + res.send(err); + } + res.json({ message: 'User successfully deleted' }); + }); +}; \ No newline at end of file diff --git a/api/models/userModel.js b/api/models/userModel.js index e69de29..490bc56 100644 --- a/api/models/userModel.js +++ b/api/models/userModel.js @@ -0,0 +1,18 @@ +'use strict'; + +var mongoose = require('mongoose'); +var Schema = mongoose.Schema; + +var UserSchema = new Schema({ + // TODO modify later, just for testing + name: { + type: String, + required: 'Name' + }, + Created_date: { + type: Date, + default: Date.now + } +}); + +module.exports = mongoose.model('User', UserSchema); diff --git a/api/routes/userRoutes.js b/api/routes/userRoutes.js index e69de29..618f587 100644 --- a/api/routes/userRoutes.js +++ b/api/routes/userRoutes.js @@ -0,0 +1,15 @@ +'use strict'; + +module.exports = function(app) { + var user = require('../controllers/userController'); + + // TODO Routes + app.route('/users') + .get(user.list_all) + .post(user.add_user); + + app.route('/users/:userId') + .get(user.get_user) + .put(user.update_user) + .delete(user.remove_user); +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 35135d4..684c28e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -88,6 +88,14 @@ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, + "async": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.1.4.tgz", + "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", + "requires": { + "lodash": "4.17.5" + } + }, "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", @@ -127,6 +135,11 @@ "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", "dev": true }, + "bluebird": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz", + "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw=" + }, "body-parser": { "version": "1.18.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", @@ -198,6 +211,11 @@ "to-regex": "3.0.1" } }, + "bson": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.0.4.tgz", + "integrity": "sha1-k8ENOeqltYQVy8QFLz5T5WKwtyw=" + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -2053,6 +2071,11 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, + "kareem": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.0.4.tgz", + "integrity": "sha512-emosNz0ruOjDkyH2QvnL8m65Mzl8D0IBP3PukQmGl2cjhqMrQajq3OcLdLeBV5GzPfqmsuDQB0WkZOHVhyK6jg==" + }, "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", @@ -2077,12 +2100,22 @@ "set-getter": "0.1.0" } }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" + }, "lodash.endswith": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/lodash.endswith/-/lodash.endswith-4.2.1.tgz", "integrity": "sha1-/tWawXOO0+I27dcGTsRWRIs3vAk=", "dev": true }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, "lodash.isfunction": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", @@ -2237,6 +2270,77 @@ } } }, + "mongodb": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.0.2.tgz", + "integrity": "sha512-E50FmpSQchZAimn2uPIegoNoH9UQYR1yiGHtQPmmg8/Ekc97w6owHoqaBoz+assnd9V5LxMzmQ/VEWMsQMgZhQ==", + "requires": { + "mongodb-core": "3.0.2" + } + }, + "mongodb-core": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.0.2.tgz", + "integrity": "sha512-p1B0qwFQUw6C1OlFJnrOJp8KaX7MuGoogRbTaupRt0y+pPRkMllHWtE9V6i1CDtTvI3/3sy2sQwqWez7zuXEAA==", + "requires": { + "bson": "1.0.4", + "require_optional": "1.0.1" + } + }, + "mongoose": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.0.6.tgz", + "integrity": "sha512-VgvQfyO4Un1NxNjlDWscByGEs+JC76jdnxfHO5X83d+LvzWoSkRSVbq+9Zio162DpHnkI5pJy/mI2VdgiiBqZQ==", + "requires": { + "async": "2.1.4", + "bson": "1.0.4", + "kareem": "2.0.4", + "lodash.get": "4.4.2", + "mongodb": "3.0.2", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.3.0", + "mquery": "3.0.0", + "ms": "2.0.0", + "regexp-clone": "0.0.1", + "sliced": "1.0.1" + } + }, + "mongoose-legacy-pluralize": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", + "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" + }, + "mpath": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.3.0.tgz", + "integrity": "sha1-elj3iem1/TyUUgY0FXlg8mvV70Q=" + }, + "mquery": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.0.0.tgz", + "integrity": "sha512-WL1Lk8v4l8VFSSwN3yCzY9TXw+fKVYKn6f+w86TRzOLSE8k1yTgGaLBPUByJQi8VcLbOdnUneFV/y3Kv874pnQ==", + "requires": { + "bluebird": "3.5.0", + "debug": "2.6.9", + "regexp-clone": "0.0.1", + "sliced": "0.0.5" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "sliced": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-0.0.5.tgz", + "integrity": "sha1-XtwETKTrb3gW1Qui/GPiXY/kcH8=" + } + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -2612,6 +2716,11 @@ "extend-shallow": "2.0.1" } }, + "regexp-clone": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-0.0.1.tgz", + "integrity": "sha1-p8LgmJH9vzj7sQ03b7cwA+aKxYk=" + }, "registry-auth-token": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", @@ -2649,6 +2758,20 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, + "require_optional": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", + "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", + "requires": { + "resolve-from": "2.0.0", + "semver": "5.5.0" + } + }, + "resolve-from": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz", + "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=" + }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -2663,8 +2786,7 @@ "semver": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" }, "semver-diff": { "version": "2.1.0", @@ -2769,6 +2891,11 @@ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, + "sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, "snapdragon": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", diff --git a/package.json b/package.json index ee6f313..5f4778b 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "nodemon": "^1.15.0" }, "dependencies": { - "express": "^4.16.2" + "express": "^4.16.2", + "mongoose": "^5.0.6" } } diff --git a/server.js b/server.js index ed98b0d..dc515bf 100644 --- a/server.js +++ b/server.js @@ -1,7 +1,19 @@ var express = require('express'), app = express(), - port = process.env.PORT || 3000; + port = process.env.PORT || 3000, + mongoose = require('mongoose'), + User = require('./api/models/userModel'), //created model loading here + bodyParser = require('body-parser'); + +// mongoose instance connection url connection +mongoose.Promise = global.Promise; +mongoose.connect('mongodb://localhost/Userdb'); +app.use(bodyParser.urlencoded({ extended: true })); +app.use(bodyParser.json()); + +var routes = require('./api/routes/userRoutes'); //importing route +routes(app); //register the route app.listen(port); console.log('API server started on: ' + port); \ No newline at end of file