From 3dc328ad3d28e04cf5a2e14f169dff15ac9895ba Mon Sep 17 00:00:00 2001 From: Gowtham Jangiti Date: Mon, 14 Oct 2024 19:48:33 +0530 Subject: [PATCH 1/2] Initial Setup --- app.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app.js b/app.js index a037764..2407c33 100644 --- a/app.js +++ b/app.js @@ -1,8 +1,4 @@ -// ℹ️ Gets access to environment variables/settings -// https://www.npmjs.com/package/dotenv require('dotenv/config'); - -// ℹ️ Connects to the database require('./db'); // Handles http requests (express is node js framework) From 8dccb51922d94d596ea68ad13b10d8ed58f61755 Mon Sep 17 00:00:00 2001 From: Gowtham Jangiti Date: Mon, 14 Oct 2024 19:57:38 +0530 Subject: [PATCH 2/2] Completed --- app.js | 17 ++++++++++++++++- models/Movie.model.js | 31 +++++++++++++++++++++++++++++++ package.json | 5 +++-- seeds/movies.seed.js | 24 +++++++++++++++++++++--- server.js | 3 ++- views/index.hbs | 20 ++++++++++++++++++-- views/movie-details.hbs | 20 ++++++++++++++++++++ views/movies.hbs | 21 +++++++++++++++++++++ 8 files changed, 132 insertions(+), 9 deletions(-) create mode 100644 models/Movie.model.js create mode 100644 views/movie-details.hbs create mode 100644 views/movies.hbs diff --git a/app.js b/app.js index 2407c33..d35260a 100644 --- a/app.js +++ b/app.js @@ -8,9 +8,13 @@ const express = require('express'); // Handles the handlebars // https://www.npmjs.com/package/hbs const hbs = require('hbs'); - +const exphbs = require('express-handlebars'); const app = express(); +// Set up Handlebars as the view engine +app.engine('hbs', exphbs({ extname: 'hbs' })); +app.set('view engine', 'hbs'); + // ℹ️ This function is getting exported from the config folder. It runs most middlewares require('./config')(app); @@ -26,5 +30,16 @@ app.use('/', index); // ❗ To handle errors. Routes that don't exist or errors that you handle in specific routes require('./error-handling')(app); +app.get('/movies', async (req, res) => { + try { + // Fetch movies from the database + const movies = await MovieModel.find(); + + res.render('movies', { title: 'Movies', movies }); + } catch (error) { + console.error('Error fetching movies:', error); + res.status(500).send('Internal Server Error'); + } + }); module.exports = app; diff --git a/models/Movie.model.js b/models/Movie.model.js new file mode 100644 index 0000000..4d473e5 --- /dev/null +++ b/models/Movie.model.js @@ -0,0 +1,31 @@ +const mongoose = require('mongoose'); + +const movieSchema = new mongoose.Schema({ + title: { + type: String, + required: true, + }, + director: { + type: String, + required: true, + }, + stars: { + type: [String], + required: true, + }, + image: { + type: String, + required: true, + }, + description: { + type: String, + required: true, + }, + showtimes: { + type: [String], + required: true, + }, +}); + +const Movie = mongoose.model('Movie', movieSchema); +module.exports = Movie; \ No newline at end of file diff --git a/package.json b/package.json index 8ff4bc0..65cf20f 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,10 @@ "dependencies": { "cookie-parser": "^1.4.5", "dotenv": "^8.2.0", - "express": "^4.17.1", + "express": "^4.18.2", + "express-handlebars": "^7.1.2", "hbs": "^4.1.1", - "mongoose": "^6.1.2", + "mongoose": "^6.12.5", "morgan": "^1.10.0", "serve-favicon": "^2.5.0" }, diff --git a/seeds/movies.seed.js b/seeds/movies.seed.js index 39e1359..6d1232c 100644 --- a/seeds/movies.seed.js +++ b/seeds/movies.seed.js @@ -1,3 +1,12 @@ +const mongoose = require('mongoose'); +const Movie = require('../models/Movie.model'); + +// Connect to your MongoDB database +mongoose.connect('mongodb://your-mongodb-connection-string', { + useNewUrlParser: true, + useUnifiedTopology: true, +}); + const movies = [ { title: "A Wrinkle in Time", @@ -83,7 +92,16 @@ const movies = [ // Add here the script that will be run to actually seed the database (feel free to refer to the previous lesson) +async function seedDatabase() { + try { + await Movie.deleteMany({}); + await Movie.insertMany(moviesData); + console.log('Database seeded successfully!'); + } catch (error) { + console.error('Error seeding database:', error); + } finally { + mongoose.connection.close(); + } +} - - -// ... your code here \ No newline at end of file +seedDatabase(); \ No newline at end of file diff --git a/server.js b/server.js index b815b16..39f7591 100644 --- a/server.js +++ b/server.js @@ -1,4 +1,5 @@ -const app = require("./app"); +const express = require('express'); +const app = express(); // ℹ️ Sets the PORT for our app to have access to it. If no env has been set, we hard code it to 3000 const PORT = process.env.PORT || 3000; diff --git a/views/index.hbs b/views/index.hbs index 1f308fd..cc55eac 100644 --- a/views/index.hbs +++ b/views/index.hbs @@ -1,2 +1,18 @@ -

{{title}}

-

Welcome to {{title}}

+ + + + + + {{title}} + + + +
+

Welcome to the {{title}}

+

Discover and explore a collection of amazing movies!

+ + + +
+ + \ No newline at end of file diff --git a/views/movie-details.hbs b/views/movie-details.hbs new file mode 100644 index 0000000..9d92ff4 --- /dev/null +++ b/views/movie-details.hbs @@ -0,0 +1,20 @@ + + + + + + {{movie.title}} + + + +

{{movie.title}}

+ {{movie.title}} +

Director: {{movie.director}}

+

Stars: {{movie.stars.join(', ')}}

+

Showtimes: {{movie.showtimes.join(', ')}}

+

{{movie.description}}

+ + + Back to Movies + + \ No newline at end of file diff --git a/views/movies.hbs b/views/movies.hbs new file mode 100644 index 0000000..9adab84 --- /dev/null +++ b/views/movies.hbs @@ -0,0 +1,21 @@ + + + + + + {{title}} + + + +

All Movies

+ + + \ No newline at end of file