Spring Boot : écrire le serveur (école d'ingénieur) · Chapitre 12 · Application directe du cours
Annuler une commande
Projet : l'API de la Librairie · niveau 2
Énoncé
Le personnel doit pouvoir annuler une commande : DELETE /api/admin/commandes/{numero} supprime la commande et remet ses exemplaires en stock, ou répond 404 si elle n'existe pas. Écrire le contrôleur et un test.
Corrigé
L'annulation charge la commande, rend les exemplaires (la méthode remettreEnStock de Livre existe depuis le chapitre 6) et supprime la commande ; ses lignes suivent (cascade et suppression des orphelins). Le tout dans une transaction.
/** Annule une commande : ses exemplaires reviennent en stock, dans la même transaction. */
@DeleteMapping("/api/admin/commandes/{numero}")
@Transactional
public ResponseEntity<Void> annuler(@PathVariable long numero) {
Commande commande = commandes.findById(numero).orElseThrow(() ->
new ResponseStatusException(HttpStatus.NOT_FOUND, "Aucune commande n° " + numero + "."));
commande.getLignes().forEach(l -> l.getLivre().remettreEnStock(l.getQuantite()));
commandes.delete(commande); // les lignes suivent (cascade, orphanRemoval)
return ResponseEntity.noContent().build();
}
La règle de sécurité /api/admin/** (rôle ADMIN) la protège déjà.
@Test
void annulerRendLesExemplaires() throws Exception {
int avant = livres.findById("9782956300069").orElseThrow().getStock();
long numero = commander("9782956300069", 2);
assertThat(livres.findById("9782956300069").orElseThrow().getStock()).isEqualTo(avant - 2);
assertThat(mvc.delete().uri("/api/admin/commandes/" + numero).header("Authorization", "Basic YWRtaW46bGlicmFpcmUtMjAyNg=="))
.hasStatus(204);
assertThat(livres.findById("9782956300069").orElseThrow().getStock()).isEqualTo(avant);
assertThat(mvc.delete().uri("/api/admin/commandes/" + numero).header("Authorization", "Basic YWRtaW46bGlicmFpcmUtMjAyNg=="))
.hasStatus(404);
}
(commander est une petite méthode du test qui passe une commande par l'API et rend son numéro.)
100 % gratuit
La suite du chapitre est sur Adloun
- 9 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.