Пример #1
0
        public async Task <IActionResult> Checkout(CheckoutInfoInput checkoutInfoInput)
        {
            // 1. Yol Senkron İletişim
            // -----------------------
            //var orderStatus = await _orderService.CreateOrder(checkoutInfoInput);

            //if (!orderStatus.IsSuccessful)
            //{
            //    var basket = await _basketService.Get();
            //    ViewBag.basket = basket;
            //    ViewBag.error = orderStatus.Error;
            //    return View();
            //}

            //return RedirectToAction(nameof(SuccessfulCheckout), new { orderId = orderStatus.OrderId });

            // --------------------------------------------------------------------------------

            // 2. Yol Asenkron İletişim
            // -----------------------
            var orderStatus = await _orderService.SuspendOrder(checkoutInfoInput);

            if (!orderStatus.IsSuccessful)
            {
                var basket = await _basketService.Get();

                ViewBag.basket = basket;
                ViewBag.error  = orderStatus.Error;
                return(View());
            }

            return(RedirectToAction(nameof(SuccessfulCheckout), new { orderId = new Random().Next(1, 1000) }));
        }
        public async Task <OrderSuspendViewModel> SuspendOrder(CheckoutInfoInput checkoutInfoInput)
        {
            var basket = await _basketService.Get();

            var orderCreateInput = new OrderCreateInput()
            {
                BuyerId = _sharedIdentityService.GetUserId,
                Address = new AddressCreateInput()
                {
                    Province = checkoutInfoInput.Province,
                    District = checkoutInfoInput.District,
                    Street   = checkoutInfoInput.Street,
                    ZipCode  = checkoutInfoInput.ZipCode,
                    Line     = checkoutInfoInput.Line
                }
            };

            basket.BasketItems.ForEach(x =>
            {
                orderCreateInput.OrderItems.Add(new OrderItemCreateInput()
                {
                    ProductId   = x.CourseId,
                    Price       = x.GetCurrentPrice,
                    PictureUrl  = "",
                    ProductName = x.CourseName
                });
            });

            var paymentInfoInput = new PaymentInfoInput()
            {
                CardName   = checkoutInfoInput.CardName,
                CardNumber = checkoutInfoInput.CardNumber,
                Expiration = checkoutInfoInput.Expiration,
                CVV        = checkoutInfoInput.CVV,
                TotalPrice = basket.TotalPrice,
                Order      = orderCreateInput
            };

            var responsePayment = await _paymentService.ReveivePayment(paymentInfoInput);

            if (!responsePayment)
            {
                return(new OrderSuspendViewModel()
                {
                    Error = "Ödeme alınamadı",
                    IsSuccessful = false
                });
            }

            await _basketService.Delete();

            return(new OrderSuspendViewModel()
            {
                IsSuccessful = true
            });
        }
Пример #3
0
        public async Task <OrderCreatedViewModel> CreateOrder(CheckoutInfoInput checkoutInfoInput)
        {
            var basket = await _basketService.Get();

            var paymentInfoInput = new PaymentInfoInput()
            {
                CardName   = checkoutInfoInput.CardName,
                CardNumber = checkoutInfoInput.CardNumber,
                Expiration = checkoutInfoInput.Expiration,
                CVV        = checkoutInfoInput.CVV,
                TotalPrice = basket.TotalPrice
            };
            var responsePayment = await _paymentService.ReceivePayment(paymentInfoInput);

            if (!responsePayment)
            {
                return(new OrderCreatedViewModel()
                {
                    Error = "Ödeme alınamadı", IsSuccessful = false
                });
            }

            var orderCreateInput = new OrderCreateInput()
            {
                BuyerId = _sharedIdentityService.GetUserId,
                Address = new AddressCreateInput {
                    Province = checkoutInfoInput.Province, District = checkoutInfoInput.District, Street = checkoutInfoInput.Street, Line = checkoutInfoInput.Line, ZipCode = checkoutInfoInput.ZipCode
                },
            };

            basket.BasketItems.ForEach(x =>
            {
                var orderItem = new OrderItemCreateInput {
                    ProductId = x.CourseId, Price = x.GetCurrentPrice, PictureUrl = "", ProductName = x.CourseName
                };
                orderCreateInput.OrderItems.Add(orderItem);
            });

            var response = await _httpClient.PostAsJsonAsync <OrderCreateInput>("orders", orderCreateInput);

            if (!response.IsSuccessStatusCode)
            {
                return(new OrderCreatedViewModel()
                {
                    Error = "Sipariş oluşturulamadı", IsSuccessful = false
                });
            }

            var orderCreatedViewModel = await response.Content.ReadFromJsonAsync <Response <OrderCreatedViewModel> >();

            orderCreatedViewModel.Data.IsSuccessful = true;
            await _basketService.Delete();

            return(orderCreatedViewModel.Data);
        }
Пример #4
0
        public async Task <IActionResult> Checkout(CheckoutInfoInput checkoutInfoInput)
        {
            //1 - synchronous communication
            //  var orderStatus = await _orderService.CreateOrder(checkoutInfoInput);
            //2 - asynchronous communication
            var orderSuspend = await _orderService.SuspendOrder(checkoutInfoInput);

            if (!orderSuspend.IsSuccessful)
            {
                var basket = await _basketService.Get();

                ViewBag.basket = basket;

                ViewBag.error = orderSuspend.Error;

                return(View());
            }
            //1 - synchronous communication
            //  return RedirectToAction(nameof(SuccessfulCheckout), new { orderId = orderStatus.OrderId });

            //2 - asynchronous communication
            return(RedirectToAction(nameof(SuccessfulCheckout), new { orderId = new Random().Next(1, 1000) }));
        }