Skip to content

Commit 48493cc

Browse files
committed
Assignement 4 : Backend As a Service
1 parent fd64e2a commit 48493cc

File tree

3 files changed

+153
-2
lines changed

3 files changed

+153
-2
lines changed

Server-side Development with NodeJS, Express and MongoDB/conFusionServer/app.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ var dishRouter = require('./routes/dishRouter');
1919
var promoRouter = require('./routes/promoRouter');
2020
var leaderRouter = require('./routes/leaderRouter');
2121
const uploadRouter = require('./routes/uploadRouter');
22-
22+
const favoriteRouter = require('./routes/favoriteRouter')
2323

2424
// DB
2525
//const url = 'mongodb://localhost:27017/conFusion';
@@ -69,7 +69,7 @@ app.use('/dishes',dishRouter);
6969
app.use('/promos',promoRouter);
7070
app.use('/leaders',leaderRouter);
7171
app.use('/imageUpload',uploadRouter);
72-
72+
app.use('/favorites',favoriteRouter);
7373

7474
// catch 404 and forward to error handler
7575
app.use(function(req, res, next) {
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
const mongoose = require('mongoose');
2+
const Schema = mongoose.Schema;
3+
4+
var favoriteSchema = new Schema({
5+
user: {
6+
type: mongoose.Schema.Types.ObjectId,
7+
ref: 'User'
8+
},
9+
dishes: [{
10+
type: mongoose.Schema.Types.ObjectId,
11+
ref: 'Dish'
12+
}]
13+
}, {
14+
timestamps: true
15+
});
16+
17+
var Favorites = mongoose.model('Favorite', favoriteSchema);
18+
19+
module.exports = Favorites;
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
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

Comments
 (0)