From 22136fc8a133474b8e0c9acdaffcfcdfa8223fc1 Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Sun, 18 May 2025 13:19:36 +0000 Subject: [PATCH] Fix: Transaction save error Investigate and resolve an issue where saving new transactions fails, potentially unrelated to the database. --- src/components/dashboard/TransactionForm.tsx | 23 ++++++++++++++++---- src/services/transacaoService.ts | 18 ++++++++++++++- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/components/dashboard/TransactionForm.tsx b/src/components/dashboard/TransactionForm.tsx index 8fb4eeb..3483266 100644 --- a/src/components/dashboard/TransactionForm.tsx +++ b/src/components/dashboard/TransactionForm.tsx @@ -88,16 +88,31 @@ export function TransactionForm({ onSuccess, onCancel }: TransactionFormProps) { ? Math.abs(valorNumerico) : Math.abs(valorNumerico); + // Obtém a sessão atual para acessar o token JWT + const { data: sessionData, error: sessionError } = await supabase.auth.getSession(); + + if (sessionError || !sessionData.session) { + console.error('Erro ao obter sessão:', sessionError); + toast({ + title: "Erro de autenticação", + description: "Não foi possível validar sua sessão. Tente fazer login novamente.", + variant: "destructive" + }); + setIsSubmitting(false); + return; + } + // Cria o nome da tabela dinâmica para este usuário const tabelaTransacoes = `transacoes_${userId}`; - // Insere a transação na tabela específica do usuário usando cast para any - // para contornar a verificação estática de tipos + console.log(`Inserindo transação na tabela ${tabelaTransacoes} para o usuário ${userId}`); + + // Insere a transação na tabela específica do usuário const { error } = await supabase .from(tabelaTransacoes as any) .insert([ { - usuario_id: userId, // Alterado de user para usuario_id + usuario_id: userId, estabelecimento: data.estabelecimento, valor: valorFinal, detalhes: data.detalhes, @@ -111,7 +126,7 @@ export function TransactionForm({ onSuccess, onCancel }: TransactionFormProps) { console.error('Erro ao salvar transação:', error); toast({ title: "Erro ao salvar", - description: "Não foi possível salvar a transação", + description: `Não foi possível salvar a transação: ${error.message}`, variant: "destructive" }); } else { diff --git a/src/services/transacaoService.ts b/src/services/transacaoService.ts index f5d473f..9648844 100644 --- a/src/services/transacaoService.ts +++ b/src/services/transacaoService.ts @@ -11,8 +11,17 @@ export async function getTransacoes(): Promise { return []; } + // Verificar se temos uma sessão válida + const { data: sessionData } = await supabase.auth.getSession(); + if (!sessionData.session) { + console.error('Sessão não encontrada'); + return []; + } + const tabelaTransacoes = `transacoes_${userId}`; + console.log(`Consultando tabela: ${tabelaTransacoes}`); + // Usando .rpc para chamar uma função SQL ou .from() com cast para any para contornar a checagem de tipos const { data, error } = await supabase .from(tabelaTransacoes as any) @@ -29,7 +38,7 @@ export async function getTransacoes(): Promise { // Transformar os dados recebidos para o formato esperado, normalizando os tipos return data.map((item: any) => ({ id: item.id.toString(), - user: item.usuario_id || '', // Alterado de user para usuario_id + user: item.usuario_id || '', created_at: item.created_at, valor: item.tipo?.toLowerCase() === 'receita' ? Math.abs(item.valor || 0) : -Math.abs(item.valor || 0), quando: item.quando || new Date().toISOString(), @@ -49,6 +58,13 @@ export async function getTransactionSummary() { return { receitas: 0, despesas: 0, saldo: 0 }; } + // Verificar se temos uma sessão válida + const { data: sessionData } = await supabase.auth.getSession(); + if (!sessionData.session) { + console.error('Sessão não encontrada'); + return { receitas: 0, despesas: 0, saldo: 0 }; + } + const tabelaTransacoes = `transacoes_${userId}`; const { data, error } = await supabase