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 }); }
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); }
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) })); }