public static SagaSnapshot Create(SagaUpdatedMessage message) { var sagaSnapshot = new SagaSnapshot { SagaId = message.SagaId, SagaType = message.SagaType, FinishTime = message.FinishTime, StartTime = message.StartTime, StateAfterChange = message.SagaState, Endpoint = message.Endpoint, InitiatingMessage = CreateInitiatingMessage(message.Initiator) }; if (message.IsNew) { sagaSnapshot.Status = SagaStateChangeStatus.New; } else { sagaSnapshot.Status = SagaStateChangeStatus.Updated; } if (message.IsCompleted) { sagaSnapshot.Status = SagaStateChangeStatus.Completed; } sagaSnapshot.ProcessedAt = message.FinishTime; AddResultingMessages(message.ResultingMessages, sagaSnapshot); return sagaSnapshot; }
public async Task Handle(SagaUpdatedMessage message, IMessageHandlerContext context) { var sagaHistory = new SagaSnapshot { SagaId = message.SagaId, SagaType = message.SagaType, FinishTime = message.FinishTime, StartTime = message.StartTime, StateAfterChange = message.SagaState, Endpoint = message.Endpoint, InitiatingMessage = CreateInitiatingMessage(message.Initiator) }; if (message.IsNew) { sagaHistory.Status = SagaStateChangeStatus.New; } else { sagaHistory.Status = SagaStateChangeStatus.Updated; } if (message.IsCompleted) { sagaHistory.Status = SagaStateChangeStatus.Completed; } sagaHistory.ProcessedAt = message.FinishTime; AddResultingMessages(message.ResultingMessages, sagaHistory); using (var session = store.OpenAsyncSession()) { await session.StoreAsync(sagaHistory).ConfigureAwait(false); await session.SaveChangesAsync().ConfigureAwait(false); } }
public void Handle(SagaUpdatedMessage message) { var sagaHistory = new SagaSnapshot { SagaId = message.SagaId, SagaType = message.SagaType, FinishTime = message.FinishTime, StartTime = message.StartTime, StateAfterChange = message.SagaState, Endpoint = message.Endpoint, InitiatingMessage = CreateInitiatingMessage(message.Initiator) }; if (message.IsNew) { sagaHistory.Status = SagaStateChangeStatus.New; } else { sagaHistory.Status = SagaStateChangeStatus.Updated; } if (message.IsCompleted) { sagaHistory.Status = SagaStateChangeStatus.Completed; } sagaHistory.ProcessedAt = message.FinishTime; AddResultingMessages(message.ResultingMessages, sagaHistory); using (var session = store.OpenSession()) { session.Store(sagaHistory); session.SaveChanges(); } }
static void AddResultingMessages(List<SagaChangeOutput> sagaChangeResultingMessages, SagaSnapshot sagaStateChange) { foreach (var toAdd in sagaChangeResultingMessages) { var resultingMessage = sagaStateChange.OutgoingMessages.FirstOrDefault(x => x.MessageId == toAdd.ResultingMessageId); if (resultingMessage == null) { resultingMessage = new ResultingMessage(); sagaStateChange.OutgoingMessages.Add(resultingMessage); } resultingMessage.MessageType = toAdd.MessageType; resultingMessage.MessageId = toAdd.ResultingMessageId; resultingMessage.TimeSent = toAdd.TimeSent; resultingMessage.DeliveryDelay = toAdd.DeliveryDelay; resultingMessage.DeliverAt = toAdd.DeliveryAt; resultingMessage.Destination = toAdd.Destination; resultingMessage.Intent = toAdd.Intent; } }