1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
/**
* Server side code using the express framework running on a Node.js server.
*
* Load the express framework and create an app.
*/
const express = require('express');
const app = express();
const dbUtils = require('./mongodbFunctions.js');
/**
* Import the dummy attractions in the database
*
*/
dbUtils.clearMainDataBaseAndInsertDummyForTestingTheSite();
/**
* Host all files in the client folder as static resources.
* That means: localhost:8080/someFileName.js corresponds to client/someFileName.js.
*/
app.use(express.static('client'));
/**
* Allow express to understand json serialization.
*/
app.use(express.json());
/**
* A route is like a method call. It has a name, some parameters and some return value.
*
* Name: /api/attractions
* Parameters: the request as made by the browser
* Return value: the list of attractions defined above as JSON
*
* In addition to this, it has a HTTP method: GET, POST, PUT, DELETE
*
* Whenever we make a request to our server,
* the Express framework will call one of the methods defined here.
* These are just regular functions. You can edit, expand or rewrite the code here as needed.
*/
// main.js
app.get("/api/attractions", async function (request, response) {
console.log("Api call received for /attractions");
const attractions = await dbUtils.connectToDatabaseAndDo(
(db) => {return db.collection("attractions").find().toArray()}
);
response.json(attractions);
});
app.post("/api/placeorder", async function (request, response) {
console.log("Api call received for /placeorder");
var orders = request.body;
for (let i = 0; i < orders.length; i++) {
orders[i] = dbUtils.giveUnique_idField(orders[i]);
const order = orders[i];
await dbUtils.connectToDatabaseAndDo(
db => {
const attractions = db.collection("attractions");
const attraction = attractions.findOne({name: order.name});
const currentOrders = attraction.orders;
if (!currentOrders) {
attractions.updateOne(
{name: order.name},
{
$set: {orders: [order._id]}
}
)
} else {
attractions.updateOne(
{name: order.name},
{
$set: {orders: currentOrders.push(order._id)}
}
)
}
}
);
}
await dbUtils.connectToDatabaseAndDo(db => {return db.collection("orders").insertMany(orders)});
response.sendStatus(200);
});
app.get("/api/myorders", function (request, response) {
console.log("Api call received for /myorders");
response.sendStatus(200);
});
app.get("/api/admin/edit", function (request, response) {
console.log("Api call received for /admin/edit");
response.sendStatus(200);
});
/**
* Make our webserver available on port 8000.
* Visit localhost:8000 in any browser to see your site!
*/
app.listen(8000, () => console.log('Example app listening on port 8000!'));
|