public void ProcessMessage(IHandlerContext <RegisterOrderProcessCommand> context) { var message = context.Message; var orderProcess = new OrderProcess(); var stream = new EventStream(orderProcess.Id); var initialized = orderProcess.Initialize(); stream.AddEvent(initialized); stream.AddEvent(orderProcess.AssignCustomer(message.CustomerName, message.CustomerEMail)); stream.AddEvent(orderProcess.AssignTargetSystem(message.TargetSystem, message.TargetSystemUri)); var status = orderProcess.ChangeStatus("Cooling Off"); stream.AddEvent(status); foreach (var quotedProduct in message.QuotedProducts) { stream.AddEvent(orderProcess.AddItem(quotedProduct.ProductId, quotedProduct.Description, quotedProduct.Price)); } using (_databaseContextFactory.Create(ProcessManagementData.ConnectionStringName)) { _eventStore.SaveEventStream(stream); } context.Publish(new OrderProcessRegisteredEvent { OrderProcessId = orderProcess.Id, QuotedProducts = message.QuotedProducts, CustomerName = message.CustomerName, CustomerEMail = message.CustomerEMail, OrderNumber = initialized.OrderNumber, OrderDate = initialized.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 <RegisterUserCommand> context) { var message = context.Message; var id = Guid.NewGuid(); Registered registered; using (_databaseContextFactory.Create()) { var key = User.Key(message.EMail); if (_keyStore.Contains(key)) { if (!message.EMail.Equals("shuttle", StringComparison.InvariantCultureIgnoreCase)) { context.Send(new SendEMailCommand { Body = string.Format("<p>Hello,</p><br/><p>Unfortunately e-mail '{0}' has been assigned before your user could be registered. Please register again.</p><br/><p>Regards</p>", message.EMail), Subject = "User registration failure", IsBodyHtml = true, To = message.EMail }); } return; } _keyStore.Add(id, key); var user = new User(id); var stream = new EventStream(id); registered = user.Register(message.EMail, message.PasswordHash, message.RegisteredBy); stream.AddEvent(registered); _eventStore.SaveEventStream(stream); } context.Publish(new UserRegisteredEvent { Id = id, EMail = message.EMail, RegisteredBy = message.RegisteredBy, DateRegistered = registered.DateRegistered }); }