diff --git a/models/Drone.model.js b/models/Drone.model.js index 93e3ea9..53c16b2 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 Schema = mongoose.Schema; + +const droneSchema = new 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..44c2ca0 100644 --- a/routes/drones.js +++ b/routes/drones.js @@ -2,35 +2,76 @@ const express = require('express'); const router = express.Router(); // require the Drone model here +const Drone = require('../models/Drone.model'); -router.get('/drones', (req, res, next) => { +router.get('/drones', async (req, res, next) => { // Iteration #2: List the drones + try { + const drones = await Drone.find(); + res.render('drones/list', { drones }); // Make sure your list.hbs file exists and is set up correctly. + } catch (error) { + console.log("Error while fetching drones:", error); + next(error); + } // ... your code here }); 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) => { +router.post('/drones/create', async (req, res, next) => { // Iteration #3: Add a new drone // ... your code here + const { name, propellers, maxSpeed } = req.body; + try { + await Drone.create({ name, propellers, maxSpeed }); + res.redirect('/drones'); + } catch (error) { + console.log("Error while creating new drone:", error); + res.render('drones/create-form'); + } + }); -router.get('/drones/:id/edit', (req, res, next) => { +router.get('/drones/:id/edit', async (req, res, next) => { // Iteration #4: Update the drone // ... your code here + try { + const drone = await Drone.findById(req.params.id); + res.render('drones/update-form', { drone }); // Ensure update-form.hbs pre-fills the form fields with the drone's data. + } catch (error) { + console.log("Error while fetching drone details for edit:", error); + next(error); + } }); -router.post('/drones/:id/edit', (req, res, next) => { +router.post('/drones/:id/edit', async (req, res, next) => { // Iteration #4: Update the drone // ... your code here + const { name, propellers, maxSpeed } = req.body; + try { + await Drone.findByIdAndUpdate(req.params.id, { name, propellers, maxSpeed }); + res.redirect('/drones'); + } catch (error) { + console.log("Error while updating drone:", error); + res.render('drones/update-form', { drone: req.body }); + } }); -router.post('/drones/:id/delete', (req, res, next) => { +router.post('/drones/:id/delete',async (req, res, next) => { // Iteration #5: Delete the drone // ... your code here + try { + await Drone.findByIdAndDelete(req.params.id); + res.redirect('/drones'); + } catch (error) { + console.log("Error while deleting drone:", error); + next(error); + } }); module.exports = router; diff --git a/seeds/drones.seed.js b/seeds/drones.seed.js index 4b29ecb..e763d3f 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 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('mongodb://localhost/droneDB', { useNewUrlParser: true, useUnifiedTopology: true }) + .then(() => Drone.create(drones)) + .then((createdDrones) => { + console.log(`Created ${createdDrones.length} drones`); + mongoose.connection.close(); + }) + .catch((err) => console.error('Error creating drones:', err));