forked from fdnd-task/pleasurable-ui
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathserver.js
233 lines (196 loc) · 8.3 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
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
// Importeerd npm pakket express uit de node_modules map
import express from 'express'
// Importeerd de zelfgemaakte functie fetchJson uit de ./helpers map
import fetchJson from './helpers/fetch-json.js'
// variable voor de index route
const apiUrl = 'https://fdnd-agency.directus.app/items/'
const huizenHome = await fetchJson(apiUrl + 'f_houses')
const feedbackUrl = await fetchJson(apiUrl + 'f_feedback')
const usersUrl = await fetchJson(apiUrl + `f_users/?fields=*.*`)
const gelukt = 'uw score is toegevoegd';
//
// let ratings = ''
let ratings = []
// hier maak ik 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
app.use(express.static('public'))
// Zorg dat werken met request data makkelijker wordt
app.use(express.urlencoded({extended: true}))
// Stel het poortnummer in waar express op moet gaan luisteren
app.set('port', process.env.PORT || 8000)
// 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')}`)
})
// Get Route voor de index
app.get('/', function (request, response) {
// fetch data directus table f_feedback
fetchJson(apiUrl + 'f_feedback').then((BeoordelingData) => {
// console.log(BeoordelingData)
response.render('index', {
alleHuizen: huizenHome.data,
alleRatings: feedbackUrl.data,
users: usersUrl.data,
ratings: ratings,
})
// console.log(ratings)
})
})
app.post('/', function (request, response) {
console.log(request.body)
// posten naar directus..
fetch(`${apiUrl}f_feedback/`, {
method: 'POST',
body: JSON.stringify({
house: request.body.id,
list: 12,
user: 5,
rating: {
stars: request.body.algemeenNumber,
},
}),
headers: {
'Content-Type': 'application/json; charset=UTF-8',
},
}).then((postResponse) => {
// console.log(postResponse)
response.redirect(303, '/')
})
})
app.get('/huis/:id', function (request, response) {
// request.params.id gebruik je zodat je de exacte huis kan weergeven dit is een routeparmater naar de route van die huis
const url = `https://fdnd-agency.directus.app/items/f_houses/${request.params.id}/?fields=*.*.*`
fetchJson(url)
.then((apiData) => {
if (apiData.data) {
/*als data voer dan dit uit */
// console.log('data bestaat u gaat nu naar de Detailpage page'+JSON.stringify(apiData))
// info gebruiken om die te linken aan apidata.data
response.render('huis', {house: apiData.data})
// console.log(apiData)
} else {
console.log('No data found for house with id: ' + request.params.id)
// laat de error zien als de data al niet gevonden word
}
})
.catch((error) => {
console.error('Error fetching house data:', error)
})
})
app.get('/score/:id', function (request, response) {
const feedbackUrl = `https://fdnd-agency.directus.app/items/f_feedback/?filter[house][_eq]=${request.params.id}`;
// hier moet een
const houseUrl = `https://fdnd-agency.directus.app/items/f_houses/${request.params.id}/?fields=*.*`;
// deze data blijft staan omdat ikk het niet dynamisch krijg
const staticData = {
general: 5,
kitchen: 5,
bathroom: 5,
garden: 5,
}
// use a promise.all because the tables are not connected to each other
Promise.all([
fetchJson(feedbackUrl),
fetchJson(houseUrl)
])
// hier word de data omgezet naar een object en met render word het weergegeven
.then(async (feedback) => {
response.render('score', {
house: feedback[1].data,
feedback: feedback[0].data,
// rating: feedbackdetails[73].rating,//de rating klopt bij het huis maar is nu handmatig gedaan maar dit moet dynamisch
succed: gelukt,
users: usersUrl.data,
ratings: staticData,
});
})
})
app.get('/succes', function (request, response) {
const feedbackUrl = `https://fdnd-agency.directus.app/items/f_feedback/?filter[house][_eq]=${request.params.id}`;
// hier moet een
// use a promise.all because the tables are not connected to each other
Promise.all([
fetchJson(feedbackUrl),
])
// hier word de data omgezet naar een object en met render word het weergegeven
.then(async (feedback) => {
response.render('succes', {
house: feedback.data,
feedback: feedback.data,
// rating: feedbackdetails[73].rating,//de rating klopt bij het huis maar is nu handmatig gedaan maar dit moet dynamisch
succed: gelukt,
users: usersUrl.data,
});
})
})
app.post('/score/:id', function (request, response) {
//this is the empty object that is going to be filled with the new score
const newScore = {
general: request.body.algemeenNumber,
kitchen: request.body.keukenNumber,
bathroom: request.body.badkamerNumber,
garden: request.body.tuinNumber,
new: request.body.new,
};
const noteUser = request.body.note
// make the post route
fetch(`https://fdnd-agency.directus.app/items/f_feedback/?limit=8000&filter[house][_eq]=${request.params.id}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=UTF-8',
},
body: JSON.stringify({
"house": request.params.id,
"list": 7,
"user": 5,
rating: newScore,
note: noteUser,
}),
})
// hier word de data omgezet naar een object en met render word het weergegeven
.then(async (apiResponse) => {
// if the enhanced is true do this en the render is the partial
// console.log(noteUserg)
// een or kan ik niet gebruiken omdat ik in de succespartial niet de notes heb
if (request.body.enhanced) {
const feedbackUrl = `https://fdnd-agency.directus.app/items/f_feedback/?limit=8000&filter[house][_eq]=${request.params.id}`;
// use a promise.all because the tables are not connected to each other
console.log('data word pniew opgehaald scores numbers')
fetchJson(feedbackUrl)
// todo zorgen dat de successtate er is want dynamisch weergeven van data en de enhanced is te moeilijk samen
.then(async (feedback) => {
// console.log(feedback.data)
response.render('partials/succes_partial', {
result: apiResponse,
feedback: feedback.data
// feedback hier toevoegen lukt niet ant het omzetten gebeurt in de get route
}
)
})
}
// todo navragen waarom deze pagina word ingeladen terwijl dat niet moet en alleen als de html werkt gebruik je dit
if (request.body.notesEnhanced) {
const feedbackUrl = `https://fdnd-agency.directus.app/items/f_feedback/?limit=8000&filter[house][_eq]=${request.params.id}`;
fetchJson(feedbackUrl)
.then(async (feedback) => {
console.log('data word pniew opgehaald notes')
response.render('partials/ShowNotes', {
result: apiResponse,
feedback: feedback.data
}
)
})
}
// als deze niet waar zijn doe dan dit
if (!request.body.enhanced && !request.body.notesEnhanced) {
console.log('redirecting...');
response.redirect(303, '/succes');
}
})
})