Skip to content

Commit 811bb4c

Browse files
committed
Assignment 2: Express & MongoDB
1 parent 519a7bf commit 811bb4c

File tree

7 files changed

+206
-44
lines changed

7 files changed

+206
-44
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ app.use(express.static(path.join(__dirname, 'public')));
2525
app.use('/', indexRouter);
2626
app.use('/users', usersRouter);
2727
app.use('/dishes',dishRouter);
28-
app.use('/promotions',promoRouter);
28+
app.use('/promos',promoRouter);
2929
app.use('/leaders',leaderRouter);
3030
const mongoose = require('mongoose');
3131

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

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
const mongoose = require('mongoose');
22
const Schema = mongoose.Schema;
3+
require('mongoose-currency').loadType(mongoose);
4+
const Currency = mongoose.Types.Currency;
35

46
var commentSchema = new Schema({
57
rating: {
@@ -20,7 +22,7 @@ var commentSchema = new Schema({
2022
timestamps: true
2123
});
2224

23-
var dishSchema = new Schema({
25+
const dishSchema = new Schema({
2426
name: {
2527
type: String,
2628
required: true,
@@ -30,6 +32,27 @@ var dishSchema = new Schema({
3032
type: String,
3133
required: true
3234
},
35+
image: {
36+
type: String,
37+
required: true
38+
},
39+
category: {
40+
type: String,
41+
required: true
42+
},
43+
label: {
44+
type: String,
45+
default: ''
46+
},
47+
price: {
48+
type: Currency,
49+
required: true,
50+
min: 0
51+
},
52+
featured: {
53+
type: Boolean,
54+
default:false
55+
},
3356
comments:[commentSchema]
3457
}, {
3558
timestamps: true
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
const mongoose = require('mongoose');
2+
const Schema = mongoose.Schema;
3+
4+
const leaderSchema = new Schema({
5+
name: {
6+
type: String,
7+
required: true,
8+
unique: true
9+
},
10+
image: {
11+
type: String,
12+
required: true
13+
},
14+
designation: {
15+
type: String,
16+
required: true
17+
},
18+
abbr: {
19+
type: String,
20+
default: ''
21+
},
22+
description: {
23+
type: String,
24+
required: true
25+
},
26+
featured: {
27+
type: Boolean,
28+
default:false
29+
}
30+
}, {
31+
timestamps: true
32+
});
33+
34+
35+
var Leaders = mongoose.model('Leader', leaderSchema);
36+
37+
module.exports = Leaders;
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
const mongoose = require('mongoose');
2+
const Schema = mongoose.Schema;
3+
require('mongoose-currency').loadType(mongoose);
4+
const Currency = mongoose.Types.Currency;
5+
6+
const promoSchema = new Schema({
7+
name: {
8+
type: String,
9+
required: true,
10+
unique: true
11+
},
12+
description: {
13+
type: String,
14+
required: true
15+
},
16+
image: {
17+
type: String,
18+
required: true
19+
},
20+
label: {
21+
type: String,
22+
default: ''
23+
},
24+
price: {
25+
type: Currency,
26+
required: true,
27+
min: 0
28+
},
29+
featured: {
30+
type: Boolean,
31+
default:false
32+
}
33+
}, {
34+
timestamps: true
35+
});
36+
37+
38+
var Promos = mongoose.model('Promo', promoSchema);
39+
40+
module.exports = Promos;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const express = require('express');
22
const bodyParser = require('body-parser');
3-
const mongoose = require('mongoose');
3+
44

55
const Dishes = require('../models/dishes');
66

Lines changed: 51 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,80 @@
11
const express = require('express');
22
const bodyParser = require('body-parser');
3+
4+
5+
const Leaders = require('../models/Leaders');
36

47
const leaderRouter = express.Router();
8+
59
leaderRouter.use(bodyParser.json());
610

711
leaderRouter.route('/')
8-
.all((req,res,next) => {
9-
res.statusCode = 200;
10-
res.setHeader('Content-Type', 'text/plain');
11-
next();
12-
})
1312
.get((req,res,next) => {
14-
res.end('Will send all the leaders to you!');
13+
Leaders.find({})
14+
.then((Leaders) => {
15+
res.statusCode = 200;
16+
res.setHeader('Content-Type', 'application/json');
17+
res.json(Leaders);
18+
}, (err) => next(err))
19+
.catch((err) => next(err));
1520
})
1621
.post((req, res, next) => {
17-
res.end('Will add the leader: ' + req.body.name + ' with details: ' + req.body.description);
22+
Leaders.create(req.body)
23+
.then((leader) => {
24+
console.log('leader Created ', leader);
25+
res.statusCode = 200;
26+
res.setHeader('Content-Type', 'application/json');
27+
res.json(leader.name);
28+
}, (err) => next(err))
29+
.catch((err) => next(err));
1830
})
1931
.put((req, res, next) => {
2032
res.statusCode = 403;
21-
res.end('PUT operation not supported on /leaders');
33+
res.end('PUT operation not supported on /Leaders');
2234
})
2335
.delete((req, res, next) => {
24-
res.end('Deleting all leaders');
36+
Leaders.remove({})
37+
.then((resp) => {
38+
res.statusCode = 200;
39+
res.setHeader('Content-Type', 'application/json');
40+
res.json(resp);
41+
}, (err) => next(err))
42+
.catch((err) => next(err));
2543
});
2644

2745
leaderRouter.route('/:leaderId')
28-
.all((req,res,next) => {
29-
res.statusCode = 200;
30-
res.setHeader('Content-Type', 'text/plain');
31-
next();
32-
})
3346
.get((req,res,next) => {
34-
res.end('Will send details of the leader: ' + req.params.leaderId +' to you!');
47+
Leaders.findById(req.params.leaderId)
48+
.then((leader) => {
49+
res.statusCode = 200;
50+
res.setHeader('Content-Type', 'application/json');
51+
res.json(leader);
52+
}, (err) => next(err))
53+
.catch((err) => next(err));
3554
})
3655
.post((req, res, next) => {
3756
res.statusCode = 403;
38-
res.end('POST operation not supported on /leaders/' + req.params.leaderId);
57+
res.end('POST operation not supported on /Leaders/'+ req.params.leaderId);
3958
})
4059
.put((req, res, next) => {
41-
42-
res.write('Updating the leader: ' + req.params.leaderId +"\n");
43-
res.end('Will update the leader: ' + req.body.name + ' with details: ' + req.body.description);
60+
Leaders.findByIdAndUpdate(req.params.leaderId, {
61+
$set: req.body
62+
}, { new: true })
63+
.then((leader) => {
64+
res.statusCode = 200;
65+
res.setHeader('Content-Type', 'application/json');
66+
res.json(leader);
67+
}, (err) => next(err))
68+
.catch((err) => next(err));
4469
})
4570
.delete((req, res, next) => {
46-
res.end('Deleting leader: ' + req.params.leaderId);
71+
Leaders.findByIdAndRemove(req.params.leaderId)
72+
.then((resp) => {
73+
res.statusCode = 200;
74+
res.setHeader('Content-Type', 'application/json');
75+
res.json(resp);
76+
}, (err) => next(err))
77+
.catch((err) => next(err));
4778
});
4879

4980
module.exports = leaderRouter;
Lines changed: 52 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,80 @@
11
const express = require('express');
22
const bodyParser = require('body-parser');
3+
4+
5+
const Promos = require('../models/Promos');
36

47
const promoRouter = express.Router();
8+
59
promoRouter.use(bodyParser.json());
610

711
promoRouter.route('/')
8-
.all((req,res,next) => {
9-
res.statusCode = 200;
10-
res.setHeader('Content-Type', 'text/plain');
11-
next();
12-
})
1312
.get((req,res,next) => {
14-
res.end('Will send all the promotions to you!');
13+
Promos.find({})
14+
.then((Promos) => {
15+
res.statusCode = 200;
16+
res.setHeader('Content-Type', 'application/json');
17+
res.json(Promos);
18+
}, (err) => next(err))
19+
.catch((err) => next(err));
1520
})
1621
.post((req, res, next) => {
17-
res.end('Will add the promotion: ' + req.body.name + ' with details: ' + req.body.description);
22+
Promos.create(req.body)
23+
.then((promo) => {
24+
console.log('promo Created ', promo);
25+
res.statusCode = 200;
26+
res.setHeader('Content-Type', 'application/json');
27+
res.json(promo.name);
28+
}, (err) => next(err))
29+
.catch((err) => next(err));
1830
})
1931
.put((req, res, next) => {
2032
res.statusCode = 403;
21-
res.end('PUT operation not supported on /promotions');
33+
res.end('PUT operation not supported on /Promos');
2234
})
2335
.delete((req, res, next) => {
24-
res.end('Deleting all promotions');
36+
Promos.remove({})
37+
.then((resp) => {
38+
res.statusCode = 200;
39+
res.setHeader('Content-Type', 'application/json');
40+
res.json(resp);
41+
}, (err) => next(err))
42+
.catch((err) => next(err));
2543
});
2644

2745
promoRouter.route('/:promoId')
28-
.all((req,res,next) => {
29-
res.statusCode = 200;
30-
res.setHeader('Content-Type', 'text/plain');
31-
next();
32-
})
3346
.get((req,res,next) => {
34-
res.end('Will send details of the promotion: ' + req.params.promoId +' to you!');
47+
Promos.findById(req.params.promoId)
48+
.then((promo) => {
49+
res.statusCode = 200;
50+
res.setHeader('Content-Type', 'application/json');
51+
res.json(promo);
52+
}, (err) => next(err))
53+
.catch((err) => next(err));
3554
})
3655
.post((req, res, next) => {
3756
res.statusCode = 403;
38-
res.end('POST operation not supported on /promotions/' + req.params.promoId);
57+
res.end('POST operation not supported on /Promos/'+ req.params.promoId);
3958
})
4059
.put((req, res, next) => {
41-
42-
res.write('Updating the promotion: ' + req.params.promoId +"\n");
43-
res.end('Will update the promotion: ' + req.body.name + ' with details: ' + req.body.description);
60+
Promos.findByIdAndUpdate(req.params.promoId, {
61+
$set: req.body
62+
}, { new: true })
63+
.then((promo) => {
64+
res.statusCode = 200;
65+
res.setHeader('Content-Type', 'application/json');
66+
res.json(promo);
67+
}, (err) => next(err))
68+
.catch((err) => next(err));
4469
})
4570
.delete((req, res, next) => {
46-
res.end('Deleting promotion: ' + req.params.promoId);
71+
Promos.findByIdAndRemove(req.params.promoId)
72+
.then((resp) => {
73+
res.statusCode = 200;
74+
res.setHeader('Content-Type', 'application/json');
75+
res.json(resp);
76+
}, (err) => next(err))
77+
.catch((err) => next(err));
4778
});
4879

49-
module.exports = promoRouter;
80+
module.exports = promoRouter;

0 commit comments

Comments
 (0)