diff --git a/app.js b/app.js index a037764..ee0fb9d 100644 --- a/app.js +++ b/app.js @@ -1,34 +1,78 @@ -// ℹ️ Gets access to environment variables/settings -// https://www.npmjs.com/package/dotenv -require('dotenv/config'); +const express = require("express"); +const mongoose = require("mongoose"); +const hbs = require("hbs"); +const app = express(); -// ℹ️ Connects to the database -require('./db'); +// Set up view engine +app.set("view engine", "hbs"); +app.set("views", __dirname + "/views"); -// Handles http requests (express is node js framework) -// https://www.npmjs.com/package/express -const express = require('express'); +// Mongoose Model +const movieSchema = new mongoose.Schema({ + title: String, + director: String, + stars: [String], + image: String, + description: String, + showtimes: [String] +}); -// Handles the handlebars -// https://www.npmjs.com/package/hbs -const hbs = require('hbs'); +const Movie = mongoose.model("Movie", movieSchema); -const app = express(); +// Connect to MongoDB +mongoose + .connect("mongodb://localhost:27017/moviesDB", { useNewUrlParser: true, useUnifiedTopology: true }) + .then(() => console.log("Connected to the database")) + .catch((err) => console.error("Error connecting to the database", err)); + +// Home Route (Index Page) +app.get("/", (req, res) => { + res.render("index"); +}); -// ℹ️ This function is getting exported from the config folder. It runs most middlewares -require('./config')(app); +// Movies List Route +app.get("/movies", (req, res) => { + Movie.find() + .then((movies) => { + res.render("movies", { movies }); + }) + .catch((err) => console.log("Error fetching movies:", err)); +}); -// default value for title local -const projectName = 'lab-express-cinema'; -const capitalized = string => string[0].toUpperCase() + string.slice(1).toLowerCase(); +// Movie Details Route +app.get("/movie/:id", (req, res) => { + Movie.findById(req.params.id) + .then((movie) => { + res.render("movie-details", { movie }); + }) + .catch((err) => console.log("Error fetching movie details:", err)); +}); -app.locals.title = `${capitalized(projectName)}- Generated with Ironlauncher`; +// Seed Route +app.get("/seed", (req, res) => { + const movies = [ + { + title: "Red Sparrow", + director: "Francis Lawrence", + stars: ["Jennifer Lawrence", "Joel Edgerton", "Matthias Schoenaerts"], + image: "https://images-na.ssl-images-amazon.com/images/M/MV5BMTA3MDkxOTc4NDdeQTJeQWpwZ15BbWU4MDAxNzgyNTQz._V1_UX182_CR0,0,182,268_AL_.jpg", + description: "Ballerina Dominika Egorova is recruited to 'Sparrow School,' a Russian intelligence service where she is forced to use her body as a weapon. Her first mission, targeting a C.I.A. agent, threatens to unravel the security of both nations.", + showtimes: ["13:00", "15:30", "18:00", "20:10", "22:40"] + }, + // Add more movies as needed... + ]; -// 👇 Start handling routes here -const index = require('./routes/index'); -app.use('/', index); + Movie.insertMany(movies) + .then(() => { + res.send("Movies have been seeded!"); + }) + .catch((err) => { + res.send("Error seeding movies: " + err); + }); +}); -// ❗ To handle errors. Routes that don't exist or errors that you handle in specific routes -require('./error-handling')(app); +// Start the server +app.listen(3000, () => { + console.log("Server running on port 3000"); +}); -module.exports = app;