Skip to content
Open

done #22

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,21 @@ const express = require('express');
// https://www.npmjs.com/package/hbs
const hbs = require('hbs');



const app = express();

// ℹ️ This function is getting exported from the config folder. It runs most middlewares
require('./config')(app);
app.get('/', (req, res) => {
res.render('index', { title: 'Homepage' });
});

app.get('/', (req, res) => {
res.render('list', { title: 'Homepage' });
});



// default value for title local
const projectName = 'lab-express-drones';
Expand All @@ -34,4 +45,12 @@ app.use('/', droneRoutes)
// ❗ To handle errors. Routes that don't exist or errors that you handle in specific routes
require('./error-handling')(app);

const mongoose = require("mongoose");







module.exports = app;
10 changes: 7 additions & 3 deletions db/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,17 @@ 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://127.0.0.1:27017/lab-express-drones";

mongoose
.connect(MONGO_URI)


mongoose.connect(MONGO_URI)
.then((x) => {
console.log(`Connected to Mongo! Database name: "${x.connections[0].name}"`);
})
.catch((err) => {
console.error("Error connecting to mongo: ", err);
});



16 changes: 15 additions & 1 deletion models/Drone.model.js
Original file line number Diff line number Diff line change
@@ -1 +1,15 @@
// Iteration #1
// Iteration #1
// models/Drone.model.js

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;
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"dotenv": "^8.2.0",
"express": "^4.17.1",
"hbs": "^4.1.1",
"mongoose": "^6.1.2",
"mongoose": "^6.12.6",
"morgan": "^1.10.0",
"serve-favicon": "^2.5.0"
},
Expand Down
106 changes: 103 additions & 3 deletions routes/drones.js
Original file line number Diff line number Diff line change
@@ -1,35 +1,135 @@

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',(req, res, next) => {
// Iteration #2: List the drones
// ... your code here

Drone.find()
.then(allTheDronesFromDB => {
// Render the list view and pass the drones data
console.log("Retrieved Drones from Database:",allTheDronesFromDB);
res.render('drones/list', { drones:allTheDronesFromDB});
})
.catch(error => {

console.error('Error retrieving drones:', error);

next(error);
});




// ... your code here
});

