public async Task Handle(OrderStockUpdatedMessage message) { _logger.LogInformation($"OrderStockUpdated message was received. Order Id = {message.OrderId}"); var wallet = await _dbContext.Wallets.FirstOrDefaultAsync(x => x.UserId == message.UserId); var totalPrice = message.Products.Sum(x => x.Quantity * x.UnitPrice); if (wallet.Balance >= totalPrice) { wallet.Balance -= totalPrice; await _dbContext.SaveChangesAsync(); await _kafkaMessageProducer.Produce(OrderWalletPayCompletedTopicName, message.OrderId.ToString(), new { message.OrderId }); _logger.LogInformation($"OrderWalletPayCompleted message was sent. Order Id = {message.OrderId}"); } else { var orderWalletPayErrorMessage = new OrderWalletPayErrorMessage { OrderId = message.OrderId, WalletError = WalletError.InsufficientBalance, Products = message.Products.Select(x => new ProductDto { ProductId = x.ProductId, Quantity = x.Quantity }) }; await _kafkaMessageProducer.Produce(OrderWalletPayErrorTopicName, message.OrderId.ToString(), orderWalletPayErrorMessage); _logger.LogWarning($"OrderWalletPayError message was sent. Order Id = {message.OrderId}"); } }
private async Task ProduceOrderStockUpdateErrorMessage(OrderCreatedMessage orderCreatedMessage) { await _kafkaMessageProducer.Produce(OrderStockUpdateErrorTopic, orderCreatedMessage.Id.ToString(), new OrderStockUpdateErrorMessage { OrderId = orderCreatedMessage.Id, StockUpdateError = StockUpdateError.StockNotEnough }); }
public async Task <IActionResult> Create([FromBody] Order order) { var entityEntry = await _dbContext.Orders.AddAsync(order); var savedOrder = entityEntry.Entity; _logger.LogInformation($"Order accepted. Order Id = {savedOrder.Id}"); await _dbContext.SaveChangesAsync(); await _messageProducer.Produce(OrderCreatedTopicName, savedOrder.Id.ToString(), savedOrder); _logger.LogInformation($"OrderCreated message was sent. Order Id = {savedOrder.Id}"); Response.Headers.Add("Location", $"/orders/{savedOrder.Id}"); return(Accepted()); }