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