publicissapient-france / tondeuse-nodejs

0 stars 1 forks source link

Architecte / Développeur - Conception API Node.js

La société MowItNow a décidé de développer une API de tondeuses à gazon, destinées aux surfaces rectangulaires.

Cette API permet d’ajouter, consulter et supprimer des pelouses rectangulaires. La pelouse est divisée en grille pour simplifier la navigation.

Des tondeuses peuvent être ajoutées à ces surfaces. Elles peuvent aussi être consultées et supprimées.

La position de la tondeuse est représentée par la combinaison de coordonnées (x,y) de sa case et d’une lettre indiquant l’orientation selon la notation cardinale anglaise (N,E,W,S) sur une pelouse donnée.

La case (0,0) est située dans le coin sud-ouest de la pelouse.

Pour contrôler une tondeuse, on peut lui envoyer une séquence simple de lettres. Les lettres possibles sont D, G et A.

D et G font pivoter la tondeuse de 90° à droite ou à gauche respectivement, sans la déplacer.

A signifie que l'on avance la tondeuse d’une case dans la direction à laquelle elle fait face, sans modifier son orientation.

Il peut y avoir plusieurs tondeuses par case.

Contrainte numéro 1 : Déclaration de la tondeuse à l'international

Chaque tondeuse doit être déclarée sur un service international : International Mower Agency. Pour cela, l'Agency propose l'API REST suivante : POST https://jsonplaceholder.typicode.com/posts

Vous devez envoyer les informations de la tondeuse (le format des données est libre) lors de la création d'une tondeuse dans votre système.

Contrainte numéro 2 : Vitesse d'exécution

Une tondeuse ne peut exécuter plus d'une instruction toutes les 200 millisecondes.

Exemple

Sur une pelouse 4x4, on ajoute une tondeuse aux coordonnées (0,1), orientation=N

Après lui avoir envoyé les commandes [D,A,G,A,G], elle est maintenant aux coordonnées (1,2), orientation=W

Objectif

Concevoir et écrire une API sur un serveur Node.js implémentant la spécification ci-dessus.

Aide

Les choix d’architectures sont libres.

Le candidat sera jugé sur la qualité du code, le respect des bonnes pratiques modernes et sur son pragmatisme.