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;
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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;
            }
        }