public async Task <IActionResult> Post([FromBody] AddShoppingCartModel shoppingCartModel)
        {
            IIdentity fedIdentity = GetFederationIdentity(HttpContext.User.Identities);

            if (null == fedIdentity)
            {
                return(ResponseHelper.Forbidden());
            }

            // Get current user session id.
            string sessionID = string.Empty;

            if (fedIdentity.IsAuthenticated)
            {
                int count = await _cartItemRepository.AddAsync(
                    sessionID, shoppingCartModel.UserID,
                    shoppingCartModel.ProductID, shoppingCartModel.Amount);

                if (count > 0)
                {
                    return(Ok());
                }
            }

            return(ResponseHelper.NotAcceptable());
        }
        public async Task <IActionResult> Post([FromBody] AddShoppingCartModel model)
        {
            if (string.IsNullOrEmpty(model.UserID) ||
                Guid.Empty == model.ProductID || 0 >= model.Amount)
            {
                return(ResponseHelper.NotAcceptable());
            }
            var product = await _productRepository.GetAsync(model.ProductID);

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

            List <ShipAddress> addressList = await _shipAddressRepository.GetAddressAsync(model.UserID, 50, 0);

            Order order = new Order()
            {
                Address     = addressList.Count > 0 ? addressList[0].ToString() + "(mobile)" : string.Empty + "(mobile)",
                OrderID     = Guid.NewGuid(),
                OrderDate   = DateTime.Now,
                OrderStatus = OrderStatus.PendingPayment,
                UserID      = model.UserID,
            };

            OrderDetail orderDetail = new OrderDetail()
            {
                OrderID        = order.OrderID,
                PlaceDate      = DateTime.Now,
                ProductName    = product.ProductName,
                ProductID      = product.ProductID,
                ThumbImagePath = product.ThumbnailImage,
                UnitPrice      = product.UnitPrice,
                Quantity       = model.Amount,
                SubTotal       = product.UnitPrice * model.Amount
            };

            order.TotalPrice = orderDetail.SubTotal;

            Guid orderID = await _orderRepository.AddAsync(order);

            // Add order failed.
            if (orderID == Guid.Empty)
            {
                return(ResponseHelper.InternalServerError());
            }

            int count = await _orderDetailRepository.AddAsync(orderDetail);

            if (0 < count)
            {
                return(Ok());
            }
            else
            {
                return(ResponseHelper.InternalServerError());
            }
        }