コード例 #1
0
        public async Task <bool> Handle(PurchaseBookCommand request, CancellationToken cancellationToken)
        {
            var order = await _db.Orders
                        .Include(x => x.Items)
                        .ThenInclude(x => x.Book)
                        .Include(x => x.Customer)
                        .FirstOrDefaultAsync(x => x.Number == request.Number, cancellationToken);

            if (order == null)
            {
                order = new Order
                {
                    Number     = request.Number,
                    Status     = StatusOrder.Opened,
                    CreateDate = _dateTimeService.Now(),
                    Customer   = await _db.Customers.FirstOrDefaultAsync(x => x.DocumentId == request.CustomerId, cancellationToken)
                };

                if (order.Customer == null)
                {
                    order.Customer = new Customer
                    {
                        DocumentId = request.CustomerId,
                        Name       = request.CustomerName
                    };
                }

                await _db.AddAsync(order, cancellationToken);
            }

            order.Items = new List <OrderItem>();

            foreach (var item in request.Items)
            {
                var orderItem = await GetItemAsync(_db, item, cancellationToken);

                var dropCopyNumberEvent = new DropCopyNumberEvent()
                {
                    Number = item.Number
                };
                await _bus.PublishAsync(ContextNames.Queue.Bookstore, dropCopyNumberEvent);

                order.Items.Add(orderItem);
            }

            await _db.SaveChangesAsync(cancellationToken);

            var dto = new PublishShippingEventCommand
            {
                OrderId = order.Id
            };

            await _bus.SendAsync(ContextNames.Queue.Bookstore, dto);

            await _bus.CommitAsync();

            return(true);
        }
コード例 #2
0
        private bool Handle(PublishShippingEventCommand command)
        {
            var provider = DependencyInjectorStub.Get((s, c) =>
            {
                BootStrapper.RegisterServices(s, c);
                s.AddScoped(x => MockRepository.GetContext());
                s.AddScoped <IBusPublisher>(x => Bus);
            });

            var handler = provider.GetRequiredService <IRequestHandler <PublishShippingEventCommand, bool> >();

            return(handler.Handle(command, CancellationToken.None).GetAwaiter().GetResult());
        }
コード例 #3
0
        protected override async Task RunAsync(IServiceProvider provider)
        {
            List <Order> orders = null;

            using (var context = provider.GetService <DbBookstore>())
            {
                orders = await context.Orders.ToListAsync();
            }

            foreach (var order in orders)
            {
                var message = new PublishShippingEventCommand()
                {
                    OrderId = order.Id
                };

                var bus = provider.GetService <IBusPublisher>();
                await bus.SendAsync(ContextNames.Queue.Bookstore, message);
            }
        }