Esempio n. 1
0
        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);
        }
Esempio n. 3
0
        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());
        }
Esempio n. 4
0
        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}");
        }
Esempio n. 5
0
        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());
            }
        }