Seguidores

domingo, 15 de junho de 2025

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

INTRODUÇÃO

Post anterior: Dashboard de Produtividade Pessoal T1E06: Caso de Teste 1 - BugCT1-1 Falta API do Google Sheets

O objetivo deste post é apresentar um prompt para o Gemini 2.5 Pro (Prévia), cujo objetivo é pedir que o próprio ChatBot de IA faça a correção do código JavaScript que o mesmo definiu, a fim de solucionar o BugTCT1-1.

Tentei fazer a correção mas não consegui, porque meu conhecimento de JavaScript é de nível básico.


Comando para o Gemini 2.5 Pro (Prévia)

Adicione a função function start() ao código do frontend, porque meu conhecimento de Javascript é de nível básico, portanto, achei o código muito complexo.

Resposta do Gemini 2.5 Pro (Prévia)

Com certeza! É um prazer ajudar a montar essa parte do código. A autenticação com APIs pode ser confusa no início, mas vamos criar um bloco de código claro e bem explicado que você poderá integrar ao seu projeto.

O código abaixo é uma solução completa para a interação com a API do Google. Ele inclui:

  1. A function start() que você pediu.
  2. Funções para login e logout do usuário.
  3. Uma função principal chamada gravarTarefaNaPlanilha() que você usará para enviar os dados para o back-end.

Bloco de Código Completo para o Front-End

Copie e cole este bloco de código inteiro dentro de uma tag <script> no seu arquivo HTML, de preferência antes do fechamento da tag </body>.

HTML

<button id="authorize_button" style="display: none;">Login com Google</button>

<button id="signout_button" style="display: none;">Sair</button>

 

<script>

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

// BLOCO DE CÓDIGO PARA INTEGRAÇÃO COM GOOGLE SHEETS

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

 

// --- 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.

// Ex: https://docs.google.com/spreadsheets/d/ID_DA_PLANILHA/edit

 

// O 'escopo' define o nível de permissão que estamos pedindo ao usuário.

// Neste caso, permissão para ler e escrever em planilhas.

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

 

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

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 start() {

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

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

 

    // Inicializa o cliente da API do Google com suas credenciais.

    gapi.client.init({

      clientId: CLIENT_ID,

      scope: SCOPES,

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

    }).then(function () {

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

     

      // Escuta por mudanças no status de login (se o usuário logou ou deslogou).

      gapi.auth2.getAuthInstance().isSignedIn.listen(updateSigninStatus);

 

      // Verifica o status de login inicial.

      updateSigninStatus(gapi.auth2.getAuthInstance().isSignedIn.get());

 

    }, function(error) {

      // Se houver um erro na inicialização, exibe no console.

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

    });

  });

}

 

/**

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

 * @param {boolean} isSignedIn - True se o usuário estiver logado.

 */

function updateSigninStatus(isSignedIn) {

  if (isSignedIn) {

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

    authorizeButton.style.display = 'none'; // Esconde o botão de login

    signoutButton.style.display = 'block';  // Mostra o botão de sair

  } else {

    console.log('Usuário não está logado. Por favor, autorize a aplicação.');

    authorizeButton.style.display = 'block'; // Mostra o botão de login

    signoutButton.style.display = 'none';  // Esconde o botão de sair

  }

}

 

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

authorizeButton.onclick = () => gapi.auth2.getAuthInstance().signIn();

signoutButton.onclick = () => gapi.auth2.getAuthInstance().signOut();

 

/**

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

 * Esta é a função que você chamará do seu código existente.

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

 * Ex: ['2024-06-15T18:30:00Z', 'S00', 'Minha Tarefa', '5', '00:01:01', 'Nenhum', '295.08']

 */

function gravarTarefaNaPlanilha(dadosDaTarefa) {

  // Verifica se o usuário está logado antes de tentar gravar.

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

    alert('Erro: Você precisa estar logado com o Google para salvar a tarefa.');

    return;

  }

 

  const params = {

    spreadsheetId: SPREADSHEET_ID,

    range: 'A:G', // Grava a partir da coluna A. A API encontrará a próxima linha vazia.

    valueInputOption: 'USER_ENTERED', // Simula a digitação do usuário, permitindo fórmulas e formatação.

  };

 

  const valueRangeBody = {

    'values': [

      dadosDaTarefa // Os dados devem estar dentro de um array de arrays.

    ]

  };

 

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

 

  // Executa a requisição para a API do Google Sheets para adicionar a linha.

  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 a tarefa na planilha. Verifique o console para mais detalhes.');

    });

}

 

// Inicia todo o processo. Esta linha carrega o script da API do Google.

// Não a remova ou altere.

document.write('<script async defer src="https://apis.google.com/js/api.js" onload="start()"></script>');

 

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

// FIM DO BLOCO DE CÓDIGO

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

</script>


Como Integrar e Usar

Siga estes 4 passos simples para fazer tudo funcionar.

Passo 1: Adicione os Botões ao HTML

Copie os dois botões abaixo e cole no corpo (<body>) do seu arquivo index.html, em um local visível.

HTML

<button id="authorize_button" style="display: none;">Login com Google</button>

<button id="signout_button" style="display: none;">Sair</button>

Eles começarão escondidos (display: none;) e o script os mostrará conforme a necessidade.

Passo 2: Adicione o Bloco de Código JavaScript

Copie o bloco <script>...</script> inteiro acima e cole no final do seu arquivo index.html, logo antes de </body>.

Passo 3: Substitua os Dados de Configuração

No bloco de código que você colou, encontre estas duas linhas e preencha com seus dados:

JavaScript

const CLIENT_ID = 'SEU_ID_DE_CLIENTE_AQUI.apps.googleusercontent.com';

const SPREADSHEET_ID = 'SEU_ID_DA_PLANILHA_AQUI';

Passo 4: Chame a Função gravarTarefaNaPlanilha

Agora vem a parte final: conectar com o seu código existente.

No seu arquivo Javascript, encontre a função que é executada quando você clica no botão "Finalizar" de uma tarefa. Dentro dessa função, você já tem todos os dados da tarefa. Agora, basta chamar a nova função gravarTarefaNaPlanilha().

Veja um exemplo de como sua função "Finalizar Tarefa" deve ficar:

JavaScript

// EXEMPLO de como sua função de finalizar tarefa deve ficar:

 

function suaFuncaoDeFinalizarTarefa(tarefa) {

  // ... seu código que para o cronômetro e calcula a duração ...

 

  // 1. Monte o array de dados na ordem exata das colunas da planilha

  const dadosParaEnviar = [

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

    tarefa.codigo,                      // Coluna B: CodigoTarefa (Ex: 'S00')

    tarefa.nome,                        // Coluna C: NomeTarefa (Ex: 'Tarefa')

    tarefa.tamanho,                     // Coluna D: TamanhoTarefa (Ex: 5)

    tarefa.duracaoEfetiva,              // Coluna E: DuracaoTarefaMinutos (Ex: '00:01:01')

    "Nenhum",                           // Coluna F: TiposDeDefeito

    tarefa.produtividadeCalculada       // Coluna G: Produtividade (Ex: 295.08)

  ];

 

  // 2. Chame a função global que criamos para gravar na planilha

  gravarTarefaNaPlanilha(dadosParaEnviar);

 

  // ... resto do seu código que limpa a tela, etc. ...

}

Ao rodar seu aplicativo, você primeiro precisará clicar no botão "Login com Google" para autorizar. Uma vez autorizado, cada vez que você finalizar uma tarefa, a função gravarTarefaNaPlanilha será chamada e os dados aparecerão na sua Google Sheet.

CONCLUSÃO


Agora que temos o login com Google configurado e o código corrigido, vamos executar o Caso de Teste 1 Tarefa sem pausa.

Próxim post: 

Nenhum comentário:

Postar um comentário

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

Dashboard de Produtividade Pessoal T1E14: RESOLVIDO BugCT1-5 Erro 400 no login

INTRODUÇÃO Post anterior:  Dashboard de Produtividade Pessoal T1E13: BugCT1-5 Erro 400 no login O objetivo deste post é apresentar um prompt...