diff --git a/models/Drone.model.js b/models/Drone.model.js index 93e3ea9..088ea99 100644 --- a/models/Drone.model.js +++ b/models/Drone.model.js @@ -1 +1,12 @@ -// Iteration #1 \ No newline at end of file +// Iteration #1 + +const mongoose = require("mongoose"); + +const droneSchema = new mongoose.Schema({ + name: String, + propellers: Number, + maxSpeed: Number +}); + +const Drone = mongoose.model("Drone", droneSchema); +module.exports = Drone; diff --git a/routes/drones.js b/routes/drones.js index 51da515..d6ca400 100644 --- a/routes/drones.js +++ b/routes/drones.js @@ -2,35 +2,57 @@ const express = require('express'); const router = express.Router(); // require the Drone model here - -router.get('/drones', (req, res, next) => { - // Iteration #2: List the drones - // ... your code here +router.get("/drones", async (req, res) => { + try { + const drones = await Drone.find(); + res.render("drones/list", { drones }); + } catch (err) { + console.log("Error fetching drones:", err); + } }); router.get('/drones/create', (req, res, next) => { - // Iteration #3: Add a new drone - // ... your code here + res.render("drones/create-form"); }); -router.post('/drones/create', (req, res, next) => { - // Iteration #3: Add a new drone - // ... your code here +router.post("/drones/create", async (req, res) => { + try { + await Drone.create(req.body); + res.redirect("/drones"); + } catch (err) { + res.render("drones/create-form"); + } }); -router.get('/drones/:id/edit', (req, res, next) => { - // Iteration #4: Update the drone - // ... your code here + +router.get("/drones/:id/edit", async (req, res) => { + try { + const drone = await Drone.findById(req.params.id); + res.render("drones/update-form", { drone }); + } catch (err) { + console.log("Error fetching drone for edit:", err); + } }); -router.post('/drones/:id/edit', (req, res, next) => { - // Iteration #4: Update the drone - // ... your code here + +router.post("/drones/:id/edit", async (req, res) => { + try { + await Drone.findByIdAndUpdate(req.params.id, req.body); + res.redirect("/drones"); + } catch (err) { + res.render("drones/update-form", { drone: req.body }); + } }); -router.post('/drones/:id/delete', (req, res, next) => { - // Iteration #5: Delete the drone - // ... your code here + +router.post("/drones/:id/delete", async (req, res) => { + try { + await Drone.findByIdAndDelete(req.params.id); + res.redirect("/drones"); + } catch (err) { + console.log("Error deleting drone:", err); + } }); + module.exports = router; diff --git a/seeds/drones.seed.js b/seeds/drones.seed.js index 4b29ecb..f8c91af 100644 --- a/seeds/drones.seed.js +++ b/seeds/drones.seed.js @@ -1 +1,18 @@ // Iteration #1 +const mongoose = require("mongoose"); +const Drone = require("../models/Drone.model"); +const MONGO_URI = "mongodb://127.0.0.1:27017/lab-express-drones"; + +const drones = [ + { name: "Creeper XL 500", propellers: 3, maxSpeed: 12 }, + { name: "Racer 57", propellers: 4, maxSpeed: 20 }, + { name: "Courier 3000i", propellers: 6, maxSpeed: 18 } +]; + +mongoose.connect(MONGO_URI) + .then(() => Drone.create(drones)) + .then(dronesFromDB => { + console.log(`Created ${dronesFromDB.length} drones`); + return mongoose.connection.close(); + }) + .catch(err => console.log(`Error seeding drones: ${err}`)); diff --git a/views/drones/create-form.hbs b/views/drones/create-form.hbs index 1a8197f..7272af6 100644 --- a/views/drones/create-form.hbs +++ b/views/drones/create-form.hbs @@ -1 +1,8 @@ -
{{this.name}} - Propellers: {{this.propellers}} - Max Speed: {{this.maxSpeed}} m/s
+ Edit + +{{/each}} diff --git a/views/drones/update-form.hbs b/views/drones/update-form.hbs index 0a27dc3..4da2e7b 100644 --- a/views/drones/update-form.hbs +++ b/views/drones/update-form.hbs @@ -1 +1,8 @@ -