Seguidores

domingo, 15 de junho de 2025

Dashboard de Produtividade Pessoal T1E08: BugCT1-2 Não fez login

INTRODUÇÃO

Post anterior: Dashboard de Produtividade Pessoal T1E07: BugCT1-1 Correção por IA

O objetivo deste post é apresentar um prompt para o Gemini 2.5 Pro (Prévia), no qual é feito o relato do bug do Caso de Teste 1, identificado por "BugCT1-2 Não fez login". 



Prompt para Gemini 2.5 Pro (Prévia)

1 Objetivo

Corrija esses bugs no App Dashboard de Produtividade Pessoal:

1.1 Não fez login com o ID de Cliente OAuth 2.0

1.2 Não executou a nova função função gravarTarefaNaPlanilha

 

2 Contexto

2.1 Criei o ID de Cliente OAuth 2.0

2.2 Fiz as alterações no código FrontEnd, conforme o passo a passo

2.3 Segue o link para o código do FrontEnd: https://drive.google.com/file/d/1cSZwZOHSu0VrjyUI4NEDu6o0fOojZ_EO/view?usp=drive_link

2.4 Como tenho pouco conhecimento de JavaScript, certamente errei ao seguir o passo a passo, portanto, peço sua ajuda para corrigir e fazer funcionar.

Resposta do Gemini 2.5 Pro (Prévia)

Olá! Sem problemas, esses erros de integração são muito comuns, principalmente ao lidar com APIs externas pela primeira vez. A boa notícia é que eles costumam ser simples de resolver.

Analisando os sintomas que você descreveu, os bugs provavelmente estão em dois pontos-chave: a forma como o script de autenticação do Google é carregado na sua página e a conexão entre o seu botão "Finalizar" e a nova função gravarTarefaNaPlanilha.

Para corrigir, vou fornecer abaixo uma versão completa e corrigida do script. Ele unifica o código de autenticação com a lógica de gravação, tornando-o um bloco único e mais fácil de gerenciar.


## Código Front-End Corrigido e Completo

Substitua todo o bloco <script> que você adicionou anteriormente por este código. Ele foi projetado para ser uma solução "copia e cola", exigindo apenas que você preencha suas chaves pessoais.

HTML

<script>

// ===================================================================================

// BLOCO DE CÓDIGO CORRIGIDO PARA O DASHBOARD DE PRODUTIVIDADE

// ===================================================================================

 

// --- 1. CONFIGURAÇÃO - SUBSTITUA PELOS SEUS DADOS ---

const CLIENT_ID = 'SEU_ID_DE_CLIENTE_AQUI.apps.googleusercontent.com'; // **OBRIGATÓRIO:** Cole o ID de Cliente que você criou.

const SPREADSHEET_ID = 'SEU_ID_DA_PLANILHA_AQUI';                      // **OBRIGATÓRIO:** Pegue este ID da URL da sua planilha.

const SCOPES = 'https://www.googleapis.com/auth/spreadsheets';

 

// --- 2. LÓGICA DE AUTENTICAÇÃO E API DO GOOGLE ---

 

// Referências para os botões de login/logout no HTML.

// Garanta que seus botões no HTML tenham os IDs 'authorize_button' e 'signout_button'.

const authorizeButton = document.getElementById('authorize_button');

const signoutButton = document.getElementById('signout_button');

 

/**

 * Função principal que é chamada assim que a biblioteca da API do Google é carregada.

 */

function startApp() {

  gapi.load('client:auth2', function() {

    console.log(' Bibliotecas do Google carregadas.');

 

    gapi.client.init({

      clientId: CLIENT_ID,

      scope: SCOPES,

      discoveryDocs: ['https://sheets.googleapis.com/$discovery/rest?version=v4'],

    }).then(function () {

      console.log('🚀 Cliente GAPI inicializado.');

     

      const authInstance = gapi.auth2.getAuthInstance();

      authInstance.isSignedIn.listen(updateSigninStatus);

      updateSigninStatus(authInstance.isSignedIn.get());

 

      // Associa as funções de login/logout aos cliques dos botões.

      authorizeButton.onclick = () => authInstance.signIn();

      signoutButton.onclick = () => authInstance.signOut();

 

    }, function(error) {

      console.error(' Erro ao inicializar GAPI:', JSON.stringify(error, null, 2));

      alert('Erro crítico ao inicializar a API do Google. Verifique o Client ID e as configurações no Google Cloud Console.');

    });

  });

}

 

/**

 * Atualiza a interface (mostra/esconde botões) com base no status de login.

 */

function updateSigninStatus(isSignedIn) {

  if (isSignedIn) {

    console.log('👤 Usuário está logado.');

    authorizeButton.style.display = 'none';

    signoutButton.style.display = 'block';

  } else {

    console.log('👤 Usuário não está logado. Autorização necessária.');

    authorizeButton.style.display = 'block';

    signoutButton.style.display = 'none';

  }

}

 

/**

 * Função para gravar os dados de uma tarefa finalizada na planilha.

 * @param {Array<string>} dadosDaLinha - Um array com os dados da linha a ser inserida.

 */

