public static Funcionario AtualizarFuncionarioCommandToFuncionario(AtualizarFuncionarioCommand command) =>
 command == null ? null :
 new Funcionario(
     command.Id,
     command.Nome,
     command.DataNascimento,
     command.Cpf,
     new Contato(command.Celular, command.Telefone, command.Email),
     command.CargoId,
     cargo: null,
     registroFuncionarioAtivo: true
     );
        public IActionResult Atualizar(FuncionarioViewModel model)
        {
            var command = new AtualizarFuncionarioCommand(
                model.Id,
                model.Nome,
                model.DataNascimento,
                model.Cpf,
                model.Celular,
                model.Telefone,
                model.Email,
                model.Cargo.Id
                );

            var result = handler.SendCommand(command);

            return(RedirectToAction("Index"));
            //return View(result);
        }
        public async Task <ICommandResult> Handle(AtualizarFuncionarioCommand command, CancellationToken cancellationToken)
        {
            var result = new CommandResult(true, "Não foi possível atualizar Funcionário!");

            // Ações necessárias para resolver o comando
            if (!command.IsValid())
            {
                return(result.AddNotifications("Dados Inválidos"));
            }

            if (service.ExisteEmail(command.Email))
            {
                return(result.AddNotifications("Email já cadastrado"));
            }

            if (service.ExisteCPF(command.Cpf))
            {
                return(result.AddNotifications("CPF já cadastrado"));
            }

            try
            {
                var funcionarioAtualizado = FuncionarioAdapter.AtualizarFuncionarioCommandToFuncionario(command);
                //var funcionarioAtual = service.BuscarPorId(funcionarioAtualizado.Id);
                //funcionarioAtual = funcionarioAtualizado;

                service.Atualizar(funcionarioAtualizado);
            }
            catch (Exception ex)
            {
                return(new CommandResult(false, $"Ocorreu um erro ao atualizar Funcionário. Erro.: {ex.Message}"));
            }

            // Invocar eventos

            if (!await service.SaveChanges())
            {
                return(result);
            }

            return(new CommandResult(true, "Funcionário atualizado com sucesso!"));
        }