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"

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