public async Task <IActionResult> Details([FromRoute] long ID)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var product = await mProductClient.GetProductAsync(ID);

            return(View(product));
        }
        public async Task <IActionResult> GetOrders()
        {
            // Usually, you would get userid from an access token, for example. This is hardcoded for simplicity.
            long userID = 1;

            var xOrders = await mOrderClient.GetOrdersByUserID(userID);

            var orders = new List <GetOrderResponse>();

            foreach (var order in xOrders)
            {
                var getproductTasks = order.OrderItems.Select(oi => mProductClient.GetProductAsync(oi.ProductID)).ToList();

                var orderItems = new List <GetOrderResponseItem>();
                for (int i = 0; i < getproductTasks.Count; i++)
                {
                    var product = await getproductTasks[i];

                    orderItems.Add(new GetOrderResponseItem(
                                       id: order.OrderItems[i].ID,
                                       productID: product.ID,
                                       productName: product.Name,
                                       price: product.Price,
                                       quantity: order.OrderItems[i].Quantity
                                       ));
                }

                orders.Add(new GetOrderResponse(
                               id: order.ID,
                               totalPrice: orderItems.Sum(ci => ci.Price * ci.Quantity),
                               address: order.Address,
                               deliveryMethod: order.DeliveryMethod,
                               orderStatus: order.OrderStatus,
                               orderItems: orderItems
                               ));
            }

            return(Ok(orders));
        }
예제 #3
0
        public async Task <IActionResult> GetProduct([FromRoute] long ID)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var product = await mProductClient.GetProductAsync(ID);

            if (product == null)
            {
                return(NotFound());
            }

            return(Ok(product));
        }
        public async Task <IActionResult> CheckoutAsync([FromBody] CheckoutRequest request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            // Usually, you would get userid from an access token, for example. This is hardcoded for simplicity.
            var userID = 1;

            var cart = await mCartClient.GetCartByUserIDAsync(userID);

            if (!cart.CartItems.Any())
            {
                return(BadRequest());
            }

            var getproductTasks = cart.CartItems.Select(ci => mProductClient.GetProductAsync(ci.ProductID)).ToList();

            var orderItems = new List <XAddOrderItemRequestItems>();

            for (int i = 0; i < getproductTasks.Count; i++)
            {
                var product = await getproductTasks[i];

                orderItems.Add(new XAddOrderItemRequestItems
                {
                    ProductID = product.ID,
                    Quantity  = cart.CartItems[i].Quantity,
                    Price     = product.Price
                });
            }

            var bAddOrderSuccess = await mOrderClient.AddOrderAsync(new XAddOrderRequest
            {
                UserID         = userID,
                Address        = request.Address,
                DeliveryMethod = request.DeliveryMethod.Value,
                OrderItems     = orderItems
            });

            if (!bAddOrderSuccess)
            {
                return(new ObjectResult(null)
                {
                    StatusCode = (int)HttpStatusCode.InternalServerError
                });
            }

            var bUpdateCartStatusSuccess = await mCartClient.UpdateCartStatus(userID, new XUpdateCartStatusRequest { Status = EXCartStatus.Ordered });

            if (!bUpdateCartStatusSuccess)
            {
                return(new ObjectResult(null)
                {
                    StatusCode = (int)HttpStatusCode.InternalServerError
                });
            }

            return(Ok());
        }
예제 #5
0
 public Task <GetProductResponse> GetProductAsync(int productId)
 {
     return(_productClient.GetProductAsync(GetProductRequest.CreateNew(productId)));
 }