Fix: Transactions not loading for user

The application is not fetching transactions for the user leopootz10@gmail.com.
This commit is contained in:
gpt-engineer-app[bot] 2025-06-15 22:14:29 +00:00
parent f4f614e86b
commit ba467fd4fe
3 changed files with 114 additions and 23 deletions

View File

@ -37,9 +37,24 @@ const Dashboard = () => {
async function loadData() { async function loadData() {
try { try {
setIsLoading(true); setIsLoading(true);
console.log("Iniciando carregamento de dados para o mês:", selectedMonth); console.log("🚀 [Dashboard] Iniciando carregamento de dados para o mês:", selectedMonth);
// Verificar se existe email no localStorage
const userEmail = localStorage.getItem('userEmail');
console.log("📧 [Dashboard] Email no localStorage:", userEmail);
if (!userEmail) {
console.error("❌ [Dashboard] Email não encontrado no localStorage!");
toast({
title: "Erro de autenticação",
description: "Email do usuário não encontrado. Faça login novamente.",
variant: "destructive"
});
return;
}
// Buscar todos os dados necessários com filtro de mês // Buscar todos os dados necessários com filtro de mês
console.log("📊 [Dashboard] Buscando dados do Supabase...");
const [transacoesData, totalsData, categoriesData, monthlyDataResult, cartoesData] = await Promise.all([ const [transacoesData, totalsData, categoriesData, monthlyDataResult, cartoesData] = await Promise.all([
getTransacoes(selectedMonth), getTransacoes(selectedMonth),
getTransactionSummary(selectedMonth), getTransactionSummary(selectedMonth),
@ -51,7 +66,7 @@ const Dashboard = () => {
// Calcular total dos cartões // Calcular total dos cartões
const totalCartoes = cartoesData.reduce((sum, cartao) => sum + (cartao.total_despesas || 0), 0); const totalCartoes = cartoesData.reduce((sum, cartao) => sum + (cartao.total_despesas || 0), 0);
console.log("Dados obtidos com sucesso:", { console.log("✅ [Dashboard] Dados obtidos com sucesso:", {
transacoes: transacoesData.length, transacoes: transacoesData.length,
totals: totalsData, totals: totalsData,
categories: categoriesData.length, categories: categoriesData.length,
@ -71,12 +86,20 @@ const Dashboard = () => {
setCategories(categoriesData); setCategories(categoriesData);
setMonthlyData(monthlyDataResult); setMonthlyData(monthlyDataResult);
if (transacoesData.length > 0 || categoriesData.length > 0 || monthlyDataResult.length > 0) {
toast({ toast({
title: "Dados carregados com sucesso", title: "Dados carregados com sucesso",
description: `Dados financeiros de ${selectedMonth} foram atualizados` description: `${transacoesData.length} transações encontradas para ${selectedMonth}`
}); });
} else {
toast({
title: "Nenhum dado encontrado",
description: `Não foram encontradas transações para ${selectedMonth}`,
variant: "destructive"
});
}
} catch (error) { } catch (error) {
console.error("Erro ao carregar dados:", error); console.error("💥 [Dashboard] Erro ao carregar dados:", error);
toast({ toast({
title: "Erro ao carregar dados", title: "Erro ao carregar dados",
description: "Verifique a conexão com o Supabase", description: "Verifique a conexão com o Supabase",

View File

@ -8,13 +8,23 @@ import { supabase } from "@/integrations/supabase/client";
export const getUserEmail = (): string | null => { export const getUserEmail = (): string | null => {
const userEmail = localStorage.getItem('userEmail'); const userEmail = localStorage.getItem('userEmail');
console.log("📧 [getUserEmail] Email raw do localStorage:", userEmail);
if (!userEmail) { if (!userEmail) {
console.error('Email do usuário não encontrado no localStorage'); console.error('❌ [getUserEmail] Email do usuário não encontrado no localStorage');
console.log("🔍 [getUserEmail] Verificando todas as chaves do localStorage:");
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
console.log(` ${key}: ${localStorage.getItem(key)}`);
}
return null; return null;
} }
// Normalize the email (lowercase and trim spaces) // Normalize the email (lowercase and trim spaces)
return userEmail.trim().toLowerCase(); const normalizedEmail = userEmail.trim().toLowerCase();
console.log("✅ [getUserEmail] Email normalizado:", normalizedEmail);
return normalizedEmail;
}; };
/** /**
@ -24,20 +34,27 @@ export const getUserEmail = (): string | null => {
*/ */
export const getUserGroups = async (userEmail: string): Promise<string[]> => { export const getUserGroups = async (userEmail: string): Promise<string[]> => {
try { try {
console.log("👥 [getUserGroups] Buscando grupos para email:", userEmail);
const { data: userGroups, error: groupsError } = await supabase const { data: userGroups, error: groupsError } = await supabase
.from('grupos_whatsapp') .from('grupos_whatsapp')
.select('remote_jid') .select('remote_jid')
.eq('login', userEmail); .eq('login', userEmail);
if (groupsError) { if (groupsError) {
console.error('Erro ao buscar grupos do usuário:', groupsError); console.error('❌ [getUserGroups] Erro ao buscar grupos do usuário:', groupsError);
return []; return [];
} }
console.log("👥 [getUserGroups] Grupos encontrados:", userGroups);
// Extract IDs of the groups to use in the filter // Extract IDs of the groups to use in the filter
return userGroups ? userGroups.map(group => group.remote_jid) : []; const groupIds = userGroups ? userGroups.map(group => group.remote_jid) : [];
console.log("👥 [getUserGroups] IDs dos grupos extraídos:", groupIds);
return groupIds;
} catch (error) { } catch (error) {
console.error('Erro ao obter grupos do usuário:', error); console.error('💥 [getUserGroups] Erro ao obter grupos do usuário:', error);
return []; return [];
} }
}; };

View File

@ -9,28 +9,54 @@ import { getUserEmail, getUserGroups } from "./baseService";
* @returns Promise with array of transactions * @returns Promise with array of transactions
*/ */
export async function getTransacoes(monthFilter?: string): Promise<Transaction[]> { export async function getTransacoes(monthFilter?: string): Promise<Transaction[]> {
console.log("Buscando transações do Supabase...", monthFilter ? `Filtro do mês: ${monthFilter}` : "Sem filtro de mês"); console.log("🔍 [getTransacoes] Iniciando busca de transações...");
console.log("🔍 [getTransacoes] Filtro de mês:", monthFilter);
// Get the user's email from localStorage // Get the user's email from localStorage
const normalizedEmail = getUserEmail(); const normalizedEmail = getUserEmail();
console.log("📧 [getTransacoes] Email do usuário obtido:", normalizedEmail);
if (!normalizedEmail) { if (!normalizedEmail) {
console.error("❌ [getTransacoes] Email não encontrado no localStorage");
return []; return [];
} }
console.log("Buscando transações para o usuário com email:", normalizedEmail);
try { try {
// First, get all user's groups by email // First, get all user's groups by email
console.log("👥 [getTransacoes] Buscando grupos do usuário...");
const groupIds = await getUserGroups(normalizedEmail); const groupIds = await getUserGroups(normalizedEmail);
console.log(`Encontrados ${groupIds.length} grupos vinculados ao usuário:`, groupIds); console.log(`👥 [getTransacoes] Encontrados ${groupIds.length} grupos vinculados ao usuário:`, groupIds);
// Build the query with month filter if provided // Build the query with month filter if provided
console.log("🏗️ [getTransacoes] Construindo query...");
let query = supabase let query = supabase
.from('transacoes')
.select('*');
// Debug: First, let's see what's in the transacoes table
console.log("🔎 [getTransacoes] Verificando todas as transações na tabela...");
const { data: allTransactions, error: allError } = await supabase
.from('transacoes') .from('transacoes')
.select('*') .select('*')
.or(`login.eq.${normalizedEmail},${groupIds.length > 0 ? `grupo_id.in.(${groupIds.map(id => `"${id}"`).join(',')})` : ''}`) .limit(10);
.order('quando', { ascending: false });
if (allError) {
console.error("❌ [getTransacoes] Erro ao buscar todas as transações:", allError);
} else {
console.log("📊 [getTransacoes] Total de transações na tabela (primeiras 10):", allTransactions);
console.log("📊 [getTransacoes] Estrutura da primeira transação:", allTransactions[0]);
}
// Now let's build the proper filter
if (groupIds.length > 0) {
query = query.or(`login.eq.${normalizedEmail},grupo_id.in.(${groupIds.map(id => `"${id}"`).join(',')})`);
console.log("🔍 [getTransacoes] Query com grupos:", `login.eq.${normalizedEmail},grupo_id.in.(${groupIds.map(id => `"${id}"`).join(',')})`);
} else {
query = query.eq('login', normalizedEmail);
console.log("🔍 [getTransacoes] Query apenas por email:", normalizedEmail);
}
// Apply month filter if provided // Apply month filter if provided
if (monthFilter) { if (monthFilter) {
@ -43,20 +69,40 @@ export async function getTransacoes(monthFilter?: string): Promise<Transaction[]
.gte('quando', startDate) .gte('quando', startDate)
.lte('quando', `${endDate}T23:59:59.999Z`); .lte('quando', `${endDate}T23:59:59.999Z`);
console.log(`Aplicando filtro de mês: ${startDate} até ${endDate}`); console.log(`📅 [getTransacoes] Aplicando filtro de mês: ${startDate} até ${endDate}`);
} }
query = query.order('quando', { ascending: false });
console.log("🚀 [getTransacoes] Executando query final...");
const { data, error } = await query; const { data, error } = await query;
if (error) { if (error) {
console.error('Erro ao buscar transações:', error); console.error('❌ [getTransacoes] Erro ao executar query:', error);
throw new Error('Não foi possível carregar as transações'); throw new Error('Não foi possível carregar as transações');
} }
console.log("Transações encontradas:", data); console.log("✅ [getTransacoes] Transações encontradas:", data?.length || 0);
console.log("📋 [getTransacoes] Dados retornados:", data);
if (!data || data.length === 0) {
console.warn("⚠️ [getTransacoes] Nenhuma transação encontrada para o usuário:", normalizedEmail);
// Let's check if there are transactions with similar emails
console.log("🔍 [getTransacoes] Verificando emails similares na tabela...");
const { data: similarEmails } = await supabase
.from('transacoes')
.select('login, count(*)')
.not('login', 'is', null)
.limit(20);
console.log("📧 [getTransacoes] Emails encontrados na tabela transacoes:", similarEmails);
return [];
}
// Transform the received data to the expected format, normalizing the types // Transform the received data to the expected format, normalizing the types
return data.map((item: any) => ({ const transformedData = data.map((item: any) => ({
id: item.id.toString(), id: item.id.toString(),
user: item.user || '', user: item.user || '',
login: item.login || normalizedEmail, // Ensure the login field is filled login: item.login || normalizedEmail, // Ensure the login field is filled
@ -69,8 +115,13 @@ export async function getTransacoes(monthFilter?: string): Promise<Transaction[]
categoria: item.categoria || 'Outros', categoria: item.categoria || 'Outros',
grupo_id: item.grupo_id || null grupo_id: item.grupo_id || null
})); }));
console.log("🔄 [getTransacoes] Transações transformadas:", transformedData.length);
console.log("🔄 [getTransacoes] Primeira transação transformada:", transformedData[0]);
return transformedData;
} catch (error) { } catch (error) {
console.error('Erro ao buscar transações:', error); console.error('💥 [getTransacoes] Erro geral na função:', error);
return []; return [];
} }
} }