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
+ } )
0 commit comments