function gravarTarefaNaPlanilha(dadosDaLinha) {

  if (!gapi.auth2.getAuthInstance().isSignedIn.get()) {

    alert('Erro: Autorização necessária. Faça o login com o Google para salvar a tarefa.');

    return;

  }

 

  const params = {

    spreadsheetId: SPREADSHEET_ID,

    range: 'A:G', // Gravará na próxima linha vazia do intervalo A:G

    valueInputOption: 'USER_ENTERED',

  };

 

  const valueRangeBody = { 'values': [dadosDaLinha] };

 

  console.log('📤 Enviando dados para a planilha:', JSON.stringify(valueRangeBody));

 

  gapi.client.sheets.spreadsheets.values.append(params, valueRangeBody)

    .then(function(response) {

      console.log(' Dados inseridos com sucesso!', response);

    }, function(error) {

      console.error(' Erro ao inserir dados na planilha:', error.result.error.message);

      alert(`Ocorreu um erro ao salvar na planilha: ${error.result.error.message}. Verifique o console (F12) para mais detalhes.`);

    });

}

 

 

// --- 3. CONEXÃO COM A LÓGICA DO SEU APLICATIVO ---

 

/**

 * Esta é a função que o seu botão "Finalizar Tarefa" deve chamar.

 * Ela serve como uma ponte entre a sua interface e a função de gravação.

 */

function handleFinalizarTarefaClick() {

  console.log('▶️ Botão "Finalizar Tarefa" clicado.');

 

  // --- Simulação da coleta de dados da sua tela ---

  // Substitua este bloco com a lógica real para pegar os dados dos campos da sua tela.

  // Por exemplo: document.getElementById('nomeTarefa').value;

  const dadosDaTarefaFinalizada = {

      codigo: 'S00.1.1.02', // Exemplo

      nome: 'Tarefa 2 Teste 1', // Exemplo

      tamanho: 1, // Exemplo

      duracao: '00:01:00', // Exemplo

      produtividade: 60.0 // Exemplo

  };

  // ------------------------------------------------

 

  // Monta o array de dados na ordem exata das colunas da planilha

  const dadosParaEnviar = [

    new Date().toLocaleString("pt-BR"),       // Coluna A: DataHoraFinalizada

    dadosDaTarefaFinalizada.codigo,           // Coluna B: CodigoTarefa

    dadosDaTarefaFinalizada.nome,             // Coluna C: NomeTarefa

    dadosDaTarefaFinalizada.tamanho,          // Coluna D: TamanhoTarefa

    dadosDaTarefaFinalizada.duracao,          // Coluna E: DuracaoTarefaMinutos

    "Nenhum",                                 // Coluna F: TiposDeDefeito

    dadosDaTarefaFinalizada.produtividade.toFixed(2) // Coluna G: Produtividade

  ];

 

  // Chama a função que efetivamente grava os dados na planilha

  gravarTarefaNaPlanilha(dadosParaEnviar);

}

</script>

 

<script async defer src="https://apis.google.com/js/api.js" onload="startApp()"></script>


## Instruções de Implementação (Passo a Passo)

  1. Remova o Código Antigo: Vá ao seu arquivo HTML e delete completamente o bloco <script> que você adicionou no passo anterior, incluindo a linha que carrega apis.google.com/js/api.js. Vamos começar do zero para não haver conflitos.
  2. Copie e Cole o Novo Código: Copie todo o bloco de código corrigido acima (da linha `` até </script>) e cole-o no seu arquivo HTML, logo antes do fechamento da tag `&lt;/body>`.
  3. Atualize Suas Credenciais: No código que você acabou de colar, preencha as constantes CLIENT_ID e SPREADSHEET_ID com os seus valores. Este passo é fundamental.
  4. Conecte seu Botão "Finalizar": A forma mais simples de garantir que a função seja chamada é fazer o seguinte:
    • Encontre o botão "Finalizar" no seu código HTML.
    • Adicione um atributo onclick a ele para chamar a nossa nova função de "ponte", handleFinalizarTarefaClick().

Exemplo de como seu botão deve ficar:

HTML

<button class="finalizar-btn" onclick="handleFinalizarTarefaClick()">Finalizar</button>

Como Testar 🧐

  1. Salve o arquivo HTML.
  2. Abra-o no seu navegador.
  3. Pressione F12 para abrir as "Ferramentas de Desenvolvedor" e clique na aba "Console".
  4. Você deverá ver as mensagens: " Bibliotecas do Google carregadas.", "🚀 Cliente GAPI inicializado." e "👤 Usuário não está logado.".
  5. Clique no botão "Login com Google" e autorize sua conta. O console mostrará "👤 Usuário está logado.".
  6. Clique no seu botão "Finalizar Tarefa". O console deverá mostrar "▶️ Botão 'Finalizar Tarefa' clicado." e, em seguida, "📤 Enviando dados para a planilha...".
  7. Se tudo der certo, você verá a mensagem " Dados inseridos com sucesso!". Se houver um erro, a mensagem " Erro ao inserir dados..." aparecerá, e a causa do erro estará descrita.

CONCLUSÃO

Mais uma vez o Gemini 2.5 Pro (Prévia) corrigiu o código fonte JavaScript do FrontEnd do App Dashboard de Produtividade Pessoal (D2P).




Nenhum comentário:

Postar um comentário

Entendendo a Metáfora "Home Office é Moto Boy"

UCEM L-pI.170 Exercícios Parte I Lição 170 - Caso de uso da IA para estudar

  Lição anterior Escolher outra lição Próxima lição Lição 170   Não há crueldade em Deus e nem em mim. Texto e audio da  Lição 170  no site ...