Esempio n. 1
0
 public async Task <IActionResult> Checkout(BasketCheckoutDto basketCheckout)
 {
     return(await _mediator.Send(new CheckoutBasket.Request()
     {
         BasketCheckout = basketCheckout
     }));
 }
Esempio n. 2
0
        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));
            }
        }