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); }
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); }
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); } }
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; } } } }