示例#1
0
        public void ProcessMessage(IHandlerContext <OrderCreatedEvent> context)
        {
            if (!context.TransportMessage.IsHandledHere())
            {
                return;
            }

            var orderProcessId = new Guid(context.TransportMessage.CorrelationId);

            var orderProcess = new OrderProcess(orderProcessId);

            using (_databaseContextFactory.Create(ProcessManagementData.ConnectionStringName))
            {
                var stream = _eventStore.Get(orderProcessId);

                if (stream.IsEmpty)
                {
                    throw new ApplicationException(
                              string.Format("Could not find an order process with correlation id '{0}'.",
                                            context.TransportMessage.CorrelationId));
                }

                stream.Apply(orderProcess);

                stream.AddEvent(orderProcess.ChangeStatus("Order Created"));
                stream.AddEvent(orderProcess.AssignOrderId(context.Message.OrderId));

                _eventStore.SaveEventStream(stream);
            }

            context.Send(orderProcess.CreateInvoiceCommand());
        }