· 6 years ago · Feb 22, 2020, 08:18 AM
1Bonjour Mathieu,
2
3Comme convenu, voici les consignes pour le test technique.
4Le but est de le faire en 4 heures.
5
6Pour la restitution tu peux créer un repo github privé avec RomainKoenig, Cedric25 et maximechbt en collaborateur.
7
8Test
9 d'entretien :
10
11
12Contexte
13
14L'idée
15 est de faire un microservice qui valide ou non des requêtes de promocode.
16
17Vous
18 êtes une entreprise de réservation de VTC type Uber ou Chauffeur-Privé et vous souhaitez encourager vos clients à réserver lorsqu'il fait beau.
19
20
21
22L'équipe marketing peut ajouter des “promocodes”
23 en base dont la structure sera détaillée en dessous.
24
25
26
27Les clients peuvent appeler l'API sur
28 une autre route avec des arguments pour demander une réduction
29
30
31
32
33Spécifications
34
35Pour
36 cela, il s’agit de réaliser une API en Node.js. L'utilisation de n'importe quel framework, librairie, outil est autorisé.
37
38
39Voici
40 un exemple
41 de promocode en base, il valide une demande de réduction de 20% si :
42
43
44l’âge du client est soit
45
46
47
48de 40 ans (c’est l’âge du patron de l’entreprise
49?)
50
51
52
53entre 15 et 35 ans (pour encourager la
54 jeunesse)
55
56
57
58la date de la demande du code est
59
60
61
62après le 1er janvier 2019 inclus
63
64
65
66avant le 30 juin 2020 inclus
67
68
69
70le météo
71
72
73
74claire (pas de pluie)
75
76
77
78suffisamment douce, plus de 15°C
79
80
81
82//
83 PROMOCODE :
84
85{
86
87_id:
88 '...',
89
90name:
91 'WeatherCode',
92
93avantage:
94 { percent: 20 },
95
96restrictions:
97 {
98
99 @or:
100 [{
101
102 @age:
103 {
104
105 eq:
106 40
107
108}
109
110 },
111 {
112
113 @age:
114 {
115
116 lt:
117 30,
118
119 gt:
120 15
121
122 },
123
124 }],
125
126 @date:
127 {
128
129 after:
130 '2019-01-01',
131
132before:
133 '2020-06-30',
134
135 },
136
137 @meteo:
138 {
139
140 is:
141 'clear',
142
143 temp:
144 {
145
146 gt:
147 '15', // Celsius here.
148
149 }
150
151 }
152
153}
154
155}
156
157
158Vous pouvez retrouver ce JSON bien formaté sur ce gist : https://gist.github.com/cedric25/0b08ac65d7f3cc94f792adb3a4a6663d
159
160Pour
161 qu'une demande de réduction soit acceptée, toutes les règles du promocode demandé doivent être validées (c'est à dire celles dans l’attribut
162restrictions).
163 Dans le promocode ci dessus il s'agirait donc de @date, @meteo et @or. On peut voir ici que certaines règles peuvent en inclure d'autres (comme @or, @and ...) et cela peut aller jusqu'à une profondeur arbitraire.
164
165
166Exemple
167 d'un message pour faire une demande de réduction :
168
169
170//
171 DEMANDE DE RÉDUCTION :
172
173{
174
175promocode_name:
176 'WeatherCode',
177
178arguments:
179 {
180
181 age:
182 25,
183
184 meteo:
185 { town: 'Lyon' },
186
187}
188
189}
190
191
192//
193 RÉPONSE si météo claire à l'heure actuelle
194
195{
196
197promocode_name:
198 'WeatherCode',
199
200status:
201 'accepted',
202
203avantage:
204 { percent: 20 },
205
206}
207
208
209//
210 RÉPONSE si météo pluvieuse à l'heure actuelle
211
212{
213
214promocode_name:
215 'WeatherCode',
216
217status:
218 'denied',
219
220reasons:
221 {
222
223 meteo:
224 'isNotClear'
225
226}
227
228}
229
230
231Pour
232 la structure des données, le format est donné en exemple mais n’hésitez pas à faire une autre proposition si vous la jugez plus pertinente. Les spécifications sont minimales, pour laisser au candidat la liberté de rajouter les choses qu'ils trouvent nécessaires
233 ou utiles aux routes comme les erreurs, le format des réponses, règles supplémentaires etc…
234
235autre
236 exemple de format possible pour les rules :
237
238{
239
240 restriction_name:
241 'meteo',
242
243 restrictions:
244 [{ ... }]
245
246},
247 { ... }
248
249
250
251Consignes
252
253Dans
254 l'exercice il faut au minimum :
255
256
257Une route pour ajouter un promocode.
258
259
260
261Une route pour faire une demande de réduction.
262
263
264
265Que le promocode en exemple (ci-dessus)
266 fonctionne
267
268
269
270Bonus
271 (dans le désordre) :
272
273
274
275Ajouter des tests automatisés
276
277
278
279Ajouter dans un readme.md ou dans le mail,
280 une liste de commande curl ou un lien vers une collection postman avec des requêtes pour pouvoir tester l'API
281
282
283
284Faire une authentification pour que la
285 route “ajouter un promocode” ne soit accessible que si la requête est authentifiée.
286
287
288
289Héberger le service dans le Cloud, et
290 nous donner l’url pour tester.
291
292
293
294N'importe quelle idée à vous !
295
296
297
298
299Aides
300
301Pour
302 la météo, possibilité d'utiliser openWeatherMap avec l'API key suivante :
303
304https://openweathermap.org/
305 (doc sur le site, API KEY: ////// (60 calls/min))
306
307
308Pour
309 l'hébergement, Heroku dispose d’un tiers gratuit et facile d’utilisation.
310
311
312Pensez
313 bien à l'architecture des dossiers/fichiers. Respectez les bonnes pratiques.
314
315Pour
316 l'algo n'oubliez pas que la profondeur des restrictions est arbitraire.
317
318
319Bon
320 courage :)