Le carnet des livraisons

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

Notions abordées : Query builderSQLiteTag dbGestion des erreurs

La tournée en mémoire s'efface à chaque redémarrage, et Margot perd ses commandes. Son neveu a ouvert un carnet : une table SQLite livraisons, avec la tournée du jour et l'Épicerie de la Lune, qui vient de signer. Dans un vrai projet, elle garderait tout ; ici, dans le navigateur, database/carnet.go la remet à neuf à chaque démarrage. Il a aussi ajouté au contrôleur une fonction erreurServeur, qui répond 500.

Votre mission

  1. Dans Index, lisez les livraisons dans la table livraisons, triées par numéro, avec facades.DB().
  2. Gardez le filtre ?quartier= : il devient une condition de la requête. Sans livraison, la réponse reste [].
  3. Dans Show, lisez la livraison dans la table. Un numéro inconnu répond toujours 404.
  4. Store écrit encore dans la tournée en mémoire : ce sera le prochain exercice.

Rappel

facades.DB() est le query builder de Goravel, le DB::table() de Laravel : Table("livraisons").Where("quartier", "confluence").OrderBy("id").Get(&resultat). Get remplit une slice, First une seule struct. On leur passe l'adresse de la variable, &resultat, pour qu'ils puissent l'écrire.

Le tag db:"client" fait le lien entre une colonne et un champ, comme json:"client" le fait avec une clé JSON (sans tag, Goravel cherche la colonne du même nom en snake_case). Une struct peut porter les deux.

Chaque requête peut échouer, et renvoie une error : if err := query.Get(&resultat); err != nil { … } la vérifie sur la même ligne. La fonction erreurServeur du fichier répond alors 500.

Dans un vrai projet, la table viendrait d'une migration (go run . artisan make:migration) et ses données d'un seeder ; ici, sans console, database/carnet.go les crée au démarrage.