public IActionResult Post([FromBody] Order order) { if (order == null) { return(BadRequest("Order could not be created")); } if (messagePublisher.IsInStock(order)) { var customer = GetCustomer(order.customerId); if (customer == null) { return(StatusCode(500, "The customer does not exist!")); } if (customer.CreditStanding) { try { // Publish OrderStatusChangedMessage. If this operation // fails, the order will not be created messagePublisher.PublishOrderStatusChangedMessage( order.customerId, order.OrderLines, "completed"); order.Status = Order.OrderStatus.completed; var newOrder = repository.Add(order); return(CreatedAtRoute("GetOrder", new { id = newOrder.Id }, newOrder)); } catch (Exception x) { return(StatusCode(500, "An error happened. Try again.")); } } else { return(StatusCode(500, "Customer does not have enough resources")); } } else { // If there are not enough product items available. return(StatusCode(500, "Not enough items in stock.")); } }