From 5492508ca201a514f1e17858d57b3f5778dc8597 Mon Sep 17 00:00:00 2001 From: premkumardev909 Date: Wed, 4 Dec 2024 07:16:28 +0000 Subject: [PATCH] done --- db/index.js | 2 +- models/Drone.model.js | 14 +++++- public/stylesheets/style.css | 97 ++++++++++++++++++++++++++++++++++-- routes/drones.js | 65 ++++++++++++++++-------- seeds/drones.seed.js | 23 ++++++++- views/drones/create-form.hbs | 14 +++++- views/drones/list.hbs | 18 ++++++- views/drones/update-form.hbs | 14 +++++- 8 files changed, 218 insertions(+), 29 deletions(-) diff --git a/db/index.js b/db/index.js index 873910d..b5fdf42 100644 --- a/db/index.js +++ b/db/index.js @@ -5,7 +5,7 @@ const mongoose = require("mongoose"); // ℹ️ Sets the MongoDB URI for our app to have access to it. // If no env has been set, we dynamically set it to whatever the folder name was upon the creation of the app -const MONGO_URI = process.env.MONGODB_URI || "mongodb://localhost/lab-express-drones"; +const MONGO_URI = process.env.MONGODB_URI || "mongodb://localhost/drone-collection"; mongoose .connect(MONGO_URI) diff --git a/models/Drone.model.js b/models/Drone.model.js index 93e3ea9..a208dc1 100644 --- a/models/Drone.model.js +++ b/models/Drone.model.js @@ -1 +1,13 @@ -// Iteration #1 \ No newline at end of file +// Iteration #1 +const mongoose = require('mongoose'); +const { Schema, model } = mongoose; + +const droneSchema = new Schema({ + name: { type: String, required: true }, + propellers: { type: Number, required: true }, + maxSpeed: { type: Number, required: true } +}); + +const Drone = model('Drone', droneSchema); + +module.exports = Drone; diff --git a/public/stylesheets/style.css b/public/stylesheets/style.css index 05a1470..0f9bd0f 100644 --- a/public/stylesheets/style.css +++ b/public/stylesheets/style.css @@ -1,8 +1,99 @@ +/* General styles */ body { - padding: 50px; - font: 14px 'Lucida Grande', Helvetica, Arial, sans-serif; + font-family: Arial, sans-serif; + margin: 0; + padding: 0; + background-color: #f9f9f9; + color: #333; } +h1 { + text-align: center; + margin: 20px 0; + color: #444; +} + +/* Navigation link */ a { - color: #00b7ff; + color: #007bff; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +/* Drone list */ +ul { + list-style-type: none; + padding: 0; +} + +li { + background-color: #fff; + margin: 10px auto; + padding: 15px; + border: 1px solid #ddd; + border-radius: 5px; + max-width: 600px; + display: flex; + justify-content: space-between; + align-items: center; +} + +/* Buttons */ +button { + background-color: #dc3545; + color: white; + border: none; + padding: 8px 12px; + border-radius: 3px; + cursor: pointer; +} + +button:hover { + background-color: #c82333; +} + +form { + display: inline; +} + +/* Forms */ +form label { + display: block; + margin-bottom: 5px; + font-weight: bold; +} + +form input { + width: 100%; + padding: 8px; + margin-bottom: 10px; + border: 1px solid #ccc; + border-radius: 5px; +} + +form button { + background-color: #28a745; + color: white; + padding: 10px 15px; + border: none; + border-radius: 3px; + cursor: pointer; +} + +form button:hover { + background-color: #218838; +} + +/* Centered form */ +form { + max-width: 400px; + margin: 0 auto; +} + +/* Container */ +.container { + padding: 20px; } diff --git a/routes/drones.js b/routes/drones.js index 51da515..c052283 100644 --- a/routes/drones.js +++ b/routes/drones.js @@ -1,36 +1,61 @@ 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 +const Drone = require('../models/Drone.model'); +// GET /drones - List all drones +router.get('/drones', async (req, res, next) => { + try { + const drones = await Drone.find(); + res.render('drones/list', { drones }); + } catch (err) { + console.error('Error fetching drones:', err); + next(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, next) => { + try { + const { name, propellers, maxSpeed } = req.body; + await Drone.create({ name, propellers, maxSpeed }); + res.redirect('/drones'); + } catch (err) { + console.error('Error creating drone:', err); + res.render('drones/create-form', { error: 'Failed to create drone' }); + } }); -router.get('/drones/:id/edit', (req, res, next) => { - // Iteration #4: Update the drone - // ... your code here +router.get('/drones/:id/edit', async (req, res, next) => { + try { + const drone = await Drone.findById(req.params.id); + res.render('drones/update-form', { drone }); + } catch (err) { + console.error('Error fetching drone for edit:', err); + next(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, next) => { + try { + const { name, propellers, maxSpeed } = req.body; + await Drone.findByIdAndUpdate(req.params.id, { name, propellers, maxSpeed }); + res.redirect('/drones'); + } catch (err) { + console.error('Error updating drone:', err); + res.render('drones/update-form', { error: 'Failed to update drone' }); + } }); -router.post('/drones/:id/delete', (req, res, next) => { - // Iteration #5: Delete the drone - // ... your code here +router.post('/drones/:id/delete', async (req, res, next) => { + try { + await Drone.findByIdAndDelete(req.params.id); + res.redirect('/drones'); + } catch (err) { + console.error('Error deleting drone:', err); + next(err); + } }); module.exports = router; diff --git a/seeds/drones.seed.js b/seeds/drones.seed.js index 4b29ecb..56043bf 100644 --- a/seeds/drones.seed.js +++ b/seeds/drones.seed.js @@ -1 +1,22 @@ -// Iteration #1 +const mongoose = require('mongoose'); +const Drone = require('../models/Drone.model'); // Import the 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://127.0.0.1:27017/droneApp') // Connect to your MongoDB + .then(() => { + console.log('Connected to the database'); + return Drone.create(drones); // Seed the drones into the database + }) + .then((createdDrones) => { + console.log(`Seeded ${createdDrones.length} drones.`); + return mongoose.connection.close(); // Close the connection + }) + .catch((err) => { + console.error('Error seeding drones:', err); + }); diff --git a/views/drones/create-form.hbs b/views/drones/create-form.hbs index 1a8197f..e8385bf 100644 --- a/views/drones/create-form.hbs +++ b/views/drones/create-form.hbs @@ -1 +1,13 @@ -

Create a new drone

\ No newline at end of file +

Create a new drone

+
+ + + + + + + + + + +
diff --git a/views/drones/list.hbs b/views/drones/list.hbs index a2830d3..2197511 100644 --- a/views/drones/list.hbs +++ b/views/drones/list.hbs @@ -1 +1,17 @@ -

Available drones

\ No newline at end of file +

Available Drones

+ +Add a new drone + + diff --git a/views/drones/update-form.hbs b/views/drones/update-form.hbs index 0a27dc3..c17bab0 100644 --- a/views/drones/update-form.hbs +++ b/views/drones/update-form.hbs @@ -1 +1,13 @@ -

Update the drone

\ No newline at end of file +

Update the drone

+
+ + + + + + + + + + +