TP6 - Exposer l’interface métier de la cuisine et mettre en œuvre les transactions

1. Résumé

Dans le DDD, nous utilisons un service d’application pour exposer les opérations impliquant des agrégats et des dépôts, ou plusieurs agrégats. Un service d’application est le premier client immédiat du modèle du domaine principal.

Nous utiliserons l’interface d’un service d’application pour exposer ses opérations sous forme d’une API REST ou d’une collaboration pilotée par messages à l’aide des courtiers de messagerie RabbitMQ ou Kafka.

Dans ce TP, nous allons créer le service d’application pour le contexte Cuisine.

Nous allons réaliser 10 scénarios :

  1. La possibilité de trouver une commande CommandeCuisine à partir de sa référence ReferenceCommandeEnLigne.

  2. Lorsqu’un événement EvenementCommandeEnLignePayee est publié par le contexte Commande, créer une commande CommandeCuisine.

  3. La possibilité de commencer la préparation d’une commande CommandeCuisine.

  4. Lorsqu’un événement EvenementCommandeCuisinePreparationCommencee est publié, créer une Pizza pour chaque commande CommandeCuisine.Pizza, puis commencer le dressage de chaque Pizza.

  5. La possibilité de terminer la préparation d’une Pizza.

  6. Lorsqu’un événement « EvenementPizzaDressageFinie » est publié, commencer la cuisson de la pizza.

  7. Lorsqu’un événement EvenementPizzaCuissonCommencee est publié, commencez à cuire la commande.

  8. La possibilité de retirer une pizza du four.

  9. Lorsque la première pizza d’une commande est cuite (c’est-à-dire EvenementPizzaCuissonFinie), commencez à assembler la commande.

  10. Lorsque la dernière pizza d’une commande est cuite, terminez l’assemblage de la commande.

Vous pouvez exécuter la suite de tests com.pizzeria.suites.Lab6Suite pour vérifier votre progression.

2. Instructions.

  1. Regardez le code source du service ServicePaymentDefaut et basez-vous sur ce code pour réaliser les tâches suivantes.

  2. Implémentez les commandes du service d’application ServiceCuisineDefaut suivantes :

    • commencerPreparationCommande()

    • terminerPreparationPizza()

    • retirerPizzaDuFour().

  3. Implémentez les recherches du service d’application `ServiceCuisineDefaut suivantes :

    • findKitchenOrderByRef()

    • findKitchenOrderByOnlineOrderRef()

    • findPizzaByRef()

    • findPizzasByKitchenOrderRef()

  4. L’instantiation du service ServiceCuisineDefaut doit réaliser les tâches suivantes :

    1. Souscrire au Theme "commandes". Lors d’un événement EvenementCommandeEnLignePayee, récupérez la CommandeEnLigne associée par sa Ref. Convertissez la CommandeEnLigne en CommandeCuisine et ajoutez-la au dépôt.

    2. Souscrire au Theme "commandes-cuisine". Lors d’un événement EvenementCommandeCuisinePreparationCommencee, créez une Pizza pour chaque CommandeCuisine.Pizza et ajoutez-la au dépôt. Ensuite, appelez la méthode commencerPréparation() sur l’instance de Pizza.

    3. Souscrire au Theme "pizzas" :

      • Lors d’un événement EvenementPizzaDressageFinie, récupérer l’instance de « Pizza » associée et lancez commencerCuisson().

      • Lors d’un événement EvenementPizzaCuissonCommencee, récupérer l’instance de CommandeCuisine associée. Si l’instance de CommandeCuisine est en cours de préparation, appeler la méthode commencerCuisson().

      • Lors d’un événement EvenementPizzaCuissonFinie, récupérer la commande CommandeCuisine associée. Si la commande CommandeCuisine est en cours de cuisson, exécutez commencerAssemblage(). Ensuite, récupérez toutes les instances de Pizza associées. Si toutes les pizzas ont fini de cuire, appeler la méthode terminerAssemblage() sur l’instance de CommandeCuisine.