Skip to content

Commit 5546344

Browse files
author
Maximilian Schwarzmüller
committed
added mongoose logic + responses to orders
1 parent d4b18b5 commit 5546344

File tree

2 files changed

+112
-21
lines changed

2 files changed

+112
-21
lines changed

api/models/order.js

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

api/routes/orders.js

+103-21
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,118 @@
1-
const express = require('express');
1+
const express = require("express");
22
const router = express.Router();
3+
const mongoose = require("mongoose");
4+
5+
const Order = require("../models/order");
6+
const Product = require("../models/product");
37

48
// Handle incoming GET requests to /orders
5-
router.get('/', (req, res, next) => {
6-
res.status(200).json({
7-
message: 'Orders were fetched'
9+
router.get("/", (req, res, next) => {
10+
Order.find()
11+
.select("product quantity _id")
12+
.exec()
13+
.then(docs => {
14+
res.status(200).json({
15+
count: docs.length,
16+
orders: docs.map(doc => {
17+
return {
18+
_id: doc._id,
19+
product: doc.product,
20+
quantity: doc.quantity,
21+
request: {
22+
type: "GET",
23+
url: "http://localhost:3000/orders/" + doc._id
24+
}
25+
};
26+
})
27+
});
28+
})
29+
.catch(err => {
30+
res.status(500).json({
31+
error: err
32+
});
833
});
934
});
1035

11-
router.post('/', (req, res, next) => {
12-
const order = {
13-
productId: req.body.productId,
14-
quantity: req.body.quantity
15-
};
16-
res.status(201).json({
17-
message: 'Order was created',
18-
order: order
36+
router.post("/", (req, res, next) => {
37+
Product.findById(req.body.productId)
38+
.then(product => {
39+
if (!product) {
40+
return res.status(404).json({
41+
message: "Product not found"
42+
});
43+
}
44+
const order = new Order({
45+
_id: mongoose.Types.ObjectId(),
46+
quantity: req.body.quantity,
47+
product: req.body.productId
48+
});
49+
return order.save();
50+
})
51+
.then(result => {
52+
console.log(result);
53+
res.status(201).json({
54+
message: "Order stored",
55+
createdOrder: {
56+
_id: result._id,
57+
product: result.product,
58+
quantity: result.quantity
59+
},
60+
request: {
61+
type: "GET",
62+
url: "http://localhost:3000/orders/" + result._id
63+
}
64+
});
65+
})
66+
.catch(err => {
67+
console.log(err);
68+
res.status(500).json({
69+
error: err
70+
});
1971
});
2072
});
2173

22-
router.get('/:orderId', (req, res, next) => {
23-
res.status(200).json({
24-
message: 'Order details',
25-
orderId: req.params.orderId
74+
router.get("/:orderId", (req, res, next) => {
75+
Order.findById(req.params.orderId)
76+
.exec()
77+
.then(order => {
78+
if (!order) {
79+
return res.status(404).json({
80+
message: "Order not found"
81+
});
82+
}
83+
res.status(200).json({
84+
order: order,
85+
request: {
86+
type: "GET",
87+
url: "http://localhost:3000/orders"
88+
}
89+
});
90+
})
91+
.catch(err => {
92+
res.status(500).json({
93+
error: err
94+
});
2695
});
2796
});
2897

29-
router.delete('/:orderId', (req, res, next) => {
30-
res.status(200).json({
31-
message: 'Order deleted',
32-
orderId: req.params.orderId
98+
router.delete("/:orderId", (req, res, next) => {
99+
Order.remove({ _id: req.params.orderId })
100+
.exec()
101+
.then(result => {
102+
res.status(200).json({
103+
message: "Order deleted",
104+
request: {
105+
type: "POST",
106+
url: "http://localhost:3000/orders",
107+
body: { productId: "ID", quantity: "Number" }
108+
}
109+
});
110+
})
111+
.catch(err => {
112+
res.status(500).json({
113+
error: err
114+
});
33115
});
34116
});
35117

36-
module.exports = router;
118+
module.exports = router;

0 commit comments

Comments
 (0)