Exemple #1
0
        public async Task <object> Checkout(CheckoutHeaderDto checkoutHeader)
        {
            try
            {
                CartDto cartDto = await _cartRepository.GetCartByUserId(checkoutHeader.UserId);

                if (cartDto == null)
                {
                    return(BadRequest());
                }

                if (!string.IsNullOrEmpty(checkoutHeader.CouponCode))
                {
                    CouponDto coupon = await _couponRepository.GetCoupon(checkoutHeader.CouponCode);

                    if (checkoutHeader.DiscountTotal != coupon.DiscountAmount)
                    {
                        _response.IsSuccess     = false;
                        _response.ErrorMessages = new List <string>()
                        {
                            "Coupon Price has changed, please confirm"
                        };
                        _response.DisplayMessage = "Coupon Price has changed, please confirm";
                        return(_response);
                    }
                }

                checkoutHeader.CartDetails = cartDto.CartDetails;
                //logic to add message to process order.
                await _messageBus.PublishMessage(checkoutHeader, "checkoutqueue");

                ////rabbitMQ
                //_rabbitMQCartMessageSender.SendMessage(checkoutHeader, "checkoutqueue");
                await _cartRepository.ClearCart(checkoutHeader.UserId);
            }
            catch (Exception ex)
            {
                _response.IsSuccess     = false;
                _response.ErrorMessages = new List <string>()
                {
                    ex.ToString()
                };
            }
            return(_response);
        }
Exemple #2
0
        protected override Task ExecuteAsync(CancellationToken stoppingToken)
        {
            stoppingToken.ThrowIfCancellationRequested();

            var consumer = new EventingBasicConsumer(_channel);

            consumer.Received += (ch, ea) =>
            {
                var content = Encoding.UTF8.GetString(ea.Body.ToArray());
                CheckoutHeaderDto checkoutHeaderDto = JsonConvert.DeserializeObject <CheckoutHeaderDto>(content);
                HandleMessage(checkoutHeaderDto).GetAwaiter().GetResult();

                _channel.BasicAck(ea.DeliveryTag, false);
            };
            _channel.BasicConsume("checkoutqueue", false, consumer);

            return(Task.CompletedTask);
        }
Exemple #3
0
        private async Task OnCheckOutMessageReceived(ProcessMessageEventArgs args)
        {
            var message = args.Message;
            var body    = Encoding.UTF8.GetString(message.Body);

            CheckoutHeaderDto checkoutHeaderDto = JsonConvert.DeserializeObject <CheckoutHeaderDto>(body);

            OrderHeader orderHeader = new()
            {
                UserId          = checkoutHeaderDto.UserId,
                FirstName       = checkoutHeaderDto.FirstName,
                LastName        = checkoutHeaderDto.LastName,
                OrderDetails    = new List <OrderDetails>(),
                CardNumber      = checkoutHeaderDto.CardNumber,
                CouponCode      = checkoutHeaderDto.CouponCode,
                CVV             = checkoutHeaderDto.CVV,
                DiscountTotal   = checkoutHeaderDto.DiscountTotal,
                Email           = checkoutHeaderDto.Email,
                ExpiryMonthYear = checkoutHeaderDto.ExpiryMonthYear,
                OrderTime       = DateTime.Now,
                OrderTotal      = checkoutHeaderDto.OrderTotal,
                PaymentStatus   = false,
                Phone           = checkoutHeaderDto.Phone,
                PickupDateTime  = checkoutHeaderDto.PickupDateTime
            };

            foreach (var detailList in checkoutHeaderDto.CartDetails)
            {
                OrderDetails orderDetails = new()
                {
                    ProductId   = detailList.ProductId,
                    ProductName = detailList.Product.Name,
                    Price       = detailList.Product.Price,
                    Count       = detailList.Count
                };
                orderHeader.CartTotalItems += detailList.Count;
                orderHeader.OrderDetails.Add(orderDetails);
            }

            await _orderRepository.AddOrder(orderHeader);


            PaymentRequestMessage paymentRequestMessage = new()
            {
                Name            = orderHeader.FirstName + " " + orderHeader.LastName,
                CardNumber      = orderHeader.CardNumber,
                CVV             = orderHeader.CVV,
                ExpiryMonthYear = orderHeader.ExpiryMonthYear,
                OrderId         = orderHeader.OrderHeaderId,
                OrderTotal      = orderHeader.OrderTotal,
                Email           = orderHeader.Email
            };

            try
            {
                await _messageBus.PublishMessage(paymentRequestMessage, orderPaymentProcessTopic);

                await args.CompleteMessageAsync(args.Message);
            }
            catch (Exception e)
            {
                throw;
            }
        }

        private async Task OnOrderPaymentUpdateReceived(ProcessMessageEventArgs args)
        {
            var message = args.Message;
            var body    = Encoding.UTF8.GetString(message.Body);

            UpdatePaymentResultMessage paymentResultMessage = JsonConvert.DeserializeObject <UpdatePaymentResultMessage>(body);

            await _orderRepository.UpdateOrderPaymentStatus(paymentResultMessage.OrderId, paymentResultMessage.Status);

            await args.CompleteMessageAsync(args.Message);
        }
    }
Exemple #4
0
        private async Task HandleMessage(CheckoutHeaderDto checkoutHeaderDto)
        {
            OrderHeader orderHeader = new()
            {
                UserId          = checkoutHeaderDto.UserId,
                FirstName       = checkoutHeaderDto.FirstName,
                LastName        = checkoutHeaderDto.LastName,
                OrderDetails    = new List <OrderDetails>(),
                CardNumber      = checkoutHeaderDto.CardNumber,
                CouponCode      = checkoutHeaderDto.CouponCode,
                CVV             = checkoutHeaderDto.CVV,
                DiscountTotal   = checkoutHeaderDto.DiscountTotal,
                Email           = checkoutHeaderDto.Email,
                ExpiryMonthYear = checkoutHeaderDto.ExpiryMonthYear,
                OrderTime       = DateTime.Now,
                OrderTotal      = checkoutHeaderDto.OrderTotal,
                PaymentStatus   = false,
                Phone           = checkoutHeaderDto.Phone,
                PickupDateTime  = checkoutHeaderDto.PickupDateTime
            };

            foreach (var detailList in checkoutHeaderDto.CartDetails)
            {
                OrderDetails orderDetails = new()
                {
                    ProductId   = detailList.ProductId,
                    ProductName = detailList.Product.Name,
                    Price       = detailList.Product.Price,
                    Count       = detailList.Count
                };
                orderHeader.CartTotalItems += detailList.Count;
                orderHeader.OrderDetails.Add(orderDetails);
            }

            await _orderRepository.AddOrder(orderHeader);


            PaymentRequestMessage paymentRequestMessage = new()
            {
                Name            = orderHeader.FirstName + " " + orderHeader.LastName,
                CardNumber      = orderHeader.CardNumber,
                CVV             = orderHeader.CVV,
                ExpiryMonthYear = orderHeader.ExpiryMonthYear,
                OrderId         = orderHeader.OrderHeaderId,
                OrderTotal      = orderHeader.OrderTotal,
                Email           = orderHeader.Email
            };

            try
            {
                //await _messageBus.PublishMessage(paymentRequestMessage, orderPaymentProcessTopic);
                //await args.CompleteMessageAsync(args.Message);
                _rabbitMQOrderMessageSender.SendMessage(paymentRequestMessage, "orderpaymentprocesstopic");
            }
            catch (Exception e)
            {
                throw;
            }
        }
    }
}