Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Bonjour Mathieu,
- Comme convenu, voici les consignes pour le test technique.
- Le but est de le faire en 4 heures.
- Pour la restitution tu peux créer un repo github privé avec RomainKoenig, Cedric25 et maximechbt en collaborateur.
- Test
- d'entretien :
- Contexte
- L'idée
- est de faire un microservice qui valide ou non des requêtes de promocode.
- Vous
- ê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.
- L'équipe marketing peut ajouter des “promocodes”
- en base dont la structure sera détaillée en dessous.
- Les clients peuvent appeler l'API sur
- une autre route avec des arguments pour demander une réduction
- Spécifications
- Pour
- cela, il s’agit de réaliser une API en Node.js. L'utilisation de n'importe quel framework, librairie, outil est autorisé.
- Voici
- un exemple
- de promocode en base, il valide une demande de réduction de 20% si :
- l’âge du client est soit
- de 40 ans (c’est l’âge du patron de l’entreprise
- 😂)
- entre 15 et 35 ans (pour encourager la
- jeunesse)
- la date de la demande du code est
- après le 1er janvier 2019 inclus
- avant le 30 juin 2020 inclus
- le météo
- claire (pas de pluie)
- suffisamment douce, plus de 15°C
- //
- PROMOCODE :
- {
- _id:
- '...',
- name:
- 'WeatherCode',
- avantage:
- { percent: 20 },
- restrictions:
- {
- @or:
- [{
- @age:
- {
- eq:
- 40
- }
- },
- {
- @age:
- {
- lt:
- 30,
- gt:
- 15
- },
- }],
- @date:
- {
- after:
- '2019-01-01',
- before:
- '2020-06-30',
- },
- @meteo:
- {
- is:
- 'clear',
- temp:
- {
- gt:
- '15', // Celsius here.
- }
- }
- }
- }
- Vous pouvez retrouver ce JSON bien formaté sur ce gist : https://gist.github.com/cedric25/0b08ac65d7f3cc94f792adb3a4a6663d
- Pour
- 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
- restrictions).
- 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.
- Exemple
- d'un message pour faire une demande de réduction :
- //
- DEMANDE DE RÉDUCTION :
- {
- promocode_name:
- 'WeatherCode',
- arguments:
- {
- age:
- 25,
- meteo:
- { town: 'Lyon' },
- }
- }
- //
- RÉPONSE si météo claire à l'heure actuelle
- {
- promocode_name:
- 'WeatherCode',
- status:
- 'accepted',
- avantage:
- { percent: 20 },
- }
- //
- RÉPONSE si météo pluvieuse à l'heure actuelle
- {
- promocode_name:
- 'WeatherCode',
- status:
- 'denied',
- reasons:
- {
- meteo:
- 'isNotClear'
- }
- }
- Pour
- 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
- ou utiles aux routes comme les erreurs, le format des réponses, règles supplémentaires etc…
- autre
- exemple de format possible pour les rules :
- {
- restriction_name:
- 'meteo',
- restrictions:
- [{ ... }]
- },
- { ... }
- Consignes
- Dans
- l'exercice il faut au minimum :
- Une route pour ajouter un promocode.
- Une route pour faire une demande de réduction.
- Que le promocode en exemple (ci-dessus)
- fonctionne
- Bonus
- (dans le désordre) :
- Ajouter des tests automatisés
- Ajouter dans un readme.md ou dans le mail,
- une liste de commande curl ou un lien vers une collection postman avec des requêtes pour pouvoir tester l'API
- Faire une authentification pour que la
- route “ajouter un promocode” ne soit accessible que si la requête est authentifiée.
- Héberger le service dans le Cloud, et
- nous donner l’url pour tester.
- N'importe quelle idée à vous !
- Aides
- Pour
- la météo, possibilité d'utiliser openWeatherMap avec l'API key suivante :
- https://openweathermap.org/
- (doc sur le site, API KEY: ////// (60 calls/min))
- Pour
- l'hébergement, Heroku dispose d’un tiers gratuit et facile d’utilisation.
- Pensez
- bien à l'architecture des dossiers/fichiers. Respectez les bonnes pratiques.
- Pour
- l'algo n'oubliez pas que la profondeur des restrictions est arbitraire.
- Bon
- courage :)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement