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() {
try {
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
console.log("📊 [Dashboard] Buscando dados do Supabase...");
const [transacoesData, totalsData, categoriesData, monthlyDataResult, cartoesData] = await Promise.all([
getTransacoes(selectedMonth),
getTransactionSummary(selectedMonth),
@ -51,7 +66,7 @@ const Dashboard = () => {
// Calcular total dos cartões
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,
totals: totalsData,
categories: categoriesData.length,
@ -71,12 +86,20 @@ const Dashboard = () => {
setCategories(categoriesData);
setMonthlyData(monthlyDataResult);
toast({
title: "Dados carregados com sucesso",
description: `Dados financeiros de ${selectedMonth} foram atualizados`
});
if (transacoesData.length > 0 || categoriesData.length > 0 || monthlyDataResult.length > 0) {
toast({
title: "Dados carregados com sucesso",
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) {
console.error("Erro ao carregar dados:", error);
console.error("💥 [Dashboard] Erro ao carregar dados:", error);
toast({
title: "Erro ao carregar dados",
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 => {
const userEmail = localStorage.getItem('userEmail');
console.log("📧 [getUserEmail] Email raw do localStorage:", 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;
}
// 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[]> => {
try {
console.log("👥 [getUserGroups] Buscando grupos para email:", userEmail);
const { data: userGroups, error: groupsError } = await supabase
.from('grupos_whatsapp')
.select('remote_jid')
.eq('login', userEmail);
if (groupsError) {
console.error('Erro ao buscar grupos do usuário:', groupsError);
console.error('❌ [getUserGroups] Erro ao buscar grupos do usuário:', groupsError);
return [];
}
console.log("👥 [getUserGroups] Grupos encontrados:", userGroups);
// 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) {
console.error('Erro ao obter grupos do usuário:', error);
console.error('💥 [getUserGroups] Erro ao obter grupos do usuário:', error);
return [];
}
};

View File

@ -9,28 +9,54 @@ import { getUserEmail, getUserGroups } from "./baseService";
* @returns Promise with array of transactions
*/
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
const normalizedEmail = getUserEmail();
console.log("📧 [getTransacoes] Email do usuário obtido:", normalizedEmail);
if (!normalizedEmail) {
console.error("❌ [getTransacoes] Email não encontrado no localStorage");
return [];
}
console.log("Buscando transações para o usuário com email:", normalizedEmail);
try {
// First, get all user's groups by email
console.log("👥 [getTransacoes] Buscando grupos do usuário...");
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
console.log("🏗️ [getTransacoes] Construindo query...");
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')
.select('*')
.or(`login.eq.${normalizedEmail},${groupIds.length > 0 ? `grupo_id.in.(${groupIds.map(id => `"${id}"`).join(',')})` : ''}`)
.order('quando', { ascending: false });
.limit(10);
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
if (monthFilter) {
@ -43,20 +69,40 @@ export async function getTransacoes(monthFilter?: string): Promise<Transaction[]
.gte('quando', startDate)
.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;
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');
}
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
return data.map((item: any) => ({
const transformedData = data.map((item: any) => ({
id: item.id.toString(),
user: item.user || '',
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',
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) {
console.error('Erro ao buscar transações:', error);
console.error('💥 [getTransacoes] Erro geral na função:', error);
return [];
}
}