├── .gitignore ├── mongod ├── public └── stylesheets │ └── main.css ├── readme.md ├── views ├── landing.ejs ├── login.ejs ├── register.ejs ├── partials │ ├── footer.ejs │ └── header.ejs ├── comments │ ├── edit.ejs │ └── new.ejs └── assets │ ├── newAsset.ejs │ ├── edit.ejs │ ├── index.ejs │ └── show.ejs ├── models ├── comment.js ├── user.js └── asset.js ├── package.json ├── routes ├── index.js ├── assets.js └── comments.js ├── middleware └── index.js ├── index.js └── seeds.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /mongod: -------------------------------------------------------------------------------- 1 | mongod --nojournal 2 | -------------------------------------------------------------------------------- /public/stylesheets/main.css: -------------------------------------------------------------------------------- 1 | .delete-form { 2 | display: inline; 3 | } -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | RESTFUL ROUTES 2 | 3 | NAME URL VERB DESCRIPTION 4 | =============================================================== 5 | INDEX /assets GET Displays a list of all assets 6 | NEW /assets/new GET Displays form to make a new asset 7 | CREATE /assets POST Add a new asset to DB 8 | SHOW /assets/:id GET Shows info about one asset -------------------------------------------------------------------------------- /views/landing.ejs: -------------------------------------------------------------------------------- 1 | <%- include ("partials/header") %> 2 | 3 |

4 | CMMS Landing Page 5 |

6 | 7 |

8 | View the assets page 9 |

10 |

11 | Placeholder for customized dashboards. 12 |

13 | 17 | 18 | <%- include ("partials/footer") %> -------------------------------------------------------------------------------- /views/login.ejs: -------------------------------------------------------------------------------- 1 | <%- include ("partials/header") %> 2 | 3 |

4 | Login 5 |

6 | 7 |
8 | 9 | 10 | 11 |
12 | 13 | <%- include ("partials/footer") %> -------------------------------------------------------------------------------- /views/register.ejs: -------------------------------------------------------------------------------- 1 | <%- include ("partials/header") %> 2 |

3 | Sign Up! 4 |

5 | 6 |
7 | 8 | 9 | 12 |
13 | 14 | <%- include ("partials/footer") %> -------------------------------------------------------------------------------- /models/comment.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | 3 | //SHEMA Setup 4 | const commentSchema = new mongoose.Schema({ 5 | text: String, 6 | user: { 7 | id: { 8 | type: mongoose.Schema.Types.ObjectId, 9 | ref: "User" 10 | }, 11 | username: String 12 | }, 13 | created: {type: Date, default: Date.now} 14 | }); 15 | 16 | module.exports = mongoose.model("Comment", commentSchema); -------------------------------------------------------------------------------- /models/user.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'), 2 | passportLocalMongoose = require('passport-local-mongoose'); 3 | 4 | //SHEMA Setup 5 | const UserSchema = new mongoose.Schema({ 6 | username: String, 7 | password: String, 8 | created: {type: Date, default: Date.now} 9 | }); 10 | 11 | UserSchema.plugin(passportLocalMongoose); 12 | 13 | module.exports = mongoose.model('User', UserSchema); -------------------------------------------------------------------------------- /models/asset.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | 3 | //SHEMA Setup 4 | const assetSchema = new mongoose.Schema({ 5 | fc: String, 6 | img: String, 7 | description: String, 8 | user: { 9 | id: { 10 | type: mongoose.Schema.Types.ObjectId, 11 | ref: "User" 12 | }, 13 | username: String 14 | }, 15 | comments: [ 16 | { 17 | type: mongoose.Schema.Types.ObjectId, 18 | ref: "Comment" 19 | } 20 | ] 21 | }); 22 | 23 | module.exports = mongoose.model("Asset", assetSchema); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cmms", 3 | "version": "1.0.0", 4 | "description": "Web-based CMMS software", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "node index.js" 9 | }, 10 | "author": "Marc Burnie", 11 | "license": "ISC", 12 | "dependencies": { 13 | "body-parser": "^1.19.0", 14 | "connect-flash": "^0.1.1", 15 | "ejs": "^3.1.3", 16 | "express": "^4.17.1", 17 | "express-session": "^1.17.1", 18 | "method-override": "^3.0.0", 19 | "mongoose": "^5.9.16", 20 | "passport": "^0.4.1", 21 | "passport-local": "^1.0.0", 22 | "passport-local-mongoose": "^6.0.1" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /views/partials/footer.ejs: -------------------------------------------------------------------------------- 1 |

