Skip to content

Commit

Permalink
Reorganize and support recursive simple name resolution for signal re…
Browse files Browse the repository at this point in the history
…sults (#13)
  • Loading branch information
aidapsibr authored Mar 12, 2022
1 parent 03f2c6f commit de8311b
Show file tree
Hide file tree
Showing 19 changed files with 348 additions and 237 deletions.
31 changes: 0 additions & 31 deletions samples/Controllers/OperationOrchestrationController.cs

This file was deleted.

47 changes: 47 additions & 0 deletions samples/Controllers/OperationOrchestratorController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
using System;
using System.Threading.Tasks;
using MediatR;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using PSIBR.Liminality;

namespace Samples.Controllers
{
[ApiController]
[Route("[controller]")]
public class OperationOrchestratorController : ControllerBase
{
private readonly ILogger<OperationOrchestratorController> _logger;

public OperationOrchestratorController(
ILogger<OperationOrchestratorController> logger)
{
_logger = logger;
}

[HttpPost]
public async Task<IActionResult> Post(OperationOrchestrator.Request request, [FromServices] OperationOrchestrator.Repository operationOrchestrationRepository)
{
var operationOrchestrator = operationOrchestrationRepository.Find(Guid.NewGuid().ToString());

var requestResult = await operationOrchestrator.SignalAsync(request);

if (requestResult.InnerResult is not TransitionedResult transitionResult
|| transitionResult.NewState is not OperationOrchestrator.Requesting.Requested)

{
return Problem(statusCode: 500);
}

var startResult = await operationOrchestrator.SignalAsync(new OperationOrchestrator.Start());

if (startResult.InnerResult is not TransitionedResult transitionResult2
|| transitionResult2.NewState is not OperationOrchestrator.InProgress)
{
return Problem(statusCode: 500);
}

return Ok(AggregateSignalResult.Combine(requestResult, startResult));
}
}
}
160 changes: 0 additions & 160 deletions samples/OperationOrchestrationStateMachine.cs

This file was deleted.

8 changes: 8 additions & 0 deletions samples/OperationOrchestrator.Cancelled.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace Samples
{
public partial class OperationOrchestrator
{
public class Cancelled { }

}
}
12 changes: 12 additions & 0 deletions samples/OperationOrchestrator.Cancelling.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using PSIBR.Liminality;

namespace Samples
{
public partial class OperationOrchestrator
{
[Transition<Throw, Failed>]
[Transition<Cancel.Acknowledgement, Cancelled>]
public class Cancelling { }

}
}
8 changes: 8 additions & 0 deletions samples/OperationOrchestrator.Completed.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace Samples
{
public partial class OperationOrchestrator
{
public class Completed { }

}
}
11 changes: 11 additions & 0 deletions samples/OperationOrchestrator.Created.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using PSIBR.Liminality;

namespace Samples
{
public partial class OperationOrchestrator
{
[Transition<Request, Requesting>]
public class Created { }

}
}
8 changes: 8 additions & 0 deletions samples/OperationOrchestrator.Failed.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace Samples
{
public partial class OperationOrchestrator
{
public class Failed { }

}
}
29 changes: 29 additions & 0 deletions samples/OperationOrchestrator.InProgress.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using PSIBR.Liminality;
using System.Threading;
using System.Threading.Tasks;

namespace Samples
{
public partial class OperationOrchestrator
{
[Transition<Ping, InProgress>]
[Transition<Pause, Pausing>]
[Transition<Complete, Completed>]
[Transition<Cancel, Cancelling>]
[Transition<Throw, Failed>]
public class InProgress
: IAfterEnterHandler<OperationOrchestrator, Start>
{
public ValueTask<AggregateSignalResult?> AfterEnterAsync(SignalContext<OperationOrchestrator> context, Start signal, CancellationToken cancellationToken = default)
{
//do work

// if the work is in the state machine,
// you probably want some extra form of checkpointing and break up long processes.
// Additionally you could add cancellation via a subscription your state store on the Cancelling state's after entry action
return default;
}
}

}
}
11 changes: 11 additions & 0 deletions samples/OperationOrchestrator.Paused.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using PSIBR.Liminality;

namespace Samples
{
public partial class OperationOrchestrator
{
[Transition<Resume, Requesting.Requested>]
public class Paused { }

}
}
12 changes: 12 additions & 0 deletions samples/OperationOrchestrator.Pausing.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using PSIBR.Liminality;

namespace Samples
{
public partial class OperationOrchestrator
{
[Transition<Throw, Failed>]
[Transition<Cancel, Cancelled>]
public class Pausing { }

}
}
22 changes: 22 additions & 0 deletions samples/OperationOrchestrator.Repository.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using PSIBR.Liminality;

namespace Samples
{
public partial class OperationOrchestrator
{
public class Repository
{
private readonly LiminalEngine _engine;
private readonly StateMachineDefinition<OperationOrchestrator> _definition;

public Repository(LiminalEngine engine, StateMachineDefinition<OperationOrchestrator> definition)
{
_engine = engine;
_definition = definition;
}

public OperationOrchestrator Find(string orchestrationId) => new(_engine, _definition, orchestrationId);
}

}
}
Loading

0 comments on commit de8311b

Please sign in to comment.