public void AddNewOrder(Order newOrder) { var orderId = Guid.NewGuid(); newOrder.Id = orderId; Datastore.TryAdd(orderId, newOrder); using (var bus = RabbitHutch.CreateBus(Settings.Default.RabbitMqConnectionString)) { var identity = User.Identity as ClaimsIdentity; var subjectId = identity?.Claims.FirstOrDefault(c => c.Type == "sub")?.Value; // TODO: re-think data/message shapes, coupling, and mapping <- pragmatic? var message = new NewOrderMessage { UserId = subjectId, Order = Mapper.Map <QueuingMessages.Order>(newOrder) }; bus.Publish(message); GlobalHost.ConnectionManager.GetHubContext <OrdersHub>() .Clients.Group(message.UserId) .orderCreated(); } }
public IHttpActionResult AddNewOrder(Order newOrder) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var orderId = Guid.NewGuid(); newOrder.Id = orderId; try { Datastore.TryAdd(orderId, newOrder); } catch (Exception e) { string message = "We could not add the new order."; Log.Error(message + $" Reason: {0}", e); throw new OrderServiceException(message); } // TODO: Retry & exception handling using (var bus = RabbitHutch.CreateBus(Settings.Default.RabbitMqConnectionString)) { var identity = User.Identity as ClaimsIdentity; var subjectId = identity?.Claims.FirstOrDefault(c => c.Type == "sub")?.Value; var message = new NewOrderMessage { UserId = subjectId, Order = Mapper.Map <QueuingMessages.Order>(newOrder) }; // TODO: Exception handling bus.Publish(message); GlobalHost.ConnectionManager.GetHubContext <OrdersHub>() .Clients.Group(message.UserId) .orderCreated(); } return(Ok(newOrder)); }