public async Task HandleAsync(CompleteDelivery command) { var delivery = await _deliveriesRepository.GetAsync(command.DeliveryId); if (delivery is null) { throw new Exception($"Delivery: {command.DeliveryId:N} was not found."); } delivery.Complete(); await _deliveriesRepository.UpdateAsync(delivery); _logger.LogInformation($"Completed a delivery: {command.DeliveryId:N}."); var domainEvents = delivery.Events; foreach (var domainEvent in domainEvents) { await _domainEventPublisher.PublishAsync(domainEvent); } delivery.ClearEvents(); var integrationEvents = delivery.Parcels.Select(id => new DeliveryCompleted(command.DeliveryId, id)); foreach (var integrationEvent in integrationEvents) { await _dispatcher.PublishAsync(integrationEvent); } }
public override async Task HandleAsync(FailDelivery command) { var delivery = await _repository.GetAsync(command.Id); if (delivery is null) { throw new DeliveryNotFoundException(command.Id); } delivery.Fail(); await _repository.UpdateAsync(delivery); await PublishEventsAsync(delivery); }
public async Task HandleAsync(CompleteDelivery command) { var delivery = await _repository.GetAsync(command.DeliveryId); if (delivery is null) { throw new DeliveryNotFoundException(command.DeliveryId); } delivery.Complete(); await _repository.UpdateAsync(delivery); var events = _eventMapper.MapAll(delivery.Events); await _messageBroker.PublishAsync(events.ToArray()); }
public async Task HandleAsync(CompleteDelivery command) { var delivery = await _deliveriesRepository.GetAsync(command.DeliveryId); if (delivery is null) { throw new Exception($"Delivery with id: {command.DeliveryId} was not found."); } delivery.Complete(); await _deliveriesRepository.UpdateAsync(delivery); var eventsToPublish = delivery.Parcels.Select(p => _messageBroker.PublishAsync( new DeliveryCompleted(command.DeliveryId, p.Id))); await Task.WhenAll(eventsToPublish); _logger.LogInformation($"Completed a delivery with id: {command.DeliveryId}"); }
public async Task HandleAsync(AddDeliveryRegistration command) { var delivery = await _repository.GetAsync(command.DeliveryId); if (delivery is null) { throw new DeliveryNotFoundException(command.DeliveryId); } delivery.AddRegistration(new DeliveryRegistration(command.Description, command.DateTime)); if (delivery.HasChanged) { await _repository.UpdateAsync(delivery); var events = _eventMapper.MapAll(delivery.Events); await _messageBroker.PublishAsync(events.ToArray()); } }