2 | Footer goes here 3 |

4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /views/comments/edit.ejs: -------------------------------------------------------------------------------- 1 | <%- include ("../partials/header") %> 2 | 3 |
4 |
5 |

6 | Edit Comment 7 |

8 |
9 |
10 |
11 | 12 |
13 |
14 | 17 |
18 | Go Back 19 |
20 |
21 | 22 |
23 |
24 | 25 | 26 | <%- include ("../partials/footer") %> -------------------------------------------------------------------------------- /views/comments/new.ejs: -------------------------------------------------------------------------------- 1 | <%- include ("../partials/header") %> 2 | 3 |
4 |
5 |

6 | Add New Comment to <%= asset.fc %> 7 |

8 |
9 |
10 |
11 | 12 |
13 | 16 |
17 | 20 |
21 | Go Back 22 |
23 |
24 | 25 |
26 |
27 | 28 | 29 | <%- include ("../partials/footer") %> -------------------------------------------------------------------------------- /views/assets/newAsset.ejs: -------------------------------------------------------------------------------- 1 | <%- include ("../partials/header") %> 2 | 3 |
4 |
5 |

6 | Create a New Asset 7 |

8 |
9 |
10 |
11 | 12 |
13 |
14 | 15 |
16 |
17 | 18 |
19 |
20 | 23 |
24 | Go Back 25 |
26 |
27 | 28 |
29 |
30 | 31 | 32 | <%- include ("../partials/footer") %> -------------------------------------------------------------------------------- /views/assets/edit.ejs: -------------------------------------------------------------------------------- 1 | <%- include ("../partials/header") %> 2 | 3 |
4 |
5 |

6 | Edit <%= asset.fc %> 7 |

8 |
9 |
10 |
11 | 12 |
13 |
14 | 15 |
16 |
17 | 18 |
19 |
20 | 23 |
24 | Go Back 25 |
26 |
27 | 28 |
29 |
30 | 31 | <%- include ("../partials/footer") %> -------------------------------------------------------------------------------- /views/assets/index.ejs: -------------------------------------------------------------------------------- 1 | <%- include ("../partials/header") %> 2 | 3 |

4 | This is the assets page 5 |

