Skip to content
Open

done #33

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
92 changes: 68 additions & 24 deletions app.js
Original file line number Diff line number Diff line change
@@ -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;