forked from fdnd-task/pleasurable-ui
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathserver.js
210 lines (175 loc) · 6.75 KB
/
server.js
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
// Importeer het npm pakket express uit de node_modules map
import express from "express";
// Importeer de zelfgemaakte functie fetchJson uit de ./helpers map
import fetchJson from "./helpers/fetch-json.js";
// // Stel het basis endpoint in
const apiUrl = "https://fdnd-agency.directus.app/items/";
const apiFamily = apiUrl + "oba_family";
const apiProfile = apiUrl + "oba_profile";
const apiItem = apiUrl + "oba_item?fields=*,afbeelding.id,afbeelding.height,afbeelding.width";
// Maak een nieuwe express app aan
const app = express();
// Stel ejs in als template engine
app.set("view engine", "ejs");
// Stel de map met ejs templates in
app.set("views", "./views");
// Gebruik de map 'public' voor statische resources, zoals stylesheets, afbeeldingen en client-side JavaScript
app.use(express.static("public"));
// Zorg dat werken met request data makkelijker wordt
app.use(express.urlencoded({ extended: true }));
app.get('/', function (request, response) {
fetchJson(apiFamily).then((apiFamily) => {
response.render('index',{
// apiUser: apiUser.data
})
})
})
// Start express op, haal daarbij het zojuist ingestelde poortnummer op
app.listen(app.get('port'), function () {
// Toon een bericht in de console en geef het poortnummer door
console.log(`Application started on http://localhost:${app.get('port')}`)
})
// Route voor individuele overview pagina.
app.get('/user-overview/:id', function(request, response) {
const userId = request.params.id;
fetchJson(apiProfile + `/${userId}?fields=*,linked_item.oba_item_id.*`).then((userData) => {
response.render('user-overview', { data: userData.data });
});
});
// Route voor overview pagina voor de familie
app.get('/user-all', function(request, response) {
fetchJson(apiUrl + `/oba_profile?fields=id`).then((userData) => {
const ids = userData.data.map(item => item.id);
const users = [];
ids.forEach(id => {
users.push(fetchJson(apiProfile + `/${id}?fields=*,linked_item.oba_item_id.*`));
});
Promise.all(users)
.then(linkedItemsArray => {
linkedItemsArray.forEach(linkedItems => {
});
response.render('user-all', { data: linkedItemsArray });
})
})
});
app.get('/detail/:id', function(request, response){
// console.log(request.params)
const itemId = request.params.id;
// Haal de details op van het item met het opgegeven ID
fetchJson(apiUrl + '/oba_item/' + itemId).then((items) => {
// Render de detailpagina en geef de nodige data mee
response.render('detail', {
items: items.data,
id: itemId,
});
});
});
app.post('/detail/:id', function(request, response){
const itemId = request.params.id;
fetch(`${apiUrl}/oba_bookmarks/` , {
method: 'POST',
body: JSON.stringify({
item: request.params.id
}),
headers: {
'Content-Type': 'application/json; charset=UTF-8'
}
}).then((postResponse) => {
// Redirect naar de persoon pagina
if (request.body.enhanced) {
response.render('detail', {added:true});
} else {
response.redirect(303, '/detail/' + itemId + '?added=true')
}
})
});
// Stel het poortnummer in waar express op moet gaan luisteren
//Profile Page
app.get('/personal-page/:id', function (request, response) {
// Maak twee afzonderlijke fetch-aanroepen naar families en profiles
Promise.all([fetchJson(apiItems), fetchJson(apiProfile)])
.then(([apiItems, apiProfiles]) => {
// families en profiles bevatten de opgehaalde data van de API
// Je kunt hier de gewenste bewerkingen uitvoeren voordat je ze doorgeeft aan de view
// console.log(apiItems);
// console.log(apiProfiles);
// Render de chooseProfile view en geef de opgehaalde data mee
response.render('personal-page', {
apiItems: apiItems.data,
apiProfiles: apiProfiles.data
});
})
.catch((error) => {
// Behandel eventuele fouten die optreden tijdens het ophalen van de data
console.error('Error fetching data:', error);
// Stuur een foutbericht naar de client
response.status(500).send('Error fetching data');
});
});
app.get("/favorites", function (request, response) {
let leeslijstFetch = `${apiUrl}oba_bookmarks?fields=*.*`;
fetchJson(leeslijstFetch)
.then(({ data }) => {
return data.map((bookmark) => {
return bookmark.item;
});
})
.then((itemsOpLeeslijst) => {
if (itemsOpLeeslijst.length) {
const reversedItems = itemsOpLeeslijst.reverse();
response.render("favorites", {
items: reversedItems,
});
} else {
// Render lege staat (empty state)
response.render("favorites_empty");
}
});
});
app.post("/favorites/delete/:id", function (request, response) {
const itemId = request.params.id;
// Eerst ophalen van alle ID's die aan de filter voldoen
fetch(
`https://fdnd-agency.directus.app/items/oba_bookmarks?filter[item][_eq]=${itemId}&fields=id`
)
.then((response) => response.json())
.then((data) => {
// Verkrijg het ID van het eerste item (aannemend dat er slechts één item is)
const foundId = data.data[0].id;
// Verwijder het item met het gevonden ID
fetch(`https://fdnd-agency.directus.app/items/oba_bookmarks/${foundId}`, {
method: "DELETE",
headers: {
"Content-Type": "application/json; charset=UTF-8",
},
})
.then((deleteResponse) => {
if (request.body.favoriteclient) {
response.render("favorites", { added: true });
} else {
response.redirect(303, "/favorites");
}
})
.catch((error) => {
// Handel eventuele fouten af
console.error("Fout bij het verwijderen van het item:", error);
response
.status(500)
.send("Er is een fout opgetreden bij het verwijderen van het item");
});
})
.catch((error) => {
// Handel eventuele fouten af
console.error("Fout bij het ophalen van het ID:", error);
response
.status(500)
.send("Er is een fout opgetreden bij het ophalen van het ID");
});
});
// Stel het poortnummer in waar express op moet gaan luisteren
app.set("port", process.env.PORT || 8001);
// Start express op, haal daarbij het zojuist ingestelde poortnummer op
app.listen(app.get("port"), function () {
// Toon een bericht in de console en geef het poortnummer door
console.log(`Application started on http://localhost:${app.get("port")}`);
});