router.get('/drones/create', (req, res, next) => {
router.get('drones/create', (req, res, next) => {
// Iteration #3: Add a new drone
res.render('drones/create-form');


// ... your code here
});

router.post('/drones/create', (req, res, next) => {
// Iteration #3: Add a new drone
const { name,propellers,maxSpeed } = req.body;

// Create a new drone instance
const newDrone = new Drone({
name,
propellers,
maxSpeed
});


newDrone.save()
.then(() => {

res.redirect('/drones');
})
.catch(error => {
console.error('Error creating drone:', error);

res.render('drones/create-form', { errorMessage: 'Failed to create drone. Please try again.' });
});



// ... your code here
});

router.get('/drones/:id/edit', (req, res, next) => {
// Iteration #4: Update the drone
const droneId = req.params.id;
// Find the drone by id
Drone.findById(droneId)
.then(drone => {
if (!drone) {
res.status(404).render('not-found');
} else {
res.render('drones/update-form', { drone });
}
})
.catch(error => {
console.error('Error updating drone:', error);
next(error);
});



// ... your code here
});

router.post('/drones/:id/edit', (req, res, next) => {
// Iteration #4: Update the drone
router.post('/drones/:id/edit', (req, res, next) => {
const droneId = req.params.id;
const { name, propellers, maxSpeed } = req.body;

// Find the drone by id and update it
Drone.findByIdAndUpdate(droneId, { name, propellers, maxSpeed }, { new: true })
.then(updatedDrone => {
if (!updatedDrone) {
res.status(404).render('not-found');
} else {
res.redirect('/drones');
}
})
.catch(error => {
console.error('Error updating drone:', error);
res.render('drones/update-form', { errorMessage: 'Failed to update drone. Please try again.', drone: req.body });
});
});




// ... your code here
});

router.post('/drones/:id/delete', (req, res, next) => {
// Iteration #5: Delete the drone
const droneId = req.params.id;


Drone.findByIdAndDelete(droneId)
.then(() => {

res.redirect('/drones');
})
.catch(error => {
console.error('Error deleting drone:', error);

res.render('error');
});


// ... your code here
});

Expand Down
63 changes: 63 additions & 0 deletions seeds/drones.seed.js
Original file line number Diff line number Diff line change
@@ -1 +1,64 @@
// Iteration #1

const mongoose = require('mongoose');
const Drone = require('../models/Drone.model');

const MONGO_URI = process.env.MONGODB_URI || "mongodb://127.0.0.1:27017/lab-express-drones";


mongoose.connect(MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true,

})
.then(() => {
console.log('Connected to MongoDB.');




const drones = [
{ name: 'General Atomics MQ-9 Reaper', propellers: 4, maxSpeed: 18 },
{ name: 'DJI Phantom 4 Pro', propellers: 4, maxSpeed: 20 },
{ name: 'Parrot Anafi', propellers: 4, maxSpeed: 14 },
{ name: 'DJI Mavic Air 2', propellers: 4, maxSpeed: 19 },
{ name: 'Skydio 2', propellers: 6, maxSpeed: 18 },
{ name: 'Autel Robotics EVO', propellers: 4, maxSpeed: 20 },
{ name: 'Yuneec Typhoon H Pro', propellers: 6, maxSpeed: 13 },
{ name: 'PowerVision PowerEgg X', propellers: 4, maxSpeed: 16 },
{ name: 'Hubsan Zino Pro', propellers: 4, maxSpeed: 20 },
{ name: 'Holy Stone HS100', propellers: 4, maxSpeed: 10 },
{ name: 'Walkera Vitus', propellers: 4, maxSpeed: 16 },
{ name: 'Potensic D85', propellers: 4, maxSpeed: 18 },
{ name: 'JJRC X12', propellers: 4, maxSpeed: 20 },
{ name: 'Ryze Tello', propellers: 4, maxSpeed: 8 },
{ name: 'Altair Aerial Outlaw SE', propellers: 4, maxSpeed: 24 },
{ name: 'Contixo F22', propellers: 4, maxSpeed: 19 },
{ name: 'Force1 F100 Ghost', propellers: 4, maxSpeed: 25 },
{ name: 'Eachine E520', propellers: 4, maxSpeed: 18 },
{ name: 'MJX Bugs 2W', propellers: 4, maxSpeed: 25 },
{ name: 'Syma X5C', propellers: 4, maxSpeed: 7 },
{ name: 'Cheerwing Syma X5SW-V3', propellers: 4, maxSpeed: 7 },
{ name: 'UDI U818A HD', propellers: 4, maxSpeed: 10 },
{ name: 'Holy Stone HS200', propellers: 4, maxSpeed: 10 },
{ name: 'Helifar H816', propellers: 4, maxSpeed: 15 },
{ name: 'Drocon Bugs 3', propellers: 4, maxSpeed: 48 }
];


// Create drones in the database
Drone.create(drones)
.then(createdDrones => {
console.log(`${createdDrones.length} drones have been created.`);
})
.catch(error => {
console.error('Error creating drones:', error);
})
.finally(() => {
// Close the connection after seeding
mongoose.disconnect();
});
})
.catch(error => {
console.error('MongoDB connection error:', error);
});
15 changes: 14 additions & 1 deletion views/drones/create-form.hbs
Original file line number Diff line number Diff line change
@@ -1 +1,14 @@
<h2>Create a new drone</h2>
<h2>Create a new drone</h2>
<!-- Create the form for adding a new drone -->
<form action="./create-form.hbs" method="post">
<label for="name">Name:</label>
<input type="text" id="name" name="name" required><br><br>

<label for="propellers">Propellers:</label>
<input type="number" id="propellers" name="propellers" required><br><br>

<label for="maxSpeed">Max Speed:</label>
<input type="number" id="maxSpeed" name="maxSpeed" required><br><br>

<button type="submit">Submit</button>
</form>
21 changes: 20 additions & 1 deletion views/drones/list.hbs
Original file line number Diff line number Diff line change
@@ -1 +1,20 @@
<h2>Available drones</h2>
{{!--views/drones/list.hbs--}}
<h2>Available drones</h2>
<ul>
{{#each drones}}
<li>Name: {{this.name}}</li>
<li>Propellers: {{this.propellers}}</li>
<li>Max Speed: {{this.maxSpeed}}</li>
<a href="/drones/{{this._id}}/edit">Edit</a>
<br>
<li>
Name: {{this.name}}, Propellers: {{this.propellers}}, Max Speed: {{this.maxSpeed}}
<!-- Form for deleting the drone -->
<form action="/drones/{{this._id}}/delete" method="post">
<button type="submit">Delete</button>
</form>
</li>


{{/each}}
</ul>
15 changes: 14 additions & 1 deletion views/drones/update-form.hbs
Original file line number Diff line number Diff line change
@@ -1 +1,14 @@
<h2>Update the drone</h2>
<h2>Update the drone</h2>
<!-- Update form with pre-filled values -->
<form action="/drones/{{drone._id}}/edit" method="post">
<label for="name">Name:</label>
<input type="text" id="name" name="name" value="{{drone.name}}" required><br><br>

<label for="propellers">Propellers:</label>
<input type="number" id="propellers" name="propellers" value="{{drone.propellers}}" required><br><br>

<label for="maxSpeed">Max Speed:</label>
<input type="number" id="maxSpeed" name="maxSpeed" value="{{drone.maxSpeed}}" required><br><br>

<button type="submit">Update</button>
</form>
6 changes: 6 additions & 0 deletions views/index.hbs
Original file line number Diff line number Diff line change
@@ -1,2 +1,8 @@
<h1>{{title}}</h1>
<p>Welcome to {{title}}</p>
<ul>
<li><a href="./drones/list.hbs">List Drones</a></li>

</ul>


6 changes: 6 additions & 0 deletions views/layout.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,12 @@
</head>

<body>
<ul>
<li><a href="./drones/list.hbs">List Drones</a></li>
<li><a href="./drones/create-form.hbs">Create new drone</a></li>


</ul>

{{{body}}}

Expand Down