6 | 7 | Create New Assset 8 | 9 |
10 | <% assets.forEach((asset)=>{ %> 11 |
12 |
13 | ... 14 |
15 |
<%= asset.fc %>
16 |

Some quick example text to build on the card title and make up the bulk of the card's content.

17 |
18 |
    19 |
  • Cras justo odio
  • 20 |
  • Dapibus ac facilisis in
  • 21 |
  • Vestibulum at eros
  • 22 |
23 |
24 | More info 25 |
26 |
27 |
28 | <% }) %> 29 | 30 |
31 | <%- include ("../partials/footer") %> -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"), 2 | router = express.Router(), 3 | passport = require("passport"), 4 | User = require("../models/user"); 5 | 6 | //LANDING PAGE 7 | router.get("/", (req, res)=>{ 8 | res.render("landing"); 9 | }) 10 | 11 | // ======================= 12 | // AUTHENTICATION ROUTES 13 | // ======================= 14 | 15 | //SHOW REGISTER FORM 16 | router.get("/register", (req, res) => { 17 | res.render("register") 18 | }); 19 | 20 | //handle sign-up logic 21 | router.post("/register", (req, res) => { 22 | User.register(new User({username: req.body.username}), req.body.password, (err, user) => { 23 | if (err) { 24 | req.flash("error", err.message); 25 | return res.render("register"); 26 | } 27 | passport.authenticate("local")(req, res, () => { 28 | req.flash("success", "Welcome " + user.username + "!"); 29 | res.redirect("/assets"); 30 | }); 31 | }); 32 | }); 33 | 34 | //show login form 35 | router.get("/login", (req, res) => { 36 | res.render("login"); 37 | }); 38 | 39 | // login route 40 | router.post("/login", passport.authenticate("local", 41 | { 42 | successRedirect: "/assets", 43 | failureRedirect: "/login" 44 | }), (req, res) => { 45 | }); 46 | 47 | // logout route 48 | router.get("/logout", (req, res) => { 49 | req.logout(); 50 | req.flash("success", "Logged out."); 51 | res.redirect("/assets"); 52 | }); 53 | 54 | module.exports = router; -------------------------------------------------------------------------------- /middleware/index.js: -------------------------------------------------------------------------------- 1 | const Asset = require("../models/asset"), 2 | Comment = require("../models/comment"); 3 | 4 | //======================================= 5 | // MIDDLEWARE 6 | //======================================= 7 | 8 | const middlewareObj = {}; 9 | 10 | //Authentication middleware 11 | middlewareObj.isLoggedIn = function (req, res, next) { 12 | if (req.isAuthenticated()) { 13 | return next(); 14 | } 15 | req.flash("error", "Please login first."); 16 | res.redirect("/login"); 17 | } 18 | 19 | //Authorization middleware for assets 20 | middlewareObj.isAuthorized = function (req, res, next) { 21 | //is user logged in? 22 | if (req.isAuthenticated()) { 23 | Asset.findById(req.params.id, (err, foundAsset) => { 24 | if (err || !foundAsset) { 25 | req.flash("error", "Asset not found."); 26 | res.redirect("back") 27 | } else { 28 | //does user own the asset? 29 | if (foundAsset.user.id.equals(req.user._id)) { 30 | next(); 31 | } else { 32 | //if not redirect 33 | req.flash("error", "User does not have required permission."); 34 | res.redirect("back"); 35 | } 36 | } 37 | }); 38 | } else { 39 | //otherwise redirect 40 | req.flash("error", "Please login first."); 41 | res.redirect("back"); 42 | } 43 | } 44 | 45 | //Authorization middleware for comments 46 | middlewareObj.isAuthorizedComment = function (req, res, next) { 47 | //is user logged in? 48 | if (req.isAuthenticated()) { 49 | Comment.findById(req.params.comment_id, (err, foundComment) => { 50 | if (err || !foundComment) { 51 | res.redirect("back") 52 | } else { 53 | //does user own the comment? 54 | if (foundComment.user.id.equals(req.user._id)) { 55 | next(); 56 | } else { 57 | //if not redirect 58 | req.flash("error", "User does not have required permission."); 59 | res.redirect("back"); 60 | } 61 | } 62 | }); 63 | } else { 64 | //otherwise redirect 65 | req.flash("error", "Please login first."); 66 | res.redirect("back"); 67 | } 68 | } 69 | 70 | module.exports = middlewareObj -------------------------------------------------------------------------------- /views/assets/show.ejs: -------------------------------------------------------------------------------- 1 | <%- include ("../partials/header") %> 2 | 3 |
4 |
5 |
6 |

7 | CMMS 8 |

