Exemple #1
0
        public async Task Consume(ConsumeContext <PlaceOrder> context)
        {
            Console.WriteLine($"Message received: {JsonSerializer.Serialize(context.Message)}");

            var orderNumber = await _orderNumberGenerator.GetNumber(context.Message.UserId);

            var order = new Order
            {
                Id             = context.Message.Id,
                Number         = orderNumber,
                ProductIds     = string.Join(",", context.Message.ProductIds),
                ShippingTypeId = context.Message.ShippingTypeId,
                UserId         = context.Message.UserId,
                TimeStamp      = DateTime.UtcNow,
                Amount         = _costCalculator.CostForProducts(context.Message.ProductIds)
            };

            await _ordersRepository.Add(order);

            await _dbContext.SaveChangesAsync();

            //Some expensive calculation
            Thread.Sleep(10000);

            await _eventBus.Publish(new OrderCreated
            {
                OrderId        = order.Id,
                Number         = order.Number,
                ProductIds     = order.ProductIds.Split(","),
                ShippingTypeId = order.ShippingTypeId,
                UserId         = order.UserId,
                TimeStamp      = order.TimeStamp,
                Amount         = order.Amount
            });

            await _commandBus.Send(new CreateShipping
            {
                OrderId        = order.Id,
                UserId         = order.UserId,
                ShippingTypeId = order.ShippingTypeId
            });
        }