public void ProcessMessage(IHandlerContext <EMailSentEvent> context) { if (!context.TransportMessage.IsHandledHere()) { return; } OrderProcess orderProcess; using (_databaseContextFactory.Create(ProcessManagementData.ConnectionStringName)) { orderProcess = _repository.Get(new Guid(context.TransportMessage.CorrelationId)); if (orderProcess == null) { throw new ApplicationException( string.Format("Could not find an order process with correlation id '{0}'.", context.TransportMessage.CorrelationId)); } var orderProcessStatus = new OrderProcessStatus("EMail Sent"); orderProcess.AddStatus(orderProcessStatus); _repository.AddStatus(orderProcessStatus, orderProcess.Id); } context.Send(new CompleteOrderProcessCommand { OrderProcessId = orderProcess.Id }, c => c.Local()); }
public void ProcessMessage(IHandlerContext <RegisterOrderProcessCommand> context) { var message = context.Message; var orderProcess = new OrderProcess { OrderId = null, InvoiceId = null, CustomerName = message.CustomerName, CustomerEMail = message.CustomerEMail, TargetSystem = message.TargetSystem, TargetSystemUri = message.TargetSystemUri }; orderProcess.GenerateOrderNumber(); foreach (var quotedProduct in message.QuotedProducts) { orderProcess.AddItem(new OrderProcessItem(quotedProduct.ProductId, quotedProduct.Description, quotedProduct.Price)); } var status = new OrderProcessStatus("Cooling Off"); orderProcess.AddStatus(status); using (_databaseContextFactory.Create(ProcessManagementData.ConnectionStringName)) { _repository.Add(orderProcess); } context.Publish(new OrderProcessRegisteredEvent { OrderProcessId = orderProcess.Id, QuotedProducts = message.QuotedProducts, CustomerName = message.CustomerName, CustomerEMail = message.CustomerEMail, OrderNumber = orderProcess.OrderNumber, OrderDate = orderProcess.DateRegistered, OrderTotal = orderProcess.Total(), Status = status.Status, StatusDate = status.StatusDate, TargetSystem = message.TargetSystem, TargetSystemUri = message.TargetSystemUri }); context.Send(new AcceptOrderProcessCommand { OrderProcessId = orderProcess.Id }, c => c.Defer(DateTime.Now.AddSeconds(10)).Local()); }
public void ProcessMessage(IHandlerContext <AcceptOrderProcessCommand> context) { OrderProcess orderProcess; using (_databaseContextFactory.Create(ProcessManagementData.ConnectionStringName)) { orderProcess = _repository.Get(context.Message.OrderProcessId); if (orderProcess == null) { // Probably cancelled in the meantime. // In a production system you would probably check this against some audit mechanism. return; } var orderProcessStatus = new OrderProcessStatus("Order Accepted"); orderProcess.AddStatus(orderProcessStatus); _repository.AddStatus(orderProcessStatus, orderProcess.Id); } var createOrderCommand = new CreateOrderCommand { OrderNumber = orderProcess.OrderNumber, OrderDate = orderProcess.DateRegistered, CustomerName = orderProcess.CustomerName, CustomerEMail = orderProcess.CustomerEMail }; foreach (var orderProcessItem in orderProcess.OrderProcessItems) { createOrderCommand.Items.Add(new MessageOrderItem { Description = orderProcessItem.Description, Price = orderProcessItem.Price }); } context.Send(createOrderCommand, c => c.WithCorrelationId(orderProcess.Id.ToString())); context.Publish(new OrderProcessAcceptedEvent { OrderProcessId = orderProcess.Id }); }
public void ProcessMessage(IHandlerContext <OrderCreatedEvent> context) { if (!context.TransportMessage.IsHandledHere()) { return; } OrderProcess orderProcess; using (_databaseContextFactory.Create(ProcessManagementData.ConnectionStringName)) { orderProcess = _repository.Get(new Guid(context.TransportMessage.CorrelationId)); if (orderProcess == null) { throw new ApplicationException( string.Format("Could not find an order process with correlation id '{0}'.", context.TransportMessage.CorrelationId)); } var orderProcessStatus = new OrderProcessStatus("Order Created"); orderProcess.AddStatus(orderProcessStatus); _repository.SaveOrderId(context.Message.OrderId, orderProcess.Id); _repository.AddStatus(orderProcessStatus, orderProcess.Id); } var createInvoiceCommand = new CreateInvoiceCommand { OrderId = context.Message.OrderId, AccountContactName = orderProcess.CustomerName, AccountContactEMail = orderProcess.CustomerEMail }; foreach (var messageOrderItem in context.Message.Items) { createInvoiceCommand.Items.Add(new MessageInvoiceItem { Description = messageOrderItem.Description, Price = messageOrderItem.Price }); } context.Send(createInvoiceCommand, c => c.WithCorrelationId(orderProcess.Id.ToString())); }
public void ProcessMessage(IHandlerContext <CompleteOrderProcessCommand> context) { OrderProcess orderProcess; using (_databaseContextFactory.Create(ProcessManagementData.ConnectionStringName)) { orderProcess = _repository.Get(context.Message.OrderProcessId); var orderProcessStatus = new OrderProcessStatus("Completed"); orderProcess.AddStatus(orderProcessStatus); _repository.AddStatus(orderProcessStatus, orderProcess.Id); } context.Publish(new OrderProcessCompletedEvent { OrderProcessId = orderProcess.Id }); }
public void ProcessMessage(IHandlerContext <InvoiceCreatedEvent> context) { if (!context.TransportMessage.IsHandledHere()) { return; } OrderProcess orderProcess; using (_databaseContextFactory.Create(ProcessManagementData.ConnectionStringName)) { orderProcess = _repository.Get(new Guid(context.TransportMessage.CorrelationId)); if (orderProcess == null) { throw new ApplicationException( string.Format("Could not find an order process with correlation id '{0}'.", context.TransportMessage.CorrelationId)); } var orderProcessStatus = new OrderProcessStatus("Invoice Created"); orderProcess.AddStatus(orderProcessStatus); _repository.SaveInvoiceId(context.Message.InvoiceId, orderProcess.Id); _repository.AddStatus(orderProcessStatus, orderProcess.Id); } context.Send(new SendEMailCommand { RecipientEMail = orderProcess.CustomerEMail, HtmlBody = string.Format( "Hello {0},<br/><br/>Your order number {1} has been dispatched.<br/><br/>Regards,<br/>The Shuttle Books Team", orderProcess.CustomerName, orderProcess.OrderNumber) }); }
public void AddStatus(OrderProcessStatus status) { Guard.AgainstNull(status, "status"); _statuses.Add(status); }