Du bist dabei eine Order2Cash Application zu entwickeln. Diese Anwendung soll es ermöglichen, dass ein Kunde eine Bestellung aufgibt und diese Bestellung dann geprüft und schlussendlich bezahlt werden kann.
Dazu solltest du dir zuerst einmal den Aufbau der Anwendung ansehen. Die Anwendung besteht aus folgenden Komponenten:
- Adapter: In diesem Teil der Anwendung findet die Integration zur Außenwelt statt. Hier werden die Schnittstellen zu anderen Systemen angebunden.
- Application: In diesem Teil der Anwendung sind die Schnittstellen definiert, die die Anwendung nach außen hin anbietet und die Use Cases implementiert.
- Domain: Das ist der Kern unserer Domäne und beinhaltet die Domain Objekte.
Mehr dazu findest du in einem ausführlichen Blogpost unter: https://reflectoring.io/spring-hexagonal/
Du bist bereit und hast ein grobes Verständnis? Dann geht es weiter!
Leider sind wir keine BPMN Experten und haben ein paar Details im Modell vergessen...
Bitte ergänze den Prozess, sodass er korrekt mit unseren Workern interagiert.
Wir sind außerdem Fans von Unit-Tests und würden uns freuen, wenn du den Prozess testen könntest.
Worker sollten mitgetestet werden, den Rest kannst du mocken.
Die Klasse dafür findest du unter src/test/kotlin/io/miragon/exercise/order/Order2CashProcessTest.kt
.
Der Order Check muss implementiert werden. Hierbei soll geprüft werden, ob die Bestellung einen bestimmten Wert überschreitet. Wenn der Wert größer als 1000 ist, soll der Prozess abgebrochen werden. Ansonsten soll der Prozess weiterlaufen. Worker, Use Case und Service sind bereits vorhanden. Du musst nur noch die Implementierung vornehmen. Außerdem musst du etwas im Prozess anpassen, auf dem Pfad stimmt etwas mit einer Bedingung nicht.
Um einen Prozess zu starten, lohnt es sich auf ein Tool wie Postman zurückzugreifen. Als Tipp: Welche Artikel es gibt, kannst du im ArticlePriceListPersistenceAdapter nachschauen.
POST http://localhost:8883/api/order
{
"customer": "John",
"orderItems": [
{
"articleId": 1,
"quantity": 10
}
]
}
Die Bestellung soll bezahlt werden. Aber wie bringen wir die Informationen an den Prozess?
Es ist bereits ein Rest Controller für das Payment vorhanden. Der Payment Use Case muss aber noch implementiert werden. Dabei soll die Order geladen und auf bezahlt gesetzt werden. Zusätzlich soll im SendPaymentOutPort eine Nachricht an den Prozess gesendet werden. Hilf uns dabei!