diff --git a/src/components/dashboard/TransactionForm.tsx b/src/components/dashboard/TransactionForm.tsx index c3d3a2b..4c1d666 100644 --- a/src/components/dashboard/TransactionForm.tsx +++ b/src/components/dashboard/TransactionForm.tsx @@ -52,11 +52,18 @@ export function TransactionForm({ onSuccess, onCancel, defaultTipo = 'despesa', // Buscar grupos do usuário ao carregar o formulário useState(() => { const fetchGrupos = async () => { - const userId = localStorage.getItem('userId') || 'default'; + const userEmail = localStorage.getItem('userEmail'); + if (!userEmail) { + console.error('Email do usuário não encontrado'); + return; + } + + const normalizedEmail = userEmail.trim().toLowerCase(); + const { data, error } = await supabase .from('grupos_whatsapp') .select('remote_jid, nome_grupo') - .eq('user_id', userId); + .eq('login', normalizedEmail); if (error) { console.error('Erro ao buscar grupos:', error); @@ -85,10 +92,23 @@ export function TransactionForm({ onSuccess, onCancel, defaultTipo = 'despesa', setIsSubmitting(true); try { - // Get user ID from localStorage - with RLS disabled, this is just for reference - const userId = localStorage.getItem('userId') || 'default'; - const userEmail = localStorage.getItem('userEmail') || ''; - const userName = localStorage.getItem('userName') || ''; + // Get user email from localStorage - principal identifier now + const userEmail = localStorage.getItem('userEmail'); + + if (!userEmail) { + toast({ + title: "Erro no formulário", + description: "Email do usuário não encontrado", + variant: "destructive" + }); + return; + } + + // Normalizar o email (minúsculo e sem espaços) + const normalizedEmail = userEmail.trim().toLowerCase(); + + // Get user ID from localStorage - kept for compatibility + const userId = localStorage.getItem('userId') || ''; const valorNumerico = parseFloat(data.valor.replace(',', '.')); @@ -106,11 +126,12 @@ export function TransactionForm({ onSuccess, onCancel, defaultTipo = 'despesa', ? Math.abs(valorNumerico) : Math.abs(valorNumerico); - console.log(`Salvando transação para usuário: ${userId} (${userEmail || userName})`); + console.log(`Salvando transação para usuário: ${normalizedEmail} (ID: ${userId})`); - // Preparar dados da transação incluindo o grupo_id se fornecido + // Preparar dados da transação incluindo o login e grupo_id const transactionData = { - user: userId, + user: userId, // Mantido por compatibilidade + login: normalizedEmail, // Campo principal para identificação estabelecimento: data.estabelecimento, valor: valorFinal, detalhes: data.detalhes, diff --git a/src/services/gruposWhatsAppService.ts b/src/services/gruposWhatsAppService.ts index 6b93d65..a6512f1 100644 --- a/src/services/gruposWhatsAppService.ts +++ b/src/services/gruposWhatsAppService.ts @@ -18,13 +18,11 @@ export async function cadastrarGrupoWhatsApp(): Promise { // Criar registro na tabela grupos_whatsapp const { data, error } = await supabase .from('grupos_whatsapp') - .insert([ - { - user_id: localStorage.getItem('userId') || '', - login: normalizedEmail, - status: 'pendente' - } - ]) + .insert({ + user_id: localStorage.getItem('userId') || '', // Mantido por compatibilidade + login: normalizedEmail, + status: 'pendente' + }) .select(); if (error) { diff --git a/src/services/transacaoService.ts b/src/services/transacaoService.ts index 1858aaf..c27196b 100644 --- a/src/services/transacaoService.ts +++ b/src/services/transacaoService.ts @@ -5,16 +5,24 @@ import { Transaction, CategorySummary } from "@/types/financialTypes"; export async function getTransacoes(): Promise { console.log("Buscando transações do Supabase..."); - // Obter o ID do usuário atual do localStorage - const userId = localStorage.getItem('userId') || 'default'; - console.log("Buscando transações para o usuário:", userId); + // Obter o email do usuário do localStorage + const userEmail = localStorage.getItem('userEmail'); + + if (!userEmail) { + console.error('Email do usuário não encontrado no localStorage'); + return []; + } + + // Normalizar o email (minúsculo e sem espaços) + const normalizedEmail = userEmail.trim().toLowerCase(); + console.log("Buscando transações para o usuário com email:", normalizedEmail); try { - // Primeiro, buscar todos os grupos do usuário + // Primeiro, buscar todos os grupos do usuário pelo email const { data: userGroups, error: groupsError } = await supabase .from('grupos_whatsapp') .select('remote_jid') - .eq('user_id', userId); + .eq('login', normalizedEmail); if (groupsError) { console.error('Erro ao buscar grupos do usuário:', groupsError); @@ -24,11 +32,11 @@ export async function getTransacoes(): Promise { const groupIds = userGroups ? userGroups.map(group => group.remote_jid) : []; console.log(`Encontrados ${groupIds.length} grupos vinculados ao usuário:`, groupIds); - // Buscar transações com filtro aprimorado + // Buscar transações com filtro baseado no email (login) ou grupo_id const { data, error } = await supabase .from('transacoes') .select('*') - .or(`user.eq.${userId},${groupIds.length > 0 ? `grupo_id.in.(${groupIds.map(id => `"${id}"`).join(',')})` : ''}`) + .or(`login.eq.${normalizedEmail},${groupIds.length > 0 ? `grupo_id.in.(${groupIds.map(id => `"${id}"`).join(',')})` : ''}`) .order('quando', { ascending: false }); if (error) { @@ -42,6 +50,7 @@ export async function getTransacoes(): Promise { return data.map((item: any) => ({ id: item.id.toString(), user: item.user || '', + login: item.login || normalizedEmail, // Garantir que o campo login esteja preenchido 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(), @@ -60,15 +69,23 @@ export async function getTransacoes(): Promise { export async function getTransactionSummary() { console.log("Buscando resumo das transações..."); - // Obter o ID do usuário atual do localStorage - const userId = localStorage.getItem('userId') || 'default'; + // Obter o email do usuário do localStorage + const userEmail = localStorage.getItem('userEmail'); + + if (!userEmail) { + console.error('Email do usuário não encontrado no localStorage'); + return { receitas: 0, despesas: 0, saldo: 0 }; + } + + // Normalizar o email (minúsculo e sem espaços) + const normalizedEmail = userEmail.trim().toLowerCase(); try { - // Primeiro, buscar todos os grupos do usuário + // Primeiro, buscar todos os grupos do usuário pelo email const { data: userGroups, error: groupsError } = await supabase .from('grupos_whatsapp') .select('remote_jid') - .eq('user_id', userId); + .eq('login', normalizedEmail); if (groupsError) { console.error('Erro ao buscar grupos do usuário:', groupsError); @@ -77,11 +94,11 @@ export async function getTransactionSummary() { // Extrair IDs dos grupos para usar no filtro const groupIds = userGroups ? userGroups.map(group => group.remote_jid) : []; - // Buscar resumo das transações com filtro aprimorado + // Buscar resumo das transações com filtro aprimorado baseado no email (login) ou grupo_id const { data, error } = await supabase .from('transacoes') .select('tipo, valor') - .or(`user.eq.${userId},${groupIds.length > 0 ? `grupo_id.in.(${groupIds.map(id => `"${id}"`).join(',')})` : ''}`); + .or(`login.eq.${normalizedEmail},${groupIds.length > 0 ? `grupo_id.in.(${groupIds.map(id => `"${id}"`).join(',')})` : ''}`); if (error) { console.error('Erro ao buscar resumo das transações:', error); @@ -115,15 +132,23 @@ export async function getTransactionSummary() { export async function getCategorySummary(tipoFiltro: string = 'despesa') { console.log(`Buscando resumo de categorias para tipo: ${tipoFiltro}`); - // Obter o ID do usuário atual do localStorage - const userId = localStorage.getItem('userId') || 'default'; + // Obter o email do usuário do localStorage + const userEmail = localStorage.getItem('userEmail'); + + if (!userEmail) { + console.error('Email do usuário não encontrado no localStorage'); + return []; + } + + // Normalizar o email (minúsculo e sem espaços) + const normalizedEmail = userEmail.trim().toLowerCase(); try { - // Primeiro, buscar todos os grupos do usuário + // Primeiro, buscar todos os grupos do usuário pelo email const { data: userGroups, error: groupsError } = await supabase .from('grupos_whatsapp') .select('remote_jid') - .eq('user_id', userId); + .eq('login', normalizedEmail); if (groupsError) { console.error('Erro ao buscar grupos do usuário:', groupsError); @@ -132,11 +157,11 @@ export async function getCategorySummary(tipoFiltro: string = 'despesa') { // Extrair IDs dos grupos para usar no filtro const groupIds = userGroups ? userGroups.map(group => group.remote_jid) : []; - // Buscar resumo de categorias com filtro aprimorado + // Buscar resumo de categorias com filtro aprimorado baseado no email (login) ou grupo_id const { data, error } = await supabase .from('transacoes') .select('categoria, valor, tipo') - .or(`user.eq.${userId},${groupIds.length > 0 ? `grupo_id.in.(${groupIds.map(id => `"${id}"`).join(',')})` : ''}`); + .or(`login.eq.${normalizedEmail},${groupIds.length > 0 ? `grupo_id.in.(${groupIds.map(id => `"${id}"`).join(',')})` : ''}`); if (error) { console.error('Erro ao buscar resumo de categorias:', error); @@ -192,15 +217,23 @@ export async function getCategorySummary(tipoFiltro: string = 'despesa') { export async function getMonthlyData() { console.log("Buscando dados mensais..."); - // Obter o ID do usuário atual do localStorage - const userId = localStorage.getItem('userId') || 'default'; + // Obter o email do usuário do localStorage + const userEmail = localStorage.getItem('userEmail'); + + if (!userEmail) { + console.error('Email do usuário não encontrado no localStorage'); + return []; + } + + // Normalizar o email (minúsculo e sem espaços) + const normalizedEmail = userEmail.trim().toLowerCase(); try { - // Primeiro, buscar todos os grupos do usuário + // Primeiro, buscar todos os grupos do usuário pelo email const { data: userGroups, error: groupsError } = await supabase .from('grupos_whatsapp') .select('remote_jid') - .eq('user_id', userId); + .eq('login', normalizedEmail); if (groupsError) { console.error('Erro ao buscar grupos do usuário:', groupsError); @@ -209,11 +242,11 @@ export async function getMonthlyData() { // Extrair IDs dos grupos para usar no filtro const groupIds = userGroups ? userGroups.map(group => group.remote_jid) : []; - // Buscar dados mensais com filtro aprimorado + // Buscar dados mensais com filtro aprimorado baseado no email (login) ou grupo_id const { data, error } = await supabase .from('transacoes') .select('quando, valor, tipo') - .or(`user.eq.${userId},${groupIds.length > 0 ? `grupo_id.in.(${groupIds.map(id => `"${id}"`).join(',')})` : ''}`); + .or(`login.eq.${normalizedEmail},${groupIds.length > 0 ? `grupo_id.in.(${groupIds.map(id => `"${id}"`).join(',')})` : ''}`); if (error) { console.error('Erro ao buscar dados mensais:', error); diff --git a/src/types/financialTypes.ts b/src/types/financialTypes.ts index df2f016..4fbdd91 100644 --- a/src/types/financialTypes.ts +++ b/src/types/financialTypes.ts @@ -1,8 +1,8 @@ - export interface Transaction { id: string; user: string; + login?: string; // E-mail do usuário como identificador principal created_at: string; valor: number; quando: string; @@ -60,11 +60,10 @@ export interface ResultadoMeta { export interface WhatsAppGroup { id: number; - user_id: string; + user_id: string | null; // Mantido apenas por compatibilidade remote_jid: string | null; nome_grupo: string | null; created_at: string; status: string; - login: string; + login: string; // E-mail do usuário como identificador principal } -