diff --git a/src/main/java/io/takima/temporalpractice/bakery/CookieOrderer.java b/src/main/java/io/takima/temporalpractice/bakery/CookieOrderer.java index 70fa9e3879fe7b02e92113979e816dbe365e2e0f..a5efdd7217542a1fc94f315005a518ffb7236641 100644 --- a/src/main/java/io/takima/temporalpractice/bakery/CookieOrderer.java +++ b/src/main/java/io/takima/temporalpractice/bakery/CookieOrderer.java @@ -2,11 +2,14 @@ package io.takima.temporalpractice.bakery; import io.takima.temporalpractice.bakery.bake.BakeServiceImpl; import io.takima.temporalpractice.bakery.batter.BatterServiceImpl; +import io.takima.temporalpractice.bakery.cookie.BestCookieWorkflow; +import io.takima.temporalpractice.bakery.cookie.CookieWorkflow; +import io.takima.temporalpractice.bakery.cookie.Input.Baking; +import io.takima.temporalpractice.bakery.cookie.Input.CookiePreference; +import io.takima.temporalpractice.bakery.cookie.Input.Topping; import io.temporal.client.WorkflowClient; import io.temporal.client.WorkflowOptions; import io.temporal.serviceclient.WorkflowServiceStubs; -import io.takima.temporalpractice.bakery.cookie.CookieWorkflow; -import io.takima.temporalpractice.bakery.cookie.BestCookieWorkflow; import io.temporal.worker.Worker; import io.temporal.worker.WorkerFactory; @@ -34,6 +37,6 @@ public class CookieOrderer { CookieWorkflow workflow = client.newWorkflowStub(CookieWorkflow.class, options); - workflow.orderCookie(); // Start the Workflow Execution + workflow.orderCookie(new CookiePreference(10, Baking.SOFT, Topping.CHOCOLATE)); // Start the Workflow Execution } } diff --git a/src/main/java/io/takima/temporalpractice/bakery/bake/BakeService.java b/src/main/java/io/takima/temporalpractice/bakery/bake/BakeService.java index d411a8be32df2e0247eeecbddd9b5fd92a3ccc15..18130d84b6d5beed951af8084cf7d6b289b38e5c 100644 --- a/src/main/java/io/takima/temporalpractice/bakery/bake/BakeService.java +++ b/src/main/java/io/takima/temporalpractice/bakery/bake/BakeService.java @@ -1,8 +1,10 @@ package io.takima.temporalpractice.bakery.bake; +import io.takima.temporalpractice.bakery.bake.Input.BakeOrder; +import io.takima.temporalpractice.bakery.bake.Output.CompleteOrder; import io.temporal.activity.ActivityInterface; @ActivityInterface public interface BakeService { - void bake(); + CompleteOrder bake(BakeOrder bakeOrder); } diff --git a/src/main/java/io/takima/temporalpractice/bakery/bake/BakeServiceImpl.java b/src/main/java/io/takima/temporalpractice/bakery/bake/BakeServiceImpl.java index 346b162162bbb58491d017e5d73df6e56e0befed..fc4d3545223f331ec34f8a5d6fa6a0489c894ae9 100644 --- a/src/main/java/io/takima/temporalpractice/bakery/bake/BakeServiceImpl.java +++ b/src/main/java/io/takima/temporalpractice/bakery/bake/BakeServiceImpl.java @@ -1,8 +1,19 @@ package io.takima.temporalpractice.bakery.bake; +import io.takima.temporalpractice.bakery.bake.Input.BakeOrder; +import io.takima.temporalpractice.bakery.bake.Output.CompleteOrder; +import io.takima.temporalpractice.bakery.cookie.Output.Cookie; + +import java.util.stream.IntStream; + public class BakeServiceImpl implements BakeService { @Override - public void bake() { - System.out.println("Baking cookies!"); + public CompleteOrder bake(BakeOrder bakeOrder) { + var targetQuantity = bakeOrder.batter().quantityInGrams() / 30; + var cookies = IntStream.range(0, targetQuantity) + .mapToObj((i) -> new Cookie(bakeOrder.baking(), bakeOrder.batter().topping())) + .toList(); + System.out.println("Baked cookies\n" + cookies); + return new CompleteOrder(cookies); } } \ No newline at end of file diff --git a/src/main/java/io/takima/temporalpractice/bakery/bake/Input.java b/src/main/java/io/takima/temporalpractice/bakery/bake/Input.java new file mode 100644 index 0000000000000000000000000000000000000000..36e7c7a600b093bfd8be305e430e4f6c92c0791f --- /dev/null +++ b/src/main/java/io/takima/temporalpractice/bakery/bake/Input.java @@ -0,0 +1,12 @@ +package io.takima.temporalpractice.bakery.bake; + +import io.takima.temporalpractice.bakery.batter.Output.Batter; +import io.takima.temporalpractice.bakery.cookie.Input.Baking; + +public class Input { + public record BakeOrder( + Batter batter, + Baking baking + ) { + } +} diff --git a/src/main/java/io/takima/temporalpractice/bakery/bake/Output.java b/src/main/java/io/takima/temporalpractice/bakery/bake/Output.java new file mode 100644 index 0000000000000000000000000000000000000000..71e1fc0cbcbbec69d1ac6aacb91bd101b1725c95 --- /dev/null +++ b/src/main/java/io/takima/temporalpractice/bakery/bake/Output.java @@ -0,0 +1,12 @@ +package io.takima.temporalpractice.bakery.bake; + +import io.takima.temporalpractice.bakery.cookie.Output.Cookie; + +import java.util.List; + +public class Output { + public record CompleteOrder( + List<Cookie> cookies + ) { + } +} diff --git a/src/main/java/io/takima/temporalpractice/bakery/batter/BatterService.java b/src/main/java/io/takima/temporalpractice/bakery/batter/BatterService.java index 2bf83ed4d7dca9dd7096800ece52b82e1ae22efb..9357ad1c278841b52e8836419e8f64f85019705a 100644 --- a/src/main/java/io/takima/temporalpractice/bakery/batter/BatterService.java +++ b/src/main/java/io/takima/temporalpractice/bakery/batter/BatterService.java @@ -1,8 +1,10 @@ package io.takima.temporalpractice.bakery.batter; +import io.takima.temporalpractice.bakery.batter.Input.BatterOrder; +import io.takima.temporalpractice.bakery.batter.Output.Batter; import io.temporal.activity.ActivityInterface; @ActivityInterface public interface BatterService { - void prepareBatter(); + Batter prepareBatter(BatterOrder batterOrder); } diff --git a/src/main/java/io/takima/temporalpractice/bakery/batter/BatterServiceImpl.java b/src/main/java/io/takima/temporalpractice/bakery/batter/BatterServiceImpl.java index 305a10a8d168e8e99e5f6d3817f8c00d21a1d3f0..bd4e0f2f0776742feea044bbbfd542ecdd5f43d2 100644 --- a/src/main/java/io/takima/temporalpractice/bakery/batter/BatterServiceImpl.java +++ b/src/main/java/io/takima/temporalpractice/bakery/batter/BatterServiceImpl.java @@ -1,8 +1,13 @@ package io.takima.temporalpractice.bakery.batter; +import io.takima.temporalpractice.bakery.batter.Input.BatterOrder; +import io.takima.temporalpractice.bakery.batter.Output.Batter; + public class BatterServiceImpl implements BatterService { @Override - public void prepareBatter() { - System.out.println("Mixing flour, sugar, and love..."); + public Batter prepareBatter(BatterOrder batterOrder) { + var batter = new Batter(batterOrder.topping(), batterOrder.amount() * 30); + System.out.println("Prepared cookie batter\n" + batter); + return batter; } } \ No newline at end of file diff --git a/src/main/java/io/takima/temporalpractice/bakery/batter/Input.java b/src/main/java/io/takima/temporalpractice/bakery/batter/Input.java new file mode 100644 index 0000000000000000000000000000000000000000..e58d4f2533334fc0c91648f71927fdc3d738308a --- /dev/null +++ b/src/main/java/io/takima/temporalpractice/bakery/batter/Input.java @@ -0,0 +1,11 @@ +package io.takima.temporalpractice.bakery.batter; + +import io.takima.temporalpractice.bakery.cookie.Input.Topping; + +public class Input { + public record BatterOrder( + Topping topping, + int amount + ) { + } +} diff --git a/src/main/java/io/takima/temporalpractice/bakery/batter/Output.java b/src/main/java/io/takima/temporalpractice/bakery/batter/Output.java new file mode 100644 index 0000000000000000000000000000000000000000..076d10afb995864c9613811d57ecac386aad6521 --- /dev/null +++ b/src/main/java/io/takima/temporalpractice/bakery/batter/Output.java @@ -0,0 +1,11 @@ +package io.takima.temporalpractice.bakery.batter; + +import io.takima.temporalpractice.bakery.cookie.Input.Topping; + +public class Output { + public record Batter( + Topping topping, + int quantityInGrams + ) { + } +} diff --git a/src/main/java/io/takima/temporalpractice/bakery/cookie/BestCookieWorkflow.java b/src/main/java/io/takima/temporalpractice/bakery/cookie/BestCookieWorkflow.java index 738023465e87349a22f6007fb33faa31bd8a1efd..d0f33fa92e5b21ba88eee92ce97cd1b2601d5a4a 100644 --- a/src/main/java/io/takima/temporalpractice/bakery/cookie/BestCookieWorkflow.java +++ b/src/main/java/io/takima/temporalpractice/bakery/cookie/BestCookieWorkflow.java @@ -1,11 +1,17 @@ package io.takima.temporalpractice.bakery.cookie; +import io.takima.temporalpractice.bakery.bake.BakeService; +import io.takima.temporalpractice.bakery.batter.BatterService; +import io.takima.temporalpractice.bakery.cookie.Output.CookieOrder; import io.temporal.activity.ActivityOptions; import io.temporal.workflow.Workflow; -import io.takima.temporalpractice.bakery.batter.BatterService; -import io.takima.temporalpractice.bakery.bake.BakeService; + import java.time.Duration; +import static io.takima.temporalpractice.bakery.bake.Input.BakeOrder; +import static io.takima.temporalpractice.bakery.batter.Input.BatterOrder; +import static io.takima.temporalpractice.bakery.cookie.Input.CookiePreference; + public class BestCookieWorkflow implements CookieWorkflow { private final BatterService batterService; private final BakeService bakeService; @@ -21,10 +27,18 @@ public class BestCookieWorkflow implements CookieWorkflow { } @Override - public void orderCookie() { + public CookieOrder orderCookie(CookiePreference cookiePreference) { System.out.println("Starting to prepare your cookie!"); - batterService.prepareBatter(); - bakeService.bake(); - System.out.println("Your cookie is ready!"); + + var batter = batterService.prepareBatter( + new BatterOrder(cookiePreference.topping(), cookiePreference.amount()) + ); + + var cookies = bakeService.bake( + new BakeOrder(batter, cookiePreference.baking()) + ).cookies(); + + System.out.println("Your cookies are ready!"); + return new CookieOrder(cookies); } } \ No newline at end of file diff --git a/src/main/java/io/takima/temporalpractice/bakery/cookie/CookieWorkflow.java b/src/main/java/io/takima/temporalpractice/bakery/cookie/CookieWorkflow.java index 80ba653ab624861c28b42d0c7af5572b7d1ec7b6..f673176b64b533ce078413e543c81eeee36cb8d5 100644 --- a/src/main/java/io/takima/temporalpractice/bakery/cookie/CookieWorkflow.java +++ b/src/main/java/io/takima/temporalpractice/bakery/cookie/CookieWorkflow.java @@ -3,8 +3,11 @@ package io.takima.temporalpractice.bakery.cookie; import io.temporal.workflow.WorkflowInterface; import io.temporal.workflow.WorkflowMethod; +import static io.takima.temporalpractice.bakery.cookie.Input.CookiePreference; +import static io.takima.temporalpractice.bakery.cookie.Output.CookieOrder; + @WorkflowInterface public interface CookieWorkflow { @WorkflowMethod - void orderCookie(); + CookieOrder orderCookie(CookiePreference cookiePreference); } \ No newline at end of file diff --git a/src/main/java/io/takima/temporalpractice/bakery/cookie/Input.java b/src/main/java/io/takima/temporalpractice/bakery/cookie/Input.java new file mode 100644 index 0000000000000000000000000000000000000000..153fc88fe3f2562c8c648cc6e574d300d691d516 --- /dev/null +++ b/src/main/java/io/takima/temporalpractice/bakery/cookie/Input.java @@ -0,0 +1,23 @@ +package io.takima.temporalpractice.bakery.cookie; + +public class Input { + public enum Baking { + RAW, + SOFT, + COOKED, + BURNT + } + + public enum Topping { + CHOCOLATE, + NUTS, + NONE + } + + public record CookiePreference( + int amount, + Baking baking, + Topping topping + ) { + } +} diff --git a/src/main/java/io/takima/temporalpractice/bakery/cookie/Output.java b/src/main/java/io/takima/temporalpractice/bakery/cookie/Output.java new file mode 100644 index 0000000000000000000000000000000000000000..b4a738fcee74c332e9940a54757f6d830ac075c7 --- /dev/null +++ b/src/main/java/io/takima/temporalpractice/bakery/cookie/Output.java @@ -0,0 +1,19 @@ +package io.takima.temporalpractice.bakery.cookie; + +import io.takima.temporalpractice.bakery.cookie.Input.Baking; +import io.takima.temporalpractice.bakery.cookie.Input.Topping; + +import java.util.List; + +public class Output { + public record CookieOrder( + List<Cookie> cookies + ) { + } + + public record Cookie( + Baking baking, + Topping topping + ) { + } +}