diff --git a/models/Drone.model.js b/models/Drone.model.js index 93e3ea9..af60185 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: { type: String, required: true }, + propellers: { type: Number, required: true }, + maxSpeed: { type: Number, required: true } +}); + +const Drone = mongoose.model('Drone', droneSchema); + +module.exports = Drone; diff --git a/routes/drones.js b/routes/drones.js index 51da515..8f05ed9 100644 --- a/routes/drones.js +++ b/routes/drones.js @@ -1,36 +1,75 @@ const express = require('express'); const router = express.Router(); +const Drone = require('../models/Drone.model'); // require the Drone model here -router.get('/drones', (req, res, next) => { +router.get('/drones', async(req, res, next) => { // Iteration #2: List the drones // ... your code here + try { + const drones = await Drone.find(); + res.render('drones/list', { drones }); + } catch (error) { + console.error('Error fetching drones:', error); + res.status(500).send('Internal Server Error'); + } }); 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 + try { + const { name, propellers, maxSpeed } = req.body; + const newDrone = await Drone.create({ name, propellers, maxSpeed }); + res.redirect('/drones'); + } catch (error) { + console.error('Error creating new drone:', error); + res.render('drones/create-form', { errorMessage: 'Error creating new drone. Please try again.' }); + } }); -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 }); + } catch (error) { + console.error('Error fetching drone for update:', error); + res.status(404).send('Drone not found'); + } }); -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 + try { + const { name, propellers, maxSpeed } = req.body; + await Drone.findByIdAndUpdate(req.params.id, { name, propellers, maxSpeed }); + res.redirect('/drones'); + } catch (error) { + console.error('Error updating drone:', error); + res.render('drones/update-form', { errorMessage: 'Error updating drone. Please try again.' }); + } }); -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.error('Error deleting drone:', error); + res.status(500).send('Internal Server Error'); + } }); module.exports = router; diff --git a/seeds/drones.seed.js b/seeds/drones.seed.js index 4b29ecb..9fc3065 100644 --- a/seeds/drones.seed.js +++ b/seeds/drones.seed.js @@ -1 +1,26 @@ // Iteration #1 +const mongoose = require('mongoose'); +const Drone = require('../models/Drone.model'); + +const dronesData = [ + { 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:27017/lab-express-drones', { + useNewUrlParser: true, + useUnifiedTopology: true +}) +.then(() => { + return Drone.create(dronesData); +}) +.then(drones => { + console.log(`${drones.length} drones have been successfully created.`); +}) +.catch(error => { + console.error('Error seeding the database:', error); +}) +.finally(() => { + mongoose.disconnect(); +}); diff --git a/views/drones/create-form.hbs b/views/drones/create-form.hbs index 1a8197f..e99fa13 100644 --- a/views/drones/create-form.hbs +++ b/views/drones/create-form.hbs @@ -1 +1,18 @@ -
{{errorMessage}}
+{{/if}} \ No newline at end of file diff --git a/views/drones/list.hbs b/views/drones/list.hbs index a2830d3..9c2958c 100644 --- a/views/drones/list.hbs +++ b/views/drones/list.hbs @@ -1 +1,15 @@ -{{errorMessage}}
+{{/if}} \ No newline at end of file diff --git a/views/layout.hbs b/views/layout.hbs index 73199c1..ad9248b 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -1,19 +1,55 @@ + + + + +