private async Task HandleMessage(UpdatePaymentResultMessage updatePaymentResultMessage) { try { await _emailRepo.SendAndLogEmail(updatePaymentResultMessage); } catch (Exception e) { throw; } }
private async Task HandleMessage(UpdatePaymentResultMessage updatePaymentResultMessage) { try { await _orderRepository.UpdateOrderPaymentStatus(updatePaymentResultMessage.OrderId, updatePaymentResultMessage.Status); } catch (Exception e) { throw; } }
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(); }
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; } }
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); }
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); } }