Refactor: Use email (login) for user identification
Update the system to use the user's email (login) as the primary identifier for linking users, WhatsApp groups, and transactions. This includes changes to the `grupos_whatsapp` and `transacoes` tables, as well as adjustments to queries and data retrieval logic. The `user_id` field is maintained for compatibility.
This commit is contained in:
parent
8435c03464
commit
6a38fd0bf1
@ -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,
|
||||
|
||||
@ -18,13 +18,11 @@ export async function cadastrarGrupoWhatsApp(): Promise<WhatsAppGroup | null> {
|
||||
// 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) {
|
||||
|
||||
@ -5,16 +5,24 @@ import { Transaction, CategorySummary } from "@/types/financialTypes";
|
||||
export async function getTransacoes(): Promise<Transaction[]> {
|
||||
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<Transaction[]> {
|
||||
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<Transaction[]> {
|
||||
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<Transaction[]> {
|
||||
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);
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user