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();
            }
        }
Example #2
0
        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));
        }