Pas de commande en l'air

Exercice 4 sur 4 du chapitre 2 · 100 XP · 3 objectifs vérifiés par des tests

Notions abordées : Validation422Gestion des erreurs

Bastien a voulu tester l'application : il a commandé une course pour « la Lune », sans nom de client. Elle est partie dans la tournée, et Yanis a cherché la Lune une bonne heure.

Votre mission

  1. Au début de Store, validez la requête : client est obligatoire et fait au moins 2 caractères ; quartier est obligatoire et doit être croix-rousse, presqu-ile, guillotiere ou confluence.
  2. Une commande invalide répond 422 avec {"erreurs": …}, les erreurs rangées par champ, et n'entre pas dans la tournée.
  3. Une commande correcte passe comme avant.

Rappel

ctx.Request().Validate(règles) reprend la syntaxe de Laravel : required, in:a,b,c, email… avec quelques noms qui changent : la longueur d'une chaîne se vérifie avec min_len:2, pas min:2, réservé aux nombres. Les messages d'erreur sont en anglais par défaut. Validate renvoie deux valeurs : le validateur et une erreur. C'est la façon de Go de signaler un problème, sans exception : on vérifie err juste après l'appel, avec if err != nil. Ici, err ne dit pas que la commande est invalide, mais que la validation n'a pas pu se faire (une règle mal écrite, par exemple).

Le verdict est dans le validateur : validator.Fails(), puis validator.Errors().All(), les messages par champ et par règle. Contrairement à Laravel, Goravel ne répond pas tout seul : c'est à vous de renvoyer le 422.