The application was still not fetching transactions correctly. The issue was that the filtering logic was using the `email` column instead of the `login` column to match the logged-in user. This commit corrects the filtering to use the `login` column.
161 lines
6.4 KiB
TypeScript
161 lines
6.4 KiB
TypeScript
|
|
import { supabase } from "@/integrations/supabase/client";
|
|
import { Transaction } from "@/types/financialTypes";
|
|
import { getUserEmail, getUserGroups } from "./baseService";
|
|
|
|
/**
|
|
* Fetch all transactions for the current user with optional month filter
|
|
* @param monthFilter - Optional month filter in format 'YYYY-MM'
|
|
* @returns Promise with array of transactions
|
|
*/
|
|
export async function getTransacoes(monthFilter?: string): Promise<Transaction[]> {
|
|
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 [];
|
|
}
|
|
|
|
try {
|
|
// TESTE SIMPLES PRIMEIRO - buscar QUALQUER transação na tabela
|
|
console.log("🧪 [DEBUG] Testando se existem transações na tabela...");
|
|
const { data: allTransactions, error: allError } = await supabase
|
|
.from('transacoes')
|
|
.select('*')
|
|
.limit(5);
|
|
|
|
console.log("🧪 [DEBUG] Total de transações encontradas na tabela:", allTransactions?.length || 0);
|
|
if (allTransactions && allTransactions.length > 0) {
|
|
console.log("🧪 [DEBUG] Primeira transação como exemplo:", allTransactions[0]);
|
|
console.log("🧪 [DEBUG] Estrutura da primeira transação:", Object.keys(allTransactions[0]));
|
|
}
|
|
if (allError) {
|
|
console.error("🧪 [DEBUG] Erro ao buscar todas as transações:", allError);
|
|
}
|
|
|
|
// TESTE ESPECÍFICO - buscar por login exato
|
|
console.log("🧪 [DEBUG] Testando busca específica por login:", normalizedEmail);
|
|
const { data: specificLogin, error: loginError } = await supabase
|
|
.from('transacoes')
|
|
.select('*')
|
|
.eq('login', normalizedEmail);
|
|
|
|
console.log("🧪 [DEBUG] Transações encontradas para login específico:", specificLogin?.length || 0);
|
|
if (loginError) {
|
|
console.error("🧪 [DEBUG] Erro na busca por login:", loginError);
|
|
}
|
|
if (specificLogin && specificLogin.length > 0) {
|
|
console.log("🧪 [DEBUG] Primeira transação do usuário:", specificLogin[0]);
|
|
}
|
|
|
|
// First, get all user's groups by email
|
|
console.log("👥 [getTransacoes] Buscando grupos do usuário...");
|
|
const groupIds = await getUserGroups(normalizedEmail);
|
|
console.log(`👥 [getTransacoes] Encontrados ${groupIds.length} grupos vinculados ao usuário:`, groupIds);
|
|
|
|
// Build the main query
|
|
console.log("🏗️ [getTransacoes] Iniciando query principal...");
|
|
|
|
let query = supabase.from('transacoes').select('*');
|
|
|
|
// Log the filter being applied
|
|
let filterDescription = "";
|
|
|
|
if (groupIds.length > 0) {
|
|
const orFilter = `login.eq.${normalizedEmail},grupo_id.in.(${groupIds.map(id => `"${id}"`).join(',')})`;
|
|
filterDescription = `OR filter: ${orFilter}`;
|
|
console.log("🔍 [getTransacoes] Aplicando filtro OR com grupos:", orFilter);
|
|
query = query.or(orFilter);
|
|
} else {
|
|
filterDescription = `Simple login filter: login = ${normalizedEmail}`;
|
|
console.log("🔍 [getTransacoes] Aplicando filtro simples de login:", normalizedEmail);
|
|
query = query.eq('login', normalizedEmail);
|
|
}
|
|
|
|
console.log("🔍 [getTransacoes] Filtro aplicado:", filterDescription);
|
|
|
|
// Apply month filter if provided
|
|
if (monthFilter) {
|
|
const startDate = `${monthFilter}-01`;
|
|
const year = parseInt(monthFilter.split('-')[0]);
|
|
const month = parseInt(monthFilter.split('-')[1]);
|
|
const endDate = new Date(year, month, 0).toISOString().split('T')[0];
|
|
|
|
query = query
|
|
.gte('quando', startDate)
|
|
.lte('quando', `${endDate}T23:59:59.999Z`);
|
|
|
|
console.log(`📅 [getTransacoes] Filtro de data aplicado: ${startDate} até ${endDate}`);
|
|
}
|
|
|
|
query = query.order('quando', { ascending: false });
|
|
|
|
console.log("🚀 [getTransacoes] Executando query final...");
|
|
|
|
// Log da query antes de executar
|
|
console.log("🔍 [DEBUG] Query construída:", query);
|
|
|
|
const { data, error } = await query;
|
|
|
|
// Log detalhado do resultado
|
|
console.log("📊 [DEBUG] Resultado da query:", {
|
|
sucesso: !error,
|
|
erro: error,
|
|
totalRegistros: data?.length || 0,
|
|
temDados: data && data.length > 0
|
|
});
|
|
|
|
if (error) {
|
|
console.error('❌ [getTransacoes] Erro ao executar query:', error);
|
|
console.error('❌ [getTransacoes] Detalhes do erro:', JSON.stringify(error, null, 2));
|
|
throw new Error('Não foi possível carregar as transações');
|
|
}
|
|
|
|
console.log("✅ [getTransacoes] Query executada com sucesso");
|
|
console.log("📊 [getTransacoes] Número de registros retornados:", data?.length || 0);
|
|
|
|
if (data && data.length > 0) {
|
|
console.log("📋 [getTransacoes] Primeiro registro retornado:", data[0]);
|
|
console.log("📋 [getTransacoes] Estrutura dos dados:", Object.keys(data[0]));
|
|
}
|
|
|
|
if (!data || data.length === 0) {
|
|
console.warn("⚠️ [getTransacoes] Nenhuma transação encontrada");
|
|
console.warn("⚠️ [getTransacoes] Email buscado:", normalizedEmail);
|
|
console.warn("⚠️ [getTransacoes] Filtro de mês:", monthFilter);
|
|
console.warn("⚠️ [getTransacoes] Grupos do usuário:", groupIds);
|
|
return [];
|
|
}
|
|
|
|
// Transform the received data to the expected format
|
|
const transformedData = data.map((item: any) => ({
|
|
id: item.id.toString(),
|
|
user: item.user || '',
|
|
login: item.login || normalizedEmail,
|
|
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(),
|
|
detalhes: item.detalhes || '',
|
|
estabelecimento: item.estabelecimento || '',
|
|
tipo: item.tipo?.toLowerCase() || 'despesa',
|
|
categoria: item.categoria || 'Outros',
|
|
grupo_id: item.grupo_id || null
|
|
}));
|
|
|
|
console.log("🔄 [getTransacoes] Dados transformados com sucesso");
|
|
console.log("🔄 [getTransacoes] Total de transações processadas:", transformedData.length);
|
|
|
|
return transformedData;
|
|
} catch (error) {
|
|
console.error('💥 [getTransacoes] Erro geral na função:', error);
|
|
console.error('💥 [getTransacoes] Stack trace:', error instanceof Error ? error.stack : 'Stack não disponível');
|
|
return [];
|
|
}
|
|
}
|