-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSideEffectsScenario.cs
More file actions
60 lines (47 loc) · 2.07 KB
/
Copy pathSideEffectsScenario.cs
File metadata and controls
60 lines (47 loc) · 2.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using ModularityKit.Mutator.Abstractions.Context;
using ModularityKit.Mutator.Abstractions.Effects;
using ModularityKit.Mutator.Abstractions.Engine;
using WorkflowApprovals.Mutations;
using WorkflowApprovals.State;
namespace WorkflowApprovals.Scenarios;
internal static class SideEffectsScenario
{
internal static async Task Run(IMutationEngine engine)
{
Console.WriteLine("\n=== Side Effects Scenario ===");
var state = new ApprovalWorkflowState();
var startContext = MutationContext.System("Start side effect demo", correlationId: "workflow-side-effects");
var start = new StartApprovalMutation("initiator", ["SecurityReview", "FinanceReview"], startContext);
var startResult = await engine.ExecuteAsync(start, state);
if (!startResult.IsSuccess || startResult.NewState == null)
{
Console.WriteLine("✗ Failed to start workflow.");
return;
}
PrintSideEffects("Start workflow", startResult.SideEffects);
state = startResult.NewState;
var rejectContext = MutationContext.User("security.lead", reason: "Reject risky request");
var reject = new RejectWorkflowMutation("security.lead", rejectContext);
var rejectResult = await engine.ExecuteAsync(reject, state);
if (!rejectResult.IsSuccess || rejectResult.NewState == null)
{
Console.WriteLine("✗ Failed to reject workflow.");
return;
}
PrintSideEffects("Reject workflow", rejectResult.SideEffects);
}
private static void PrintSideEffects(string operation, IReadOnlyList<SideEffect> sideEffects)
{
Console.WriteLine($"{operation} side effects:");
foreach (var effect in sideEffects)
{
Console.WriteLine(
$" {effect.Type} | severity={effect.Severity} | requiresAction={effect.RequiresAction}");
Console.WriteLine($" {effect.Description}");
if (effect.Data is not null)
{
Console.WriteLine($" data={effect.Data}");
}
}
}
}