Skip to content

Instantly share code, notes, and snippets.

@dcomartin
Created March 25, 2025 19:51
Show Gist options
  • Save dcomartin/07c8a1a1a73720e3fc1025286f86351d to your computer and use it in GitHub Desktop.
Save dcomartin/07c8a1a1a73720e3fc1025286f86351d to your computer and use it in GitHub Desktop.
class ShippingPolicy(ILogger<ShippingPolicy> logger) : Saga<ShippingPolicyData>,
IAmStartedByMessages<OrderBilled>,
IAmStartedByMessages<OrderPlaced>
{
protected override void ConfigureHowToFindSaga(SagaPropertyMapper<ShippingPolicyData> mapper)
{
mapper.MapSaga(sagaData => sagaData.OrderId)
.ToMessage<OrderPlaced>(message => message.OrderId)
.ToMessage<OrderBilled>(message => message.OrderId);
}
public Task Handle(OrderPlaced message, IMessageHandlerContext context)
{
logger.LogInformation("OrderPlaced message received for {OrderId}.", message.OrderId);
Data.IsOrderPlaced = true;
return ProcessOrder(context);
}
public Task Handle(OrderBilled message, IMessageHandlerContext context)
{
logger.LogInformation("OrderBilled message received for {OrderId}.", message.OrderId);
Data.IsOrderBilled = true;
return ProcessOrder(context);
}
async Task ProcessOrder(IMessageHandlerContext context)
{
if (Data.IsOrderPlaced && Data.IsOrderBilled)
{
await context.SendLocal(new ShipOrder() { OrderId = Data.OrderId });
MarkAsComplete();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment