Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2020
414
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.51 KB | None | 0 0
  1. Bonjour Mathieu,
  2.  
  3. Comme convenu, voici les consignes pour le test technique.
  4. Le but est de le faire en 4 heures.
  5.  
  6. Pour la restitution tu peux créer un repo github privé avec RomainKoenig, Cedric25 et maximechbt en collaborateur.
  7.  
  8. Test
  9. d'entretien :
  10.  
  11.  
  12. Contexte
  13.  
  14. L'idée
  15. est de faire un microservice qui valide ou non des requêtes de promocode.
  16.  
  17. Vous
  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.  
  22. L'équipe marketing peut ajouter des “promocodes”
  23. en base dont la structure sera détaillée en dessous.
  24.  
  25.  
  26.  
  27. Les clients peuvent appeler l'API sur
  28. une autre route avec des arguments pour demander une réduction
  29.  
  30.  
  31.  
  32.  
  33. Spécifications
  34.  
  35. Pour
  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.  
  39. Voici
  40. un exemple
  41. de promocode en base, il valide une demande de réduction de 20% si :
  42.  
  43.  
  44. l’âge du client est soit
  45.  
  46.  
  47.  
  48. de 40 ans (c’est l’âge du patron de l’entreprise
  49. 😂)
  50.  
  51.  
  52.  
  53. entre 15 et 35 ans (pour encourager la
  54. jeunesse)
  55.  
  56.  
  57.  
  58. la date de la demande du code est
  59.  
  60.  
  61.  
  62. après le 1er janvier 2019 inclus
  63.  
  64.  
  65.  
  66. avant le 30 juin 2020 inclus
  67.  
  68.  
  69.  
  70. le météo
  71.  
  72.  
  73.  
  74. claire (pas de pluie)
  75.  
  76.  
  77.  
  78. suffisamment douce, plus de 15°C
  79.  
  80.  
  81.  
  82. //
  83. PROMOCODE :
  84.  
  85. {
  86.  
  87. _id:
  88. '...',
  89.  
  90. name:
  91. 'WeatherCode',
  92.  
  93. avantage:
  94. { percent: 20 },
  95.  
  96. restrictions:
  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.  
  132. before:
  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.  
  158. Vous pouvez retrouver ce JSON bien formaté sur ce gist : https://gist.github.com/cedric25/0b08ac65d7f3cc94f792adb3a4a6663d
  159.  
  160. Pour
  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
  162. restrictions).
  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.  
  166. Exemple
  167. d'un message pour faire une demande de réduction :
  168.  
  169.  
  170. //
  171. DEMANDE DE RÉDUCTION :
  172.  
  173. {
  174.  
  175. promocode_name:
  176. 'WeatherCode',
  177.  
  178. arguments:
  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.  
  197. promocode_name:
  198. 'WeatherCode',
  199.  
  200. status:
  201. 'accepted',
  202.  
  203. avantage:
  204. { percent: 20 },
  205.  
  206. }
  207.  
  208.  
  209. //
  210. RÉPONSE si météo pluvieuse à l'heure actuelle
  211.  
  212. {
  213.  
  214. promocode_name:
  215. 'WeatherCode',
  216.  
  217. status:
  218. 'denied',
  219.  
  220. reasons:
  221. {
  222.  
  223. meteo:
  224. 'isNotClear'
  225.  
  226. }
  227.  
  228. }
  229.  
  230.  
  231. Pour
  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.  
  235. autre
  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.  
  251. Consignes
  252.  
  253. Dans
  254. l'exercice il faut au minimum :
  255.  
  256.  
  257. Une route pour ajouter un promocode.
  258.  
  259.  
  260.  
  261. Une route pour faire une demande de réduction.
  262.  
  263.  
  264.  
  265. Que le promocode en exemple (ci-dessus)
  266. fonctionne
  267.  
  268.  
  269.  
  270. Bonus
  271. (dans le désordre) :
  272.  
  273.  
  274.  
  275. Ajouter des tests automatisés
  276.  
  277.  
  278.  
  279. Ajouter 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.  
  284. Faire une authentification pour que la
  285. route “ajouter un promocode” ne soit accessible que si la requête est authentifiée.
  286.  
  287.  
  288.  
  289. Héberger le service dans le Cloud, et
  290. nous donner l’url pour tester.
  291.  
  292.  
  293.  
  294. N'importe quelle idée à vous !
  295.  
  296.  
  297.  
  298.  
  299. Aides
  300.  
  301. Pour
  302. la météo, possibilité d'utiliser openWeatherMap avec l'API key suivante :
  303.  
  304. https://openweathermap.org/
  305. (doc sur le site, API KEY: ////// (60 calls/min))
  306.  
  307.  
  308. Pour
  309. l'hébergement, Heroku dispose d’un tiers gratuit et facile d’utilisation.
  310.  
  311.  
  312. Pensez
  313. bien à l'architecture des dossiers/fichiers. Respectez les bonnes pratiques.
  314.  
  315. Pour
  316. l'algo n'oubliez pas que la profondeur des restrictions est arbitraire.
  317.  
  318.  
  319. Bon
  320. courage :)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement