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.220 (200) Revisão VI - Caso de uso da IA para estudar

  Lição 220  Eu não sou um corpo. Eu sou livre.  Pois ainda sou como Deus me criou. Lição anterior Escolher outra lição Próxima lição Texto ...