public async Task <IActionResult> Checkout(BasketCheckoutDto basketCheckout) { return(await _mediator.Send(new CheckoutBasket.Request() { BasketCheckout = basketCheckout })); }
public async Task <IActionResult> CheckoutBasketAsync([FromBody] BasketCheckoutDto basketCheckout) { try { var basket = await _basketRepository.GetBasketById(basketCheckout.BasketId); if (basket == null) { return(BadRequest()); } BasketCheckoutMessage basketCheckoutMessage = _mapper.Map <BasketCheckoutMessage>(basketCheckout); basketCheckoutMessage.BasketLines = new List <BasketLineMessage>(); int total = 0; foreach (var b in basket.BasketLines) { var basketLineMessage = new BasketLineMessage { BasketLineId = b.BasketLineId, Price = b.Price, TicketAmount = b.TicketAmount }; total += b.Price * b.TicketAmount; basketCheckoutMessage.BasketLines.Add(basketLineMessage); } Discount discount = null; if (basket.DiscountId.HasValue) { discount = await _discountService.GetDiscount(basket.DiscountId.Value); } if (discount != null) { basketCheckoutMessage.BasketTotal = total - discount.Amount; } else { basketCheckoutMessage.BasketTotal = total; } try { ProductPriceChangedIntegrationEvent queueData = new ProductPriceChangedIntegrationEvent (basketCheckoutMessage.BasketId, basketCheckoutMessage.BasketTotal, basketCheckoutMessage.UserId); _eventBus.Publish(queueData); } catch (Exception e) { Console.WriteLine(e); throw; } await _basketRepository.ClearBasket(basketCheckout.BasketId); return(Accepted(basketCheckoutMessage)); } catch (Exception e) { return(StatusCode(StatusCodes.Status500InternalServerError, e.StackTrace)); } }