Exemplo n.º 1
0
        public Task <Guid> Handle(NovaViagemCommand request, CancellationToken cancellationToken)
        {
            erros.Clear();
            alertas.Clear();

            Veiculo veiculo = veiculoRepository.BuscarPordId(request.VeiculoId);

            if (veiculo == null)
            {
                erros.Add($"Veiculo não localizado para o Id {request.VeiculoId}");
                return(Task.FromResult(Guid.Empty));
            }

            var viagem = veiculo.NovaViagem(request.Origem, request.Destino);

            foreach (var mercadoriaId in request.Mercadorias)
            {
                var mercadoria = mercadoriaRepository.BuscarPordId(mercadoriaId);
                if (mercadoria == null)
                {
                    alertas.Add($"Mercadoria não localizada para o Id {mercadoriaId}");
                    continue;
                }

                viagem.AdicionarMercadoria(mercadoria);
            }

            if (!viagem.EhValida())
            {
                foreach (var erro in viagem.ValidationResult.Errors)
                {
                    erros.Add($"O campo {erro.PropertyName} esta invalido: {erro.ErrorMessage}");
                }
                return(Task.FromResult(Guid.Empty));
            }

            viagemRepository.Adicionar(viagem);
            return(Task.FromResult(viagem.Id));
        }