9 |
10 |
  • Info 1
  • 11 |
  • Info 2
  • 12 |
  • Info 3
  • 13 |
    14 |
    15 |
    16 | 17 |
    18 |
    19 |

    20 | $9.00 21 |

    22 |

    23 | <%= asset.fc %> 24 |

    25 |

    26 | <%= asset.description %> 27 |

    28 |

    29 | Submitted By: <%= asset.user.username %> 30 |

    31 | <% if (currentUser && asset.user.id.equals(currentUser._id)) {%> 32 | Edit 33 |
    34 | 37 |
    38 | <% } %> 39 |
    40 |
    41 |
    42 |
    43 | Add New Comment 44 |
    45 | <% asset.comments.forEach( (comment) => { %> 46 |
    47 |
    48 | <%= comment.user.username %> 49 | <%= comment.created %> 50 |

    51 | <%= comment.text %> 52 |

    53 | 54 | <% if (currentUser && comment.user.id.equals(currentUser._id)) {%> 55 | Edit 56 |
    57 | 58 |
    59 | <% } %> 60 |
    61 |
    62 | <% }) %> 63 |
    64 |
    65 |
    66 |
    67 | 68 | <%- include ("../partials/footer") %> 69 | 70 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"), 2 | app = express(), 3 | bodyParser = require("body-parser"), 4 | mongoose = require("mongoose"), 5 | flash = require("connect-flash"), 6 | passport = require("passport"), 7 | LocalStrategy = require("passport-local"), 8 | methodOverride = require("method-override"), 9 | Asset = require("./models/asset"), 10 | Comment = require("./models/comment"), 11 | User = require("./models/user"), 12 | seedDB = require("./seeds"); 13 | 14 | // require routes 15 | const commentRoutes = require("./routes/comments"), 16 | assetRoutes = require("./routes/assets"), 17 | indexRoutes = require("./routes/index"); 18 | 19 | 20 | const url = process.env.DBURL || "mongodb://localhost:27017/CMMS" 21 | 22 | //Local database in Goorm 23 | // mongoose.connect("mongodb://localhost:27017/CMMS", {useNewUrlParser: true}); 24 | 25 | //Production database 26 | mongoose.connect(url, { 27 | useNewUrlParser: true, 28 | useCreateIndex: true 29 | }).then( () => { 30 | console.log("Successfully connected to DB") 31 | }).catch( (err) => { 32 | console.log('ERROR:', err.message); 33 | }); 34 | 35 | app.set("view engine", "ejs"); 36 | app.use(bodyParser.urlencoded({extended: true})); 37 | app.use(express.static(__dirname + "/public")) 38 | app.use(methodOverride("_method")); 39 | app.use(flash()); 40 | 41 | // seedDB(); //Seed the database 42 | 43 | //PASSPORT CONFIGURATION 44 | app.use(require("express-session")({ 45 | secret: "This is a secret for now", 46 | resave: false, 47 | saveUninitialized: false 48 | })); 49 | 50 | app.use(passport.initialize()); 51 | app.use(passport.session()); 52 | passport.use(new LocalStrategy(User.authenticate())); //authentication comes from passportLocalMongoose 53 | passport.serializeUser(User.serializeUser()); 54 | passport.deserializeUser(User.deserializeUser()); 55 | 56 | //middleware to pass user into each route 57 | app.use(function (req, res, next) { 58 | res.locals.currentUser = req.user; 59 | res.locals.error = req.flash("error"); 60 | res.locals.success = req.flash("success"); 61 | next(); 62 | }); 63 | 64 | app.use(indexRoutes); 65 | app.use("/assets", assetRoutes); 66 | app.use("/assets/:id/comments", commentRoutes); 67 | 68 | 69 | app.listen(process.env.PORT || 3000, ()=>{console.log("Server initialized")}); -------------------------------------------------------------------------------- /routes/assets.js: -------------------------------------------------------------------------------- 1 | const express = require("express"), 2 | router = express.Router(), 3 | Asset = require("../models/asset"), 4 | middleware = require("../middleware"); 5 | 6 | 7 | //======================================= 8 | // ASSET ROUTES 9 | //======================================= 10 | 11 | //INDEX ROUTE - show all assets 12 | router.get("/", (req, res)=>{ 13 | //Get all assets from DB 14 | Asset.find({}, function (err, allAssets){ 15 | if (err) { 16 | console.log(err); 17 | } else { 18 | res.render("assets/index", {assets:allAssets}); 19 | } 20 | }) 21 | }) 22 | 23 | //NEW - show form to create new asset 24 | router.get("/new", middleware.isLoggedIn, (req, res)=>{ 25 | res.render("assets/newAsset"); 26 | }) 27 | 28 | //CREATE - add new asset to DB 29 | router.post("/", middleware.isLoggedIn, (req, res)=>{ 30 | const user = { 31 | id: req.user._id, 32 | username: req.user.username 33 | }; 34 | //Create a new campground and save to DB 35 | Asset.create({fc: req.body.fc, img: req.body.img, description: req.body.description, user: user}, function (err, newlyCreated) { 36 | if (err) { 37 | req.flash("error", "Something went wrong"); 38 | console.log(err); 39 | } else { 40 | req.flash("success", "Asset successfully created."); 41 | res.redirect("/assets"); 42 | } 43 | }) 44 | }) 45 | 46 | //SHOW - shows info about one asset 47 | //Must be last GET otherwise:id will not work 48 | router.get("/:id", (req, res) => { 49 | //find the asset with the provided ID 50 | Asset.findById(req.params.id).populate("comments").exec((err, foundAsset) => { 51 | if (err || !foundAsset) { 52 | req.flash("error", "Asset not found."); 53 | res.redirect("back"); 54 | } else { 55 | //render show template with that asset 56 | res.render("assets/show", {asset: foundAsset}); 57 | } 58 | }); 59 | }); 60 | 61 | // EDIT ASSET ROUTE 62 | router.get("/:id/edit", middleware.isAuthorized, (req, res) => { 63 | Asset.findById(req.params.id, (err, foundAsset) => { 64 | res.render("assets/edit", {asset: foundAsset}); 65 | }); 66 | }); 67 | 68 | // UPDATE ASSET ROUTE 69 | router.put("/:id", middleware.isAuthorized, (req, res) => { 70 | //find and update the correct campground 71 | Asset.findByIdAndUpdate(req.params.id, req.body.asset, (err, updatedAsset) => { 72 | if (err || !updatedAsset) { 73 | req.flash("error", "Something went wrong."); 74 | res.redirect("/assets"); 75 | } else { 76 | //redirect to show page 77 | req.flash("success", "Asset successfully edited."); 78 | res.redirect("/assets/" + req.params.id) 79 | } 80 | }); 81 | }); 82 | 83 | // DESTROY CAMPGROUND ROUTE 84 | router.delete("/:id", middleware.isAuthorized, (req, res) => { 85 | Asset.findByIdAndRemove(req.params.id, (err) => { 86 | if (err) { 87 | req.flash("error", "Something went wrong."); 88 | res.redirect("/assets"); 89 | } else { 90 | req.flash("success", "Asset successfully deleted."); 91 | res.redirect("/assets"); 92 | } 93 | }); 94 | }); 95 | 96 | module.exports = router; -------------------------------------------------------------------------------- /views/partials/header.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | CMMS 9 | 10 |
    11 | 55 | 56 |
    57 | <% if (error && error.length > 0) { %> 58 | 61 | <% } %> 62 | <% if (success && success.length > 0) { %> 63 | 66 | <% } %> 67 |
    68 | 69 | -------------------------------------------------------------------------------- /routes/comments.js: -------------------------------------------------------------------------------- 1 | const express = require("express"), 2 | router = express.Router({mergeParams: true}), 3 | Asset = require("../models/asset"), 4 | Comment = require("../models/comment"), 5 | middleware = require("../middleware"); 6 | 7 | //======================================= 8 | // COMMENTS ROUTES 9 | //======================================= 10 | 11 | //Comments new 12 | router.get("/new", middleware.isLoggedIn, (req, res) => { 13 | // find asset by id 14 | Asset.findById(req.params.id, (err, asset) => { 15 | if (err || !asset) { 16 | req.flash("error", "No asset found."); 17 | } else { 18 | res.render("comments/new", {asset:asset}); 19 | } 20 | }) 21 | }) 22 | 23 | //Comments create 24 | router.post("/", middleware.isLoggedIn, (req, res) => { 25 | //lookup asset using ID 26 | Asset.findById(req.params.id, (err, asset) => { 27 | if (err || !asset) { 28 | req.flash("error", "No asset found."); 29 | res.redirect("/assets"); 30 | } else { 31 | //create new comments 32 | Comment.create(req.body.comment, (err, comment) => { 33 | if (err) { 34 | req.flash("error", "Something went wrong."); 35 | console.log(err); 36 | } else { 37 | //add username and id to comment 38 | comment.user.id = req.user._id; 39 | comment.user.username = req.user.username; 40 | //save comment 41 | comment.save(); 42 | //connect new comment asset 43 | asset.comments.push(comment); 44 | asset.save(); 45 | //redirect to asset show page 46 | req.flash("success", "Comment successfully created."); 47 | res.redirect('/assets/' + asset._id) 48 | } 49 | }); 50 | } 51 | }); 52 | }); 53 | 54 | //Comments edit 55 | router.get("/:comment_id/edit", middleware.isAuthorizedComment, (req, res) => { 56 | Asset.findById(req.params.id, (err, foundAsset) => { 57 | if (err || !foundAsset) { 58 | req.flash("error", "No asset found."); 59 | return res.redirect("back"); 60 | } 61 | Comment.findById(req.params.comment_id, (err, foundComment) => { 62 | if (err || !foundComment) { 63 | req.flash("error", "Could not find comment."); 64 | res.redirect("back"); 65 | } else { 66 | res.render("comments/edit", {asset_id: req.params.id, comment: foundComment}); 67 | } 68 | }); 69 | }); 70 | 71 | }); 72 | 73 | //Comments update 74 | router.put("/:comment_id", middleware.isAuthorizedComment, (req, res) => { 75 | Comment.findByIdAndUpdate(req.params.comment_id, req.body.comment, (err, updatedComment) => { 76 | if (err || !updatedComment) { 77 | req.flash("error", "Something went wrong."); 78 | res.redirect("back"); 79 | } else { 80 | req.flash("success", "Comment successfully edited."); 81 | res.redirect("/assets/" + req.params.id); 82 | } 83 | }); 84 | }); 85 | 86 | //Comments destroy route 87 | router.delete("/:comment_id", middleware.isAuthorizedComment, (req, res) => { 88 | //fid by id and remove 89 | Comment.findByIdAndRemove(req.params.comment_id, (err) => { 90 | if (err) { 91 | req.flash("error", "Something went wrong."); 92 | res.redirect("back"); 93 | } else { 94 | req.flash("success", "Comment successfully deleted."); 95 | res.redirect("/assets/" + req.params.id); 96 | } 97 | }); 98 | }); 99 | 100 | module.exports = router; -------------------------------------------------------------------------------- /seeds.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | const Asset = require("./models/asset"); 3 | const Comment = require("./models/comment"); 4 | 5 | const data = [ 6 | {fc: "electronics", img: "https://images.unsplash.com/photo-1563770660941-20978e870e26?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80", description: "placeholder value"}, 7 | {fc: "contraption", img: "https://images.unsplash.com/photo-1565246144709-9f3a5369c316?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=687&q=80", description: "placeholder value"}, 8 | {fc: "contrivance", img: "https://images.unsplash.com/photo-1544474650-6cf5bc3f9c0d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1322&q=80", description: "placeholder value"}, 9 | {fc: "instrument", img: "https://images.unsplash.com/photo-1563770660834-82b48f27ec9d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80", description: "placeholder value"}, 10 | {fc: "utensil", img: "https://images.unsplash.com/photo-1549105680-34522ef8b050?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=675&q=80", description: "placeholder value"}, 11 | {fc: "gadget", img: "https://images.unsplash.com/photo-1587320122541-ce3e46f6fe60?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=634&q=80", description: "placeholder value"}, 12 | {fc: "item", img: "https://images.unsplash.com/photo-1517420704952-d9f39e95b43e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80", description: "placeholder value"}, 13 | {fc: "device", img: "https://images.unsplash.com/photo-1504890001746-a9a68eda46e2?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1279&q=80", description: "placeholder value"}, 14 | {fc: "tool", img: "https://images.unsplash.com/photo-1525972231415-e52a7a56c905?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80", description: "placeholder value"}, 15 | {fc: "gizmo", img: "https://images.unsplash.com/photo-1485827404703-89b55fcc595e?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80", description: "placeholder value"}, 16 | {fc: "doodad", img: "https://images.unsplash.com/photo-1518314916381-77a37c2a49ae?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1351&q=80", description: "placeholder value"}, 17 | {fc: "doohickey", img: "https://images.unsplash.com/photo-1452875015199-95154554d9ff?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1347&q=80", description: "placeholder value"} 18 | ]; 19 | 20 | function seedDB () { 21 | //Remove all assets 22 | Asset.remove({}, function (err) { 23 | // if (err) { 24 | // console.log(err) 25 | // } 26 | // console.log("Removed all assets") 27 | // //add a few assets 28 | // data.forEach((seed) => { 29 | // Asset.create(seed, (err, asset) => { 30 | // if (err) console.log(err); 31 | // else { 32 | // console.log("Asset added"); 33 | // //create comment 34 | // Comment.create( 35 | // { 36 | // text: "Dead on arrival", 37 | // user: "Tom" 38 | // }, (err, comment) => { 39 | // if (err) console.log(err); 40 | // else { 41 | // asset.comments.push(comment); 42 | // asset.save(); 43 | // console.log("Created a new comment"); 44 | // } 45 | // } 46 | // ); 47 | // } 48 | // }); 49 | // }); 50 | }); 51 | 52 | } 53 | 54 | module.exports = seedDB; 55 | 56 | --------------------------------------------------------------------------------