private async Task AlterarEmail(Usuario usuario, string novoEmail)
        {
            var outrosUsuariosComMesmoEmail = await servicoEOL.ExisteUsuarioComMesmoEmail(usuario.Login, novoEmail);

            if (outrosUsuariosComMesmoEmail)
            {
                throw new NegocioException("Já existe outro usuário com o e-mail informado.");
            }

            var retornoEol = await servicoEOL.ObterPerfisPorLogin(usuario.Login);

            if (retornoEol == null || retornoEol.Status != AutenticacaoStatusEol.Ok)
            {
                throw new NegocioException("Ocorreu um erro ao obter os dados do usuário no EOL.");
            }

            if (retornoEol.Perfis == null || !retornoEol.Perfis.Any())
            {
                //pode ser que esse usuário não tenha se logado ainda no sistema, realizar chamada para o serviço de relacionar grupos
                retornoEol = await servicoEOL.RelecionarUsuarioPerfis(usuario.Login);

                if (retornoEol == null || !retornoEol.Perfis.Any())
                {
                    throw new NegocioException("Não é possível alterar o e-mail deste usuário pois o mesmo está sem perfis de acesso.");
                }
            }
            var perfisUsuario = repositorioPrioridadePerfil.ObterPerfisPorIds(retornoEol.Perfis);

            usuario.DefinirPerfis(perfisUsuario);
            usuario.DefinirEmail(novoEmail);
            repositorioUsuario.Salvar(usuario);
            await servicoEOL.AlterarEmail(usuario.Login, novoEmail);
        }
        public async Task <string> SolicitarRecuperacaoSenha(string login)
        {
            var usuario     = repositorioUsuario.ObterPorCodigoRfLogin(null, login);
            var usuarioCore = await servicoEOL.ObterMeusDados(login);

            if (usuarioCore == null)
            {
                throw new NegocioException("Usuário não encontrado.");
            }

            if (usuario == null)
            {
                usuario = servicoUsuario.ObterUsuarioPorCodigoRfLoginOuAdiciona(usuarioCore.CodigoRf, null, usuarioCore.Nome, usuarioCore.Email);
            }

            if (usuario.Perfis == null || !usuario.Perfis.Any())
            {
                await servicoEOL.RelecionarUsuarioPerfis(login);
            }

            usuario.DefinirPerfis(await servicoUsuario.ObterPerfisUsuario(login));
            usuario.DefinirEmail(usuarioCore.Email);
            usuario.IniciarRecuperacaoDeSenha();
            repositorioUsuario.Salvar(usuario);
            EnviarEmailRecuperacao(usuario, usuarioCore.Email);
            return(usuarioCore.Email);
        }