1
+ const express = require ( 'express' ) ;
2
+ const bodyParser = require ( 'body-parser' ) ;
3
+ const Favorites = require ( '../models/favorite' ) ;
4
+ var authenticate = require ( '../authenticate' ) ;
5
+ const cors = require ( './cors' ) ;
6
+
7
+ const favoriteRouter = express . Router ( ) ;
8
+ favoriteRouter . use ( bodyParser . json ( ) ) ;
9
+
10
+ favoriteRouter . route ( '/' )
11
+ . options ( cors . corsWithOptions , ( req , res ) => { res . sendStatus ( 200 ) ; } )
12
+ . get ( cors . corsWithOptions , authenticate . verifyUser , ( req , res , next ) => {
13
+ Favorites . find ( { } )
14
+ . populate ( 'user' )
15
+ . populate ( 'dishes' )
16
+ . then ( ( favorites ) => {
17
+ res . statusCode = 200 ;
18
+ res . setHeader ( 'Content-Type' , 'application/json' ) ;
19
+ res . json ( favorites ) ;
20
+ } , ( err ) => next ( err ) )
21
+ . catch ( ( err ) => next ( err ) ) ;
22
+ } )
23
+ . post ( cors . corsWithOptions , authenticate . verifyUser , ( req , res , next ) => {
24
+ Favorites . findOne ( { user : req . user . _id } )
25
+ . then ( ( favorite ) => {
26
+ if ( favorite ) {
27
+ for ( var i = 0 ; i < req . body . length ; i ++ ) {
28
+ if ( favorite . dishes . indexOf ( req . body [ i ] . _id ) === - 1 ) {
29
+ favorite . dishes . push ( req . body [ i ] . _id ) ;
30
+ }
31
+ }
32
+ favorite . save ( )
33
+ . then ( ( favorite ) => {
34
+ console . log ( 'Favorite Created ' , favorite ) ;
35
+ res . statusCode = 200 ;
36
+ res . setHeader ( 'Content-Type' , 'application/json' ) ;
37
+ res . json ( favorite ) ;
38
+ } , ( err ) => next ( err ) ) ;
39
+ }
40
+ else {
41
+ Favorites . create ( { "user" : req . user . _id , "dishes" : req . body } )
42
+ . then ( ( favorite ) => {
43
+ console . log ( 'Favorite Created ' , favorite ) ;
44
+ res . statusCode = 200 ;
45
+ res . setHeader ( 'Content-Type' , 'application/json' ) ;
46
+ res . json ( favorite ) ;
47
+ } , ( err ) => next ( err ) ) ;
48
+ }
49
+ } , ( err ) => next ( err ) )
50
+ . catch ( ( err ) => next ( err ) ) ;
51
+ } )
52
+ . put ( cors . corsWithOptions , authenticate . verifyUser , ( req , res , next ) => {
53
+ res . statusCode = 403 ;
54
+ res . end ( 'PUT operation not supported on /favorites' ) ;
55
+ } )
56
+ . delete ( cors . corsWithOptions , authenticate . verifyUser , ( req , res , next ) => {
57
+ Favorites . findOneAndRemove ( { "user" : req . user . _id } )
58
+ . then ( ( resp ) => {
59
+ res . statusCode = 200 ;
60
+ res . setHeader ( 'Content-Type' , 'application/json' ) ;
61
+ res . json ( resp ) ;
62
+ } , ( err ) => next ( err ) )
63
+ . catch ( ( err ) => next ( err ) ) ;
64
+ } ) ;
65
+
66
+ favoriteRouter . route ( '/:dishId' )
67
+ . options ( cors . corsWithOptions , ( req , res ) => { res . sendStatus ( 200 ) ; } )
68
+ . get ( cors . corsWithOptions , authenticate . verifyUser , ( req , res , next ) => {
69
+ res . statusCode = 403 ;
70
+ res . end ( 'GET operation not supported on /favorites/' + req . params . dishId ) ;
71
+ } )
72
+ . post ( cors . corsWithOptions , authenticate . verifyUser , ( req , res , next ) => {
73
+ Favorites . findOne ( { user : req . user . _id } )
74
+ . then ( ( favorite ) => {
75
+ if ( favorite ) {
76
+ if ( favorite . dishes . indexOf ( req . params . dishId ) === - 1 ) {
77
+ favorite . dishes . push ( req . params . dishId )
78
+ favorite . save ( )
79
+ . then ( ( favorite ) => {
80
+ console . log ( 'Favorite Created ' , favorite ) ;
81
+ res . statusCode = 200 ;
82
+ res . setHeader ( 'Content-Type' , 'application/json' ) ;
83
+ res . json ( favorite ) ;
84
+ } , ( err ) => next ( err ) )
85
+ }
86
+ }
87
+ else {
88
+ Favorites . create ( { "user" : req . user . _id , "dishes" : [ req . params . dishId ] } )
89
+ . then ( ( favorite ) => {
90
+ console . log ( 'Favorite Created ' , favorite ) ;
91
+ res . statusCode = 200 ;
92
+ res . setHeader ( 'Content-Type' , 'application/json' ) ;
93
+ res . json ( favorite ) ;
94
+ } , ( err ) => next ( err ) )
95
+ }
96
+ } , ( err ) => next ( err ) )
97
+ . catch ( ( err ) => next ( err ) ) ;
98
+ } )
99
+ . put ( cors . corsWithOptions , authenticate . verifyUser , ( req , res , next ) => {
100
+ res . statusCode = 403 ;
101
+ res . end ( 'PUT operation not supported on /favorites/' + req . params . dishId ) ;
102
+ } )
103
+ . delete ( cors . corsWithOptions , authenticate . verifyUser , ( req , res , next ) => {
104
+ Favorites . findOne ( { user : req . user . _id } )
105
+ . then ( ( favorite ) => {
106
+ if ( favorite ) {
107
+ index = favorite . dishes . indexOf ( req . params . dishId ) ;
108
+ if ( index >= 0 ) {
109
+ favorite . dishes . splice ( index , 1 ) ;
110
+ favorite . save ( )
111
+ . then ( ( favorite ) => {
112
+ console . log ( 'Favorite Deleted ' , favorite ) ;
113
+ res . statusCode = 200 ;
114
+ res . setHeader ( 'Content-Type' , 'application/json' ) ;
115
+ res . json ( favorite ) ;
116
+ } , ( err ) => next ( err ) ) ;
117
+ }
118
+ else {
119
+ err = new Error ( 'Dish ' + req . params . dishId + ' not found' ) ;
120
+ err . status = 404 ;
121
+ return next ( err ) ;
122
+ }
123
+ }
124
+ else {
125
+ err = new Error ( 'Favorites not found' ) ;
126
+ err . status = 404 ;
127
+ return next ( err ) ;
128
+ }
129
+ } , ( err ) => next ( err ) )
130
+ . catch ( ( err ) => next ( err ) ) ;
131
+ } ) ;
132
+ module . exports = favoriteRouter ;
0 commit comments