Пример #1
0
 private async Task HandleMessage(UpdatePaymentResultMessage updatePaymentResultMessage)
 {
     try
     {
         await _emailRepo.SendAndLogEmail(updatePaymentResultMessage);
     }
     catch (Exception e)
     {
         throw;
     }
 }
Пример #2
0
 private async Task HandleMessage(UpdatePaymentResultMessage updatePaymentResultMessage)
 {
     try
     {
         await _orderRepository.UpdateOrderPaymentStatus(updatePaymentResultMessage.OrderId,
                                                         updatePaymentResultMessage.Status);
     }
     catch (Exception e)
     {
         throw;
     }
 }
Пример #3
0
        public async Task SendAndLogEmail(UpdatePaymentResultMessage message)
        {
            //implement an email sender or call some other class library
            EmailLog emailLog = new EmailLog()
            {
                Email     = message.Email,
                EmailSent = DateTime.Now,
                Log       = $"Order - {message.OrderId} has been created successfully."
            };

            await using var _db = new ApplicationDbContext(_dbContext);
            _db.EmailLogs.Add(emailLog);
            await _db.SaveChangesAsync();
        }
Пример #4
0
        private async Task OnOrderPaymentUpdateReceived(ProcessMessageEventArgs args)
        {
            var message = args.Message;
            var body    = Encoding.UTF8.GetString(message.Body);

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

            try
            {
                await _emailRepo.SendAndLogEmail(objMessage);

                await args.CompleteMessageAsync(args.Message);
            }
            catch (Exception e)
            {
                throw;
            }
        }
Пример #5
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());
                UpdatePaymentResultMessage updatePaymentResultMessage = JsonConvert.DeserializeObject <UpdatePaymentResultMessage>(content);
                HandleMessage(updatePaymentResultMessage).GetAwaiter().GetResult();

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

            return(Task.CompletedTask);
        }
Пример #6
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);
        }
    }