/// <summary>
        /// Save Order Details.
        /// </summary>
        /// <param name="orderDetailViewModel"></param>
        /// <param name="cartItemList"></param>
        /// <param name="userDetail"></param>
        /// <returns></returns>
        public IResult SaveOrderDetails(OrderDetailViewModel orderDetailViewModel, List <CartItemViewModel> cartItemList, UserDetailForOrder userDetail)
        {
            orderDetailViewModel.OrderId = null;
            var result = new Result
            {
                Operation = Operation.Create,
                Status    = Status.Success
            };

            try
            {
                OrderDetail orderDetail = null;
                if (orderDetailViewModel != null)
                {
                    orderDetail = new OrderDetail();
                    orderDetail.MapFromViewModel(orderDetailViewModel);
                    if (userDetail != null)
                    {
                        orderDetail.UserId    = ObjectId.Parse(userDetail.UserId);
                        orderDetail.AddressId = ObjectId.Parse(userDetail.AddressId);
                    }
                    else
                    {
                        result.Message = UserNotification.NoUser;
                    }
                    orderDetail.CartItems = new List <CartItem>();
                    _orderDetailRepository.InsertOne(orderDetail);

                    if (cartItemList != null && cartItemList.Any())
                    {
                        var cartItems = new List <CartItem>();
                        cartItemList.ForEach(x =>
                        {
                            var cartItem = new CartItem();
                            cartItem.MapFromViewModel(x);
                            cartItems.Add(cartItem);
                        });
                        var updateDefinition = Builders <OrderDetail> .Update.AddToSetEach(x => x.CartItems, cartItems);

                        _orderDetailRepository.UpdateOne(t => t.OrderId == orderDetail.OrderId, updateDefinition);
                    }
                    else
                    {
                        result.Message = OrderNotification.NoCartItems;
                    }
                    orderDetailViewModel.MapFromModel(orderDetail);
                    orderDetailViewModel.cartItems = cartItemList;
                    result.Body    = orderDetailViewModel;
                    result.Message = OrderNotification.Saved;
                }
                else
                {
                    result.Message = OrderNotification.OrderDetailsNotProvided;
                }
            }
            catch (Exception e)
            {
                result.Message = e.Message;
                result.Status  = Status.Fail;
            }
            return(result);
        }