Exemple #1
0
        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);
        }