public async Task AlterarSenhaComTokenRecuperacao(RecuperacaoSenhaDto recuperacaoSenhaDto)
        {
            Usuario usuario = repositorioUsuario.ObterPorTokenRecuperacaoSenha(recuperacaoSenhaDto.Token);

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

            if (!usuario.TokenRecuperacaoSenhaEstaValido())
            {
                throw new NegocioException("Este link expirou. Clique em continuar para solicitar um novo link de recuperação de senha.", 403);
            }

            usuario.ValidarSenha(recuperacaoSenhaDto.NovaSenha);

            var retornoApi = await servicoEOL.AlterarSenha(usuario.Login, recuperacaoSenhaDto.NovaSenha);

            if (!retornoApi.SenhaAlterada)
            {
                throw new NegocioException(retornoApi.Mensagem, retornoApi.StatusRetorno);
            }

            usuario.FinalizarRecuperacaoSenha();
            repositorioUsuario.Salvar(usuario);
        }
        public async Task AlterarSenha(string login, string senhaAtual, string novaSenha)
        {
            var autenticacao = await servicoEOL.Autenticar(login, senhaAtual);

            if (autenticacao == null || autenticacao.Status != AutenticacaoStatusEol.Ok)
            {
                throw new NegocioException("Senha atual incorreta.", HttpStatusCode.Unauthorized);
            }

            var alteracaoSenha = await servicoEOL.AlterarSenha(login, novaSenha);

            if (!alteracaoSenha.SenhaAlterada)
            {
                throw new NegocioException(alteracaoSenha.Mensagem);
            }
        }