Skip to content

Commit 169396e

Browse files
committed
Added project
0 parents  commit 169396e

21 files changed

+1400
-0
lines changed

app.js

+104
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
const express = require('express');
2+
const path = require('path');
3+
const mongoose = require('mongoose');
4+
const ejsMate = require('ejs-mate')
5+
const methodOverride = require('method-override')
6+
const Movie = require('./models/movie')
7+
const Review = require('./models/review');
8+
9+
const dbUrl ='mongodb+srv://admin:46vQQPkwcdfaSXL@cluster0.iv83p.mongodb.net/cluster0?retryWrites=true&w=majority'
10+
11+
mongoose.connect(dbUrl, {
12+
useNewUrlParser: true,
13+
useCreateIndex: true,
14+
useUnifiedTopology: true
15+
});
16+
17+
// mongoose.connect('mongodb://localhost:27017/movie-db', {
18+
// useNewUrlParser: true,
19+
// useCreateIndex: true,
20+
// useUnifiedTopology: true
21+
// });
22+
23+
const db = mongoose.connection;
24+
db.on("error", console.error.bind(console, "connection error:"));
25+
db.once("open", () => {
26+
console.log("Database connected");
27+
});
28+
29+
const app = express();
30+
31+
app.engine('ejs', ejsMate)
32+
app.set('view engine', 'ejs');
33+
app.set('views', path.join(__dirname, 'views'));
34+
35+
app.use(express.urlencoded({extended: true}));
36+
app.use(methodOverride('_method'));
37+
app.use(express.static(path.join(__dirname, 'public')))
38+
39+
app.get('/' , async (req, res) => {
40+
res.render('home');
41+
})
42+
43+
app.get('/movies/new', (req, res) => {
44+
res.render('movies/new');
45+
})
46+
47+
app.post('/movies', async (req, res) => {
48+
const movie = new Movie(req.body.movie);
49+
await movie.save();
50+
res.redirect(`/movies/${movie._id}`);
51+
})
52+
53+
app.get('/movies/:id', async (req, res) => {
54+
const movie = await Movie.findById(req.params.id).populate('reviews');
55+
res.render('movies/show', { movie })
56+
})
57+
58+
app.get('/movies/:id/edit', async (req, res) => {
59+
const movie = await Movie.findById(req.params.id);
60+
res.render('movies/edit', { movie });
61+
})
62+
63+
app.put('/movies/:id', async(req, res) => {
64+
const { id } = req.params;
65+
const movie = await Movie.findByIdAndUpdate(id,{ ... req.body.movie})
66+
res.redirect(`/movies/${movie._id}`);
67+
})
68+
69+
app.get('/allmovies', async (req, res) => {
70+
const movies = await Movie.find({});
71+
res.render('movies/index', {movies});
72+
})
73+
74+
app.post('/movies/:id/reviews', (async(req, res) => {
75+
const movie = await Movie.findById(req.params.id)
76+
const review = new Review(req.body.review);
77+
movie.reviews.push(review)
78+
await review.save()
79+
await movie.save()
80+
res.redirect(`/movies/${movie._id}`);
81+
}))
82+
83+
app.delete('/movies/:id', async(req, res) => {
84+
const {id} = req.params;
85+
await Movie.findByIdAndDelete(id)
86+
res.redirect('/allmovies');
87+
})
88+
89+
app.delete('/movies/:id/reviews/:reviewId', async(req, res) => {
90+
const { id, reviewId } = req.params
91+
await Movie.findByIdAndUpdate(id, { $pull: { reviews: reviewId}})
92+
await Review.findByIdAndDelete(reviewId)
93+
res.redirect(`/movies/${id}`);
94+
})
95+
96+
app.get('/*', (req, res) => {
97+
res.send('404 Error: Page Not Found')
98+
})
99+
100+
const port = process.env.PORT || 80
101+
// port 3000
102+
app.listen(port, () => {
103+
console.log('serving on port');
104+
})

models/.DS_Store

6 KB
Binary file not shown.

models/movie.js

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
const mongoose = require('mongoose');
2+
const Schema = mongoose.Schema;
3+
4+
const MovieSchema = new Schema({
5+
title: String,
6+
image: String,
7+
description: String,
8+
genre: String,
9+
date: Number,
10+
reviews: [{
11+
type: Schema.Types.ObjectId,
12+
ref: 'Review'
13+
}]
14+
});
15+
16+
module.exports = mongoose.model('Movie', MovieSchema)

models/review.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
const mongoose = require('mongoose');
2+
const Schema = mongoose.Schema;
3+
4+
const ReviewSchema = new Schema({
5+
body: String,
6+
rating: Number
7+
});
8+
9+
module.exports = mongoose.model('Review', ReviewSchema)

0 commit comments

Comments
 (0)