Example #1
0
        public IActionResult Post([FromBody] Order order)
        {
            if (order == null)
            {
                return(BadRequest());
            }

            try
            {
                // Create a tentative order.
                order.Status = Order.OrderStatus.tentative;
                var newOrder = repository.Add(order);

                // Publish OrderStatusChangedMessage.
                messagePublisher.PublishOrderCreatedMessage(
                    newOrder.customerId, newOrder.Id, newOrder.OrderLines);

                // Wait until order status is "completed"
                bool completed = false;
                while (!completed)
                {
                    var tentativeOrder = repository.Get(newOrder.Id);
                    if (tentativeOrder.Status == Order.OrderStatus.completed)
                    {
                        completed = true;
                    }
                    Thread.Sleep(100);
                }

                return(CreatedAtRoute("GetOrder", new { id = newOrder.Id }, newOrder));
            }
            catch
            {
                return(StatusCode(500, "An error happened. Try again."));
            }
        }