Skip to content

Commit a8419dd

Browse files
author
zahidurrehman
committed
orders logic added
1 parent 812d71d commit a8419dd

File tree

9 files changed

+454
-55
lines changed

9 files changed

+454
-55
lines changed

api/routes/orders.js

Lines changed: 114 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,133 @@
11
const express = require('express');
22
const router = express.Router();
3+
const mongoose = require('mongoose');
4+
const Order = require('../../models/order');
5+
const Product = require('../../models/product');
36

47
router.get('/', (req, res, next) => {
5-
res.status(200).json({
6-
message: "Orders fetched"
8+
Order.find()
9+
.select('-__v')
10+
.populate('product', 'name')
11+
.exec()
12+
.then(docs => {
13+
res.status(200).json({
14+
count: docs.length,
15+
orders: docs.map(doc => {
16+
console.log(doc);
17+
return {
18+
_id: doc._id,
19+
product: doc.product,
20+
quantity: doc.quantity,
21+
request: {
22+
type: "GET",
23+
url: req.protocol + "://" + req.host + ":" + process.env.port + req.originalUrl + doc._id
24+
}
25+
}
26+
})
27+
});
28+
})
29+
.catch(err => {
30+
res.status(500).json({
31+
error: err
32+
});
733
});
34+
// Order.find((err,result) => {
35+
// if(err) {
36+
// res.status(500).json({
37+
// error: err
38+
// });
39+
// }
40+
// res.status(200).json({
41+
// message: result
42+
// });
43+
// });
844
});
945

1046
router.post('/', (req, res, next) => {
11-
const order = {
12-
productID: req.body.productID,
13-
quantity: req.body.quantity
14-
};
15-
res.status(201).json({
16-
message: "Orders created",
17-
order: order
47+
Product.findById(req.body.productID)
48+
.then(product => {
49+
if (!product) {
50+
return res.status(404).json({
51+
message: "Product not found"
52+
});
53+
}
54+
const order = new Order({
55+
_id: new mongoose.Types.ObjectId,
56+
quantity: req.body.quantity,
57+
product: req.body.productID
58+
});
59+
return order.save()
60+
61+
})
62+
.then((result , err) => {
63+
console.log(result);
64+
res.status(201).json({
65+
message: "Order created",
66+
orderDetails: {
67+
_id: result._id,
68+
product: result.product,
69+
quantity: result.quantity
70+
},
71+
request: {
72+
type: "GET",
73+
url: req.protocol + "://" + req.host + ":" + process.env.port + req.originalUrl + result._id
74+
}
75+
});
76+
})
77+
.catch(err => {
78+
console.log(err);
79+
res.status(500).json({
80+
error: err
81+
});
1882
});
83+
1984
});
2085

2186
router.get('/:orderID', (req, res, next) => {
22-
res.status(200).json({
23-
message: "Order details",
24-
orderID: req.params.orderID
87+
Order.findById(req.params.orderID)
88+
.select('-__v')
89+
.populate('product')
90+
.then(doc => {
91+
if (!doc) {
92+
return res.status(404).json({
93+
message: "Order doesn't exist"
94+
});
95+
}
96+
res.status(200).json({
97+
order: doc,
98+
request: {
99+
type: "GET",
100+
description: "Get all orders",
101+
url: req.protocol + "://" + req.host + ":" + process.env.port + req.baseUrl + "/"
102+
}
103+
});
104+
})
105+
.catch(err => {
106+
res.status(500).json({
107+
error: err
108+
});
25109
});
26110
});
27111

28112
router.delete('/:orderID', (req, res, next) => {
29-
res.status(200).json({
30-
message: "Order deleted",
31-
orderID: req.params.orderID
113+
Order.remove({_id: req.params.orderID})
114+
.then(result => {
115+
res.status(200).json({
116+
message: "Order deleted successfully",
117+
request: {
118+
type: "POST",
119+
url: req.protocol + "://" + req.host + ":" + process.env.port + req.baseUrl + "/",
120+
body: {
121+
product: "String",
122+
quantity: "Number"
123+
}
124+
}
125+
});
126+
})
127+
.catch(err => {
128+
res.status(500).json({
129+
error: err
130+
});
32131
});
33132
});
34133

api/routes/products.js

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,26 @@ const Product = require('../../models/product');
55

66
router.get('/', (req, res, next) => {
77
Product.find()
8+
.select('name price _id')
89
.exec()
910
.then(docs => {
10-
console.log(docs);
11-
res.status(200).json({docs});
11+
const response = {
12+
count: docs.length,
13+
products: docs.map( doc => {
14+
return {
15+
name: doc.name,
16+
price: doc.price,
17+
_id: doc._id,
18+
request: {
19+
type: "GET",
20+
url: req.protocol + "://" + req.host + ":" + process.env.port + req.originalUrl + doc._id
21+
}
22+
}
23+
})
24+
}
25+
res.status(200).json(response);
1226
})
1327
.catch(err => {
14-
console.log(err);
1528
res.status(500).json({
1629
error: err
1730
});
@@ -26,14 +39,20 @@ router.post('/', (req, res, next) => {
2639
});
2740
product.save()
2841
.then(result => {
29-
console.log(result);
3042
res.status(200).json({
31-
message: "Handling POST requests to /products",
32-
createdProduct: result
43+
message: "Product created successfully",
44+
createdProduct: {
45+
name: result.name,
46+
price: result.price,
47+
_id: result._id,
48+
request: {
49+
type: "GET",
50+
url: req.protocol + "://" + req.host + ":" + process.env.port + req.originalUrl + "/" + result._id
51+
}
52+
}
3353
});
3454
})
3555
.catch(err => {
36-
console.log(err);
3756
res.status(500).json({
3857
error: err
3958
});
@@ -44,18 +63,24 @@ router.post('/', (req, res, next) => {
4463
router.get('/:productID', (req, res, next) => {
4564
const id = req.params.productID;
4665
Product.findById(id)
66+
.select('-__v')
4767
.exec()
4868
.then(doc => {
49-
console.log(doc);
5069
if (doc) {
51-
res.status(200).json(doc);
70+
res.status(200).json({
71+
product: doc,
72+
request: {
73+
type: "GET",
74+
description: "Get all products",
75+
url: req.protocol + "://" + req.host + ":" + process.env.port + req.baseUrl + "/"
76+
}
77+
});
5278
} else {
5379
res.status(404).json({message: "No valid entry found for provided ID"});
5480
}
5581

5682
})
5783
.catch(err => {
58-
console.log(err);
5984
res.status(500).json({
6085
error: err
6186
});
@@ -72,8 +97,13 @@ router.patch('/:productID', (req, res, next) => {
7297
Product.update({ _id: id }, { $set: updateOps })
7398
.exec()
7499
.then(result => {
75-
console.log(result);
76-
res.status(200).json(result);
100+
res.status(200).json({
101+
message: "Product updated",
102+
request: {
103+
type: "GET",
104+
url: req.protocol + "://" + req.host + ":" + process.env.port + req.baseUrl + "/" + id
105+
}
106+
});
77107
})
78108
.catch(err => {
79109
console.log(err);
@@ -88,7 +118,17 @@ router.delete('/:productID', (req, res, next) => {
88118
Product.remove({_id: id})
89119
.exec()
90120
.then(result => {
91-
res.status(200).json(result);
121+
res.status(200).json({
122+
message: "Deleted successfully",
123+
request: {
124+
type: "POST",
125+
url: req.protocol + "://" + req.host + ":" + process.env.port + req.baseUrl + "/",
126+
body: {
127+
name: "String",
128+
price: "Number"
129+
}
130+
}
131+
});
92132
})
93133
.catch(err => {
94134
console.log(err);

app.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,26 @@ const mongoose = require('mongoose');
66
const productRoutes = require('./api/routes/products');
77
const orderRoutes = require('./api/routes/orders');
88

9-
mongoose.connect(
10-
'mongodb://node-api:' + process.env.MONG_PW +
9+
const connection = mongoose.connect(
10+
'mongodb://' + process.env.MONG_UN + ':' + process.env.MONG_PW +
1111
'@node-api-shard-00-00-8epfm.mongodb.net:27017, \
1212
node-api-shard-00-01-8epfm.mongodb.net:27017, \
1313
node-api-shard-00-02-8epfm.mongodb.net:27017/test?ssl=true&replicaSet=node-api-shard-0&authSource=admin&retryWrites=true&w=majority',
14-
{useNewUrlParser: true}
14+
{
15+
useNewUrlParser: true,
16+
// useUnifiedTopology: true
17+
}
1518
)
19+
// connection.then(res => {
20+
// console.log('Connected');
21+
// });
22+
// connection.catch(err => {
23+
// console.log('error zahid '+ err)
24+
// });
1625
mongoose.connection.on('connected', () => console.log('Connected'));
1726
mongoose.connection.on('error', (err) => console.log('Connection failed with - ',err));
18-
1927
app.use(morgan('dev'));
20-
2128
app.use(body.urlencoded({ extended: false }));
22-
2329
app.use(body.json({}));
2430

2531
app.use((req, res, next) => {

models/order.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const mongoose = require('mongoose');
2+
3+
const orderSchema = mongoose.Schema({
4+
_id: mongoose.Schema.Types.ObjectId,
5+
product: {
6+
type: mongoose.Schema.Types.ObjectId,
7+
ref: 'Product',
8+
required: true
9+
},
10+
quantity: { type: Number, default: 1 }
11+
});
12+
13+
module.exports = mongoose.model('Order', orderSchema);

models/product.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ const mongoose = require('mongoose');
22

33
const productSchema = mongoose.Schema({
44
_id: mongoose.Schema.Types.ObjectId,
5-
name: String,
6-
price: Number
5+
name: { type: String, required: true },
6+
price: { type: Number, required: true }
77
});
88

99
module.exports = mongoose.model('Product', productSchema);

nodemon.json

Lines changed: 0 additions & 5 deletions
This file was deleted.

0 commit comments

Comments
 (0)