From bbcccdfef2eaf7e4cf7677f8900515424c37afb9 Mon Sep 17 00:00:00 2001 From: Kiley Lewis Date: Tue, 13 Aug 2019 12:24:02 -0500 Subject: [PATCH] parts 1-5 --- controllers/comment.js | 39 ++++++++++ controllers/contact.js | 40 ++++++++++ controllers/product.js | 39 ++++++++++ controllers/vehicle.js | 39 ++++++++++ index.js | 34 +++++---- models/CommentModel.js | 8 ++ models/ContactModel.js | 10 +++ models/ProductModel.js | 9 +++ models/VehicleModel.js | 10 +++ package-lock.json | 165 +++++++++++++++++++++++++++++++++++++++++ package.json | 3 +- routes/comment.js | 12 +++ routes/contact.js | 12 +++ routes/product.js | 11 +++ routes/vehicle.js | 11 +++ 15 files changed, 428 insertions(+), 14 deletions(-) create mode 100644 controllers/comment.js create mode 100644 controllers/contact.js create mode 100644 controllers/product.js create mode 100644 controllers/vehicle.js create mode 100644 models/CommentModel.js create mode 100644 models/ContactModel.js create mode 100644 models/ProductModel.js create mode 100644 models/VehicleModel.js create mode 100644 routes/comment.js create mode 100644 routes/contact.js create mode 100644 routes/product.js create mode 100644 routes/vehicle.js diff --git a/controllers/comment.js b/controllers/comment.js new file mode 100644 index 0000000..e037148 --- /dev/null +++ b/controllers/comment.js @@ -0,0 +1,39 @@ +let CommentModel = require("../models/CommentModel") + +//get - return all comments +exports.list = function list(req, res) { + CommentModel.find(function (err, comments){ + if (err) return console.error(err); + return res.json(comments); + }) +} + +//get one comment by id +exports.show = function show(req, res) { + CommentModel.findById(req.params.commentId, function (err, comment){ + if (err) return console.error(err); + return res.json(comment); + }) +} + +//post +exports.create = function create(req, res) { + const newComment = new CommentModel(req.body); + newComment.save((err, v) => { + res.json(v); + }); +} + +//put +exports.update = function update(req, res) { + let comment = comments.find(i => i._id == req.params.commentId); + comment.body = body.body; + res.json(comment) +} + +//delete +exports.remove = function remove(req, res) { + let comment = comments.find(i => i._id == req.params.commentId); + comment.isActive = false; + res.send("deleted") +} \ No newline at end of file diff --git a/controllers/contact.js b/controllers/contact.js new file mode 100644 index 0000000..d0535f2 --- /dev/null +++ b/controllers/contact.js @@ -0,0 +1,40 @@ +let ContactModel = require("../models/ContactModel") + +//get - return all vechicles +exports.list = function list(req, res) { + ContactModel.find(function (err, contacts){ + if (err) return console.error(err); + return res.json(contacts); + }) +} + +//get one vehicle by id +exports.show = function show(req, res) { + ContactModel.findById(req.params.contactId, function (err, contact){ + if (err) return console.error(err); + return res.json(contact); + }) +} + +//post +exports.create = function create(req, res) { + const newContact = new ContactModel(req.body); + newContact.save((err, v) => { + res.json(v); + }); +} + +//put +exports.update = function update(req, res) { + let contact = contacts.find(i => i._id == req.params.contactId); + contact.name = body.name; + res.json(contact) +} + +//delete +exports.remove = function remove(req, res) { + let contact = contacts.find(i => i._id == req.params.contactId); + contact.isActive = false; + res.send("deleted") +} + diff --git a/controllers/product.js b/controllers/product.js new file mode 100644 index 0000000..025d717 --- /dev/null +++ b/controllers/product.js @@ -0,0 +1,39 @@ +let ProductsModel = require("../models/ProductModel") + +//get - return all products +exports.list = function list(req, res) { + ProductModel.find(function (err, products){ + if (err) return console.error(err); + return res.json(products); + }) +} + +//get one product by id +exports.show = function show(req, res) { + ProductModel.findById(req.params.productId, function (err, vehicle){ + if (err) return console.error(err); + return res.json(product); + }) +} + +//post +exports.create = function create(req, res) { + const newProduct = new ProductModel(req.body); + newProduct.save((err, v) => { + res.json(v); + }); +} + +//put +exports.update = function update(req, res) { + let product = products.find(i => i._id == req.params.productId); + product.name = body.name; + res.json(product) +} + +//delete +exports.remove = function remove(req, res) { + let product = products.find(i => i._id == req.params.productId); + product.isActive = false; + res.send("deleted") +} \ No newline at end of file diff --git a/controllers/vehicle.js b/controllers/vehicle.js new file mode 100644 index 0000000..e3ea2ac --- /dev/null +++ b/controllers/vehicle.js @@ -0,0 +1,39 @@ +let VehicleModel = require("../models/VehicleModel") + +//get - return all vechicles +exports.list = function list(req, res) { + VehicleModel.find(function (err, vehicles){ + if (err) return console.error(err); + return res.json(vehicles); + }) +} + +//get one vehicle by id +exports.show = function show(req, res) { + VehicleModel.findById(req.params.vehicleId, function (err, vehicle){ + if (err) return console.error(err); + return res.json(vehicle); + }) +} + +//post +exports.create = function create(req, res) { + const newVehicle = new VehicleModel(req.body); + newVehicle.save((err, v) => { + res.json(v); + }); +} + +//put +exports.update = function update(req, res) { + let vehicle = vehicles.find(i => i._id == req.params.vehicleId); + vehicle.make = body.make; + res.json(vehicle); +} + +//delete +exports.remove = function remove(req, res) { + let vehicle = vehicles.find(i => i._id == req.params.vehicleId); + vehicle.isActive = false; + res.send("deleted"); +} diff --git a/index.js b/index.js index 3d47752..ce9eb63 100644 --- a/index.js +++ b/index.js @@ -1,20 +1,28 @@ let express = require("express"); -let comments = require("./comments"); -let products = require("./products"); -let vehicles = require("./vehicles"); -let contacts = require("./contacts"); +let bodyParser = require("body-parser"); + +let vehicleRoutes = require("./routes/vehicle"); +let productRoutes = require("./routes/product"); +let contactRoutes = require("./routes/contact"); +let commentRoutes = require("./routes/comment"); + +let app = express(); -const bodyParser = require("body-parser"); -const app = express(); app.use(bodyParser.json()); app.use(express.static("public")); -const thePort = 3001; +app.use(vehicleRoutes); +app.use(productRoutes); +app.use(contactRoutes); +app.use(commentRoutes); + +//const thePort = 3001; + +const mongoose = require('mongoose'); +mongoose.connect('mongodb://localhost:27017/advanced-express-practice', {useeNewUrlParser: true}); +const Vehicle = require("./models/VehicleModel.js"); +const Product = require("./models/ProductModel.js"); +const Comment = require("./models/CommentModel.js"); +const Contact = require("./models/ContactModel.js"); -app.listen(thePort, (err) => { - if (err) { - return console.log("Error", err); - } - console.log("Web server is now listening for messages on port",thePort); -}); diff --git a/models/CommentModel.js b/models/CommentModel.js new file mode 100644 index 0000000..9569f26 --- /dev/null +++ b/models/CommentModel.js @@ -0,0 +1,8 @@ +const mongoose = require('mongoose'); +var commentSchema = new mongoose.Schema({ + Body: String, +}); + +var Comment = mongoose.model('Comment', commentSchema); + +module.exports = Comment; \ No newline at end of file diff --git a/models/ContactModel.js b/models/ContactModel.js new file mode 100644 index 0000000..6f61d36 --- /dev/null +++ b/models/ContactModel.js @@ -0,0 +1,10 @@ +const mongoose = require('mongoose'); +var contactSchema = new mongoose.Schema({ + name: String, + occupation: String, + avatar: String +}); + +var Contact = mongoose.model('Contact', contactSchema); + +module.exports = Contact; \ No newline at end of file diff --git a/models/ProductModel.js b/models/ProductModel.js new file mode 100644 index 0000000..40b9fbe --- /dev/null +++ b/models/ProductModel.js @@ -0,0 +1,9 @@ +const mongoose = require('mongoose'); +var productSchema = new mongoose.Schema({ + name: String, + description: String, +}); + +var Product = mongoose.model('Product', productSchema); + +module.exports = Product; \ No newline at end of file diff --git a/models/VehicleModel.js b/models/VehicleModel.js new file mode 100644 index 0000000..21abef9 --- /dev/null +++ b/models/VehicleModel.js @@ -0,0 +1,10 @@ +const mongoose = require('mongoose'); +var vehicleSchema = new mongoose.Schema({ + year: String, + make: String, + model: String +}); + +var Vehicle = mongoose.model('Vehicle', vehicleSchema); + +module.exports = Vehicle \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index a533283..cfd83b1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,19 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "requires": { + "lodash": "^4.17.11" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, "body-parser": { "version": "1.18.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", @@ -35,6 +48,11 @@ "type-is": "~1.6.16" } }, + "bson": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.1.tgz", + "integrity": "sha512-jCGVYLoYMHDkOsbwJZBCqwMHyH4c+wzgI9hG7Z6SZJRXWr+x58pdIbm2i9a/jFGCkRJqRUr8eoI7lDWa0hTkxg==" + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -202,11 +220,27 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" }, + "kareem": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.0.tgz", + "integrity": "sha512-6hHxsp9e6zQU8nXsP+02HGWXwTkOEw6IROhF2ZA28cYbUk4eJ6QbtZvdqZOdD9YPKghG3apk5eOCvs+tLl3lRg==" + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, + "memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "optional": true + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -235,6 +269,85 @@ "mime-db": "~1.37.0" } }, + "mongodb": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.2.7.tgz", + "integrity": "sha512-2YdWrdf1PJgxcCrT1tWoL6nHuk6hCxhddAAaEh8QJL231ci4+P9FLyqopbTm2Z2sAU6mhCri+wd9r1hOcHdoMw==", + "requires": { + "mongodb-core": "3.2.7", + "safe-buffer": "^5.1.2" + } + }, + "mongodb-core": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-3.2.7.tgz", + "integrity": "sha512-WypKdLxFNPOH/Jy6i9z47IjG2wIldA54iDZBmHMINcgKOUcWJh8og+Wix76oGd7EyYkHJKssQ2FAOw5Su/n4XQ==", + "requires": { + "bson": "^1.1.1", + "require_optional": "^1.0.1", + "safe-buffer": "^5.1.2", + "saslprep": "^1.0.0" + } + }, + "mongoose": { + "version": "5.6.9", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.6.9.tgz", + "integrity": "sha512-NRW5UJSmwyJxK+MRHmq+dQKgZqMZCpW1aPkpBZESqrrgF2J15Flo/4K3RYkSSQY7oKhfbgqZTPo+J1snJ3hJ3w==", + "requires": { + "async": "2.6.2", + "bson": "~1.1.1", + "kareem": "2.3.0", + "mongodb": "3.2.7", + "mongodb-core": "3.2.7", + "mongoose-legacy-pluralize": "1.0.2", + "mpath": "0.6.0", + "mquery": "3.2.1", + "ms": "2.1.2", + "regexp-clone": "1.0.0", + "safe-buffer": "5.1.2", + "sift": "7.0.1", + "sliced": "1.0.1" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "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.6.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.6.0.tgz", + "integrity": "sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw==" + }, + "mquery": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.1.tgz", + "integrity": "sha512-kY/K8QToZWTTocm0U+r8rqcJCp5PRl6e8tPmoDs5OeSO3DInZE2rAL6AYH+V406JTo8305LdASOQcxRDqHojyw==", + "requires": { + "bluebird": "3.5.1", + "debug": "3.1.0", + "regexp-clone": "^1.0.0", + "safe-buffer": "5.1.2", + "sliced": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -293,6 +406,25 @@ "unpipe": "1.0.0" } }, + "regexp-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", + "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" + }, + "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.1.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=" + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -303,6 +435,20 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "optional": true, + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -346,6 +492,25 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, + "sift": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz", + "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==" + }, + "sliced": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", + "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", + "optional": true, + "requires": { + "memory-pager": "^1.0.2" + } + }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", diff --git a/package.json b/package.json index d82072f..b475762 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "devDependencies": {}, "dependencies": { "body-parser": "*", - "express": "*" + "express": "*", + "mongoose": "^5.6.9" } } diff --git a/routes/comment.js b/routes/comment.js new file mode 100644 index 0000000..36762be --- /dev/null +++ b/routes/comment.js @@ -0,0 +1,12 @@ +const express = require("express"); +const router = express.Router(); +const {list, show, create} = require("./controllers/comment"); + +let comments = require("../comments"); + +//vehicles +router.get('/comments', list) +router.get('/comments/:commentId', show) +router.post('/comments', create) + +module.exports = router; \ No newline at end of file diff --git a/routes/contact.js b/routes/contact.js new file mode 100644 index 0000000..9fc615d --- /dev/null +++ b/routes/contact.js @@ -0,0 +1,12 @@ +const express = require("express"); +const router = express.Router(); +const {list, show, create} = require("./controllers/contact"); + +let contacts = require("../contacts"); + +//vehicles +router.get('/contacts', list) +router.get('/contacts/:contactId', show) +router.post('/contacts', create) + +module.exports = router; \ No newline at end of file diff --git a/routes/product.js b/routes/product.js new file mode 100644 index 0000000..7f6b6d3 --- /dev/null +++ b/routes/product.js @@ -0,0 +1,11 @@ +const express = require("express"); +const router = express.Router(); +const {list, show, create} = require("./controllers/product"); + +let products = require("../vehicles"); +//products +router.get('/products', list) +router.get('/products/:productId', show) +router.post('/products', create) + +module.exports = router; \ No newline at end of file diff --git a/routes/vehicle.js b/routes/vehicle.js new file mode 100644 index 0000000..75644e7 --- /dev/null +++ b/routes/vehicle.js @@ -0,0 +1,11 @@ +const express = require("express"); +const router = express.Router(); +const {list, show, create} = require("./controllers/vehicle"); + +let vehicles = require("../vehicles"); +//vehicles +router.get('/vehicles', list) +router.get('/vehicles/:vehicleId', show) +router.post('/vehicles', create) + +module.exports = router; \ No newline at end of file