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

            if (ProductItemsAvailable(order))
            {
                try
                {
                    // Publish OrderStatusChangedMessage. If this operation
                    // fails, the order will not be created
                    messagePublisher.PublishOrderStatusChangedMessage(
                        order.customerId, order.OrderLines, "completed");

                    // Create order.
                    order.Status = Order.OrderStatus.completed;
                    var newOrder = repository.Add(order);
                    return(CreatedAtRoute("GetOrder", new { id = newOrder.Id }, newOrder));
                }
                catch
                {
                    return(StatusCode(500, "An error happened. Try again."));
                }
            }
            else
            {
                // If there are not enough product items available.
                return(StatusCode(500, "Not enough items in stock."));
            }
        }
        public IActionResult Post([FromBody] Order order)
        {
            if (order == null)
            {
                return(BadRequest());
            }

            // Call product service to get the product ordered
            var orderedProduct = productServiceGateway.Get(order.ProductId);

            if (order.Quantity <= orderedProduct.ItemsInStock - orderedProduct.ItemsReserved)
            {
                try
                {
                    // Publish OrderStatusChangedMessage. If this operation
                    // fails, the order will not be created
                    messagePublisher.PublishOrderStatusChangedMessage(order.ProductId,
                                                                      order.Quantity, "orderCompleted");

                    // Create order.
                    order.Status = Order.OrderStatus.completed;
                    var newOrder = repository.Add(order);
                    return(CreatedAtRoute("GetOrder", new { id = newOrder.Id }, newOrder));
                }
                catch
                {
                    return(StatusCode(500, "An error happened. Try again."));
                }
            }
            else
            {
                // If the order could not be created, "return no content".
                return(StatusCode(500, "Not enough items in stock."));
            }
        }
示例#3
0
        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."));
            }
        }
        public IActionResult Post([FromBody] Order order)
        {
            if (order == null)
            {
                return(BadRequest());
            }

            // Get the Product from Product API
            var orderedProduct = productServiceGateway.Get(order.ProductId);

            if (order.Quantity <= orderedProduct.ItemsInStock - orderedProduct.ItemsReserved)
            {
                /*
                 *              // reduce the number of items in stock for the ordered product,
                 * // and create a new order.
                 * orderedProduct.ItemsReserved += order.Quantity;
                 * var updateRequest = new RestRequest(orderedProduct.Id.ToString(), Method.PUT);
                 * updateRequest.AddJsonBody(orderedProduct);
                 * var updateResponse = c.Execute(updateRequest);
                 */

                try
                {
                    // Publish OrderStatusChangedMessage. If this operation
                    // fails, the order will not be created
                    messagePublisher.PublishOrderStatusChangedMessage(order.ProductId,
                                                                      order.Quantity, "orderCompleted");

                    // Create order.
                    order.Status = Order.OrderStatus.completed;
                    var newOrder = repository.Add(order);
                    return(CreatedAtRoute("GetOrder", new { id = newOrder.Id }, newOrder));
                }
                catch
                {
                    return(StatusCode(500, "An error happened. Try again."));
                }
            }
            else
            {
                // If the order could not be created, "return no content".
                return(StatusCode(500, "Not enough items in stock."));
            }
        }
示例#5
0
        public IActionResult Post([FromBody] SharedOrders order)
        {
            if (order == null || order.customerId < 1)
            {
                return(BadRequest());
            }

            //if (ProductItemsAvailable(order) && CustomerExists(order))
            if (CustomerExists(order))
            {
                try
                {
                    foreach (var item in order.OrderLines)
                    {
                        if (!messagePublisher.ProductExists(item.ProductId, item.Quantity))
                        {
                            return(StatusCode(500, "Not enough items in stock."));
                        }
                    }

                    // Publish OrderStatusChangedMessage. If this operation
                    // fails, the order will not be created
                    messagePublisher.PublishOrderStatusChangedMessage(
                        order.customerId, order.OrderLines, "completed");

                    // Create order.
                    order.Status = SharedOrders.OrderStatus.completed;
                    var newOrder = repository.Add(order);
                    return(CreatedAtRoute("GetOrder", new { id = newOrder.Id }, newOrder));
                }
                catch (Exception e)
                {
                    return(StatusCode(500, "An error happened. Try again." + e));
                }
            }
            else
            {
                // If there are not enough product items available.
                return(StatusCode(500, "Not enough items in stock."));
            }
        }
示例#6
0
        public IActionResult Post([FromBody] Order order)
        {
            if (order == null)
            {
                return(BadRequest());
            }

            RestClient restClient = new RestClient();

            // Ask Customer service if Customer is valid
            restClient.BaseUrl = new Uri("http://customerapi/customers/");
            var customerRequest  = new RestRequest(order.CustomerId.ToString(), Method.GET);
            var customerResponse = restClient.Execute(customerRequest);

            if (!customerResponse.IsSuccessful)
            {
                return(BadRequest(customerResponse.ErrorMessage));
            }

            var customer = JObject.Parse(customerResponse.Content);

            if (customer is null)
            {
                return(StatusCode(404, "The entered customer doesn't seem to exist yet. Please select an existing/valid customer"));
            }

            //localhost:5000/orders/?CustomerNo=1
            restClient.BaseUrl = new Uri("http://orderapi/orders/");
            var          orderRequest   = new RestRequest("?CustomerNo=" + customer.GetValue("customerId"), Method.GET);
            var          orderResponse  = restClient.Execute <List <Order> >(orderRequest);
            List <Order> customerOrders = orderResponse.Data;

            bool hasOutstandingCredit = customerOrders.Any(order => order.Status == Order.OrderStatus.shipped);

            if (hasOutstandingCredit)
            {
                return(BadRequest("Customer have credit standing"));
            }

            // Ask Product service if products are available
            if (ProductItemsAvailable(order))
            {
                try
                {
                    // Publish OrderStatusChangedMessage. If this operation
                    // fails, the order will not be created
                    messagePublisher.PublishOrderStatusChangedMessage(
                        order.CustomerId, order.OrderLines, "completed");

                    // Create order.
                    order.Status = Order.OrderStatus.completed;
                    var newOrder = _repository.Add(order);
                    return(CreatedAtRoute("GetOrder", new { id = newOrder.Id }, newOrder));
                }
                catch
                {
                    return(StatusCode(500, "An error happened. Try again."));
                }
            }
            else
            {
                // If there are not enough product items available.
                return(StatusCode(500, "Not enough items in stock."));
            }
        }