public async Task <bool> Contratar(Funcionario funcionario) { if (!funcionario.EhValido()) { Notificar(funcionario.ValidationResult); return(false); } var cargo = await _funcionarioRepository.ObterCargoPorId(funcionario.CargoId); if (cargo == null) { Notificar("Cargo informado inválido"); return(false); } if (await FuncionarioContratado(funcionario)) { Notificar($"{funcionario.Nome} já faz parte do quadro de funcionários"); return(false); } var senhaAutomatica = funcionario.Usuario.Senha; var hash = _passwordHash.GetHashPassword(senhaAutomatica); funcionario.Usuario.AdicionarHashSenha(hash); if (await _funcionarioRepository.Contratar(funcionario)) { await _mediatorHandler.PublicarEvento( new NovoFuncionarioEvent(funcionario.Email.Endereco, funcionario.Nome, senhaAutomatica)); return(true); } Notificar("Erro ao contratar novo funcionário"); return(false); }