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
|
// Buscar grupos do usuário ao carregar o formulário
|
||||||
useState(() => {
|
useState(() => {
|
||||||
const fetchGrupos = async () => {
|
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
|
const { data, error } = await supabase
|
||||||
.from('grupos_whatsapp')
|
.from('grupos_whatsapp')
|
||||||
.select('remote_jid, nome_grupo')
|
.select('remote_jid, nome_grupo')
|
||||||
.eq('user_id', userId);
|
.eq('login', normalizedEmail);
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
console.error('Erro ao buscar grupos:', error);
|
console.error('Erro ao buscar grupos:', error);
|
||||||
@ -85,10 +92,23 @@ export function TransactionForm({ onSuccess, onCancel, defaultTipo = 'despesa',
|
|||||||
setIsSubmitting(true);
|
setIsSubmitting(true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Get user ID from localStorage - with RLS disabled, this is just for reference
|
// Get user email from localStorage - principal identifier now
|
||||||
const userId = localStorage.getItem('userId') || 'default';
|
const userEmail = localStorage.getItem('userEmail');
|
||||||
const userEmail = localStorage.getItem('userEmail') || '';
|
|
||||||
const userName = localStorage.getItem('userName') || '';
|
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(',', '.'));
|
const valorNumerico = parseFloat(data.valor.replace(',', '.'));
|
||||||
|
|
||||||
@ -106,11 +126,12 @@ export function TransactionForm({ onSuccess, onCancel, defaultTipo = 'despesa',
|
|||||||
? Math.abs(valorNumerico)
|
? Math.abs(valorNumerico)
|
||||||
: 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 = {
|
const transactionData = {
|
||||||
user: userId,
|
user: userId, // Mantido por compatibilidade
|
||||||
|
login: normalizedEmail, // Campo principal para identificação
|
||||||
estabelecimento: data.estabelecimento,
|
estabelecimento: data.estabelecimento,
|
||||||
valor: valorFinal,
|
valor: valorFinal,
|
||||||
detalhes: data.detalhes,
|
detalhes: data.detalhes,
|
||||||
|
|||||||
@ -18,13 +18,11 @@ export async function cadastrarGrupoWhatsApp(): Promise<WhatsAppGroup | null> {
|
|||||||
// Criar registro na tabela grupos_whatsapp
|
// Criar registro na tabela grupos_whatsapp
|
||||||
const { data, error } = await supabase
|
const { data, error } = await supabase
|
||||||
.from('grupos_whatsapp')
|
.from('grupos_whatsapp')
|
||||||
.insert([
|
.insert({
|
||||||
{
|
user_id: localStorage.getItem('userId') || '', // Mantido por compatibilidade
|
||||||
user_id: localStorage.getItem('userId') || '',
|
login: normalizedEmail,
|
||||||
login: normalizedEmail,
|
status: 'pendente'
|
||||||
status: 'pendente'
|
})
|
||||||
}
|
|
||||||
])
|
|
||||||
.select();
|
.select();
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
|
|||||||
@ -5,16 +5,24 @@ import { Transaction, CategorySummary } from "@/types/financialTypes";
|
|||||||
export async function getTransacoes(): Promise<Transaction[]> {
|
export async function getTransacoes(): Promise<Transaction[]> {
|
||||||
console.log("Buscando transações do Supabase...");
|
console.log("Buscando transações do Supabase...");
|
||||||
|
|
||||||
// Obter o ID do usuário atual do localStorage
|
// Obter o email do usuário do localStorage
|
||||||
const userId = localStorage.getItem('userId') || 'default';
|
const userEmail = localStorage.getItem('userEmail');
|
||||||
console.log("Buscando transações para o usuário:", userId);
|
|
||||||
|
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 {
|
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
|
const { data: userGroups, error: groupsError } = await supabase
|
||||||
.from('grupos_whatsapp')
|
.from('grupos_whatsapp')
|
||||||
.select('remote_jid')
|
.select('remote_jid')
|
||||||
.eq('user_id', userId);
|
.eq('login', normalizedEmail);
|
||||||
|
|
||||||
if (groupsError) {
|
if (groupsError) {
|
||||||
console.error('Erro ao buscar grupos do usuário:', 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) : [];
|
const groupIds = userGroups ? userGroups.map(group => group.remote_jid) : [];
|
||||||
console.log(`Encontrados ${groupIds.length} grupos vinculados ao usuário:`, groupIds);
|
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
|
const { data, error } = await supabase
|
||||||
.from('transacoes')
|
.from('transacoes')
|
||||||
.select('*')
|
.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 });
|
.order('quando', { ascending: false });
|
||||||
|
|
||||||
if (error) {
|
if (error) {
|
||||||
@ -42,6 +50,7 @@ export async function getTransacoes(): Promise<Transaction[]> {
|
|||||||
return data.map((item: any) => ({
|
return data.map((item: any) => ({
|
||||||
id: item.id.toString(),
|
id: item.id.toString(),
|
||||||
user: item.user || '',
|
user: item.user || '',
|
||||||
|
login: item.login || normalizedEmail, // Garantir que o campo login esteja preenchido
|
||||||
created_at: item.created_at,
|
created_at: item.created_at,
|
||||||
valor: item.tipo?.toLowerCase() === 'receita' ? Math.abs(item.valor || 0) : -Math.abs(item.valor || 0),
|
valor: item.tipo?.toLowerCase() === 'receita' ? Math.abs(item.valor || 0) : -Math.abs(item.valor || 0),
|
||||||
quando: item.quando || new Date().toISOString(),
|
quando: item.quando || new Date().toISOString(),
|
||||||
@ -60,15 +69,23 @@ export async function getTransacoes(): Promise<Transaction[]> {
|
|||||||
export async function getTransactionSummary() {
|
export async function getTransactionSummary() {
|
||||||
console.log("Buscando resumo das transações...");
|
console.log("Buscando resumo das transações...");
|
||||||
|
|
||||||
// Obter o ID do usuário atual do localStorage
|
// Obter o email do usuário do localStorage
|
||||||
const userId = localStorage.getItem('userId') || 'default';
|
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 {
|
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
|
const { data: userGroups, error: groupsError } = await supabase
|
||||||
.from('grupos_whatsapp')
|
.from('grupos_whatsapp')
|
||||||
.select('remote_jid')
|
.select('remote_jid')
|
||||||
.eq('user_id', userId);
|
.eq('login', normalizedEmail);
|
||||||
|
|
||||||
if (groupsError) {
|
if (groupsError) {
|
||||||
console.error('Erro ao buscar grupos do usuário:', 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
|
// Extrair IDs dos grupos para usar no filtro
|
||||||
const groupIds = userGroups ? userGroups.map(group => group.remote_jid) : [];
|
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
|
const { data, error } = await supabase
|
||||||
.from('transacoes')
|
.from('transacoes')
|
||||||
.select('tipo, valor')
|
.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) {
|
if (error) {
|
||||||
console.error('Erro ao buscar resumo das transações:', 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') {
|
export async function getCategorySummary(tipoFiltro: string = 'despesa') {
|
||||||
console.log(`Buscando resumo de categorias para tipo: ${tipoFiltro}`);
|
console.log(`Buscando resumo de categorias para tipo: ${tipoFiltro}`);
|
||||||
|
|
||||||
// Obter o ID do usuário atual do localStorage
|
// Obter o email do usuário do localStorage
|
||||||
const userId = localStorage.getItem('userId') || 'default';
|
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 {
|
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
|
const { data: userGroups, error: groupsError } = await supabase
|
||||||
.from('grupos_whatsapp')
|
.from('grupos_whatsapp')
|
||||||
.select('remote_jid')
|
.select('remote_jid')
|
||||||
.eq('user_id', userId);
|
.eq('login', normalizedEmail);
|
||||||
|
|
||||||
if (groupsError) {
|
if (groupsError) {
|
||||||
console.error('Erro ao buscar grupos do usuário:', 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
|
// Extrair IDs dos grupos para usar no filtro
|
||||||
const groupIds = userGroups ? userGroups.map(group => group.remote_jid) : [];
|
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
|
const { data, error } = await supabase
|
||||||
.from('transacoes')
|
.from('transacoes')
|
||||||
.select('categoria, valor, tipo')
|
.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) {
|
if (error) {
|
||||||
console.error('Erro ao buscar resumo de categorias:', 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() {
|
export async function getMonthlyData() {
|
||||||
console.log("Buscando dados mensais...");
|
console.log("Buscando dados mensais...");
|
||||||
|
|
||||||
// Obter o ID do usuário atual do localStorage
|
// Obter o email do usuário do localStorage
|
||||||
const userId = localStorage.getItem('userId') || 'default';
|
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 {
|
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
|
const { data: userGroups, error: groupsError } = await supabase
|
||||||
.from('grupos_whatsapp')
|
.from('grupos_whatsapp')
|
||||||
.select('remote_jid')
|
.select('remote_jid')
|
||||||
.eq('user_id', userId);
|
.eq('login', normalizedEmail);
|
||||||
|
|
||||||
if (groupsError) {
|
if (groupsError) {
|
||||||
console.error('Erro ao buscar grupos do usuário:', 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
|
// Extrair IDs dos grupos para usar no filtro
|
||||||
const groupIds = userGroups ? userGroups.map(group => group.remote_jid) : [];
|
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
|
const { data, error } = await supabase
|
||||||
.from('transacoes')
|
.from('transacoes')
|
||||||
.select('quando, valor, tipo')
|
.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) {
|
if (error) {
|
||||||
console.error('Erro ao buscar dados mensais:', error);
|
console.error('Erro ao buscar dados mensais:', error);
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
|
|
||||||
export interface Transaction {
|
export interface Transaction {
|
||||||
id: string;
|
id: string;
|
||||||
user: string;
|
user: string;
|
||||||
|
login?: string; // E-mail do usuário como identificador principal
|
||||||
created_at: string;
|
created_at: string;
|
||||||
valor: number;
|
valor: number;
|
||||||
quando: string;
|
quando: string;
|
||||||
@ -60,11 +60,10 @@ export interface ResultadoMeta {
|
|||||||
|
|
||||||
export interface WhatsAppGroup {
|
export interface WhatsAppGroup {
|
||||||
id: number;
|
id: number;
|
||||||
user_id: string;
|
user_id: string | null; // Mantido apenas por compatibilidade
|
||||||
remote_jid: string | null;
|
remote_jid: string | null;
|
||||||
nome_grupo: string | null;
|
nome_grupo: string | null;
|
||||||
created_at: string;
|
created_at: string;
|
||||||
status: string;
|
status: string;
|
||||||
login: string;
|
login: string; // E-mail do usuário como identificador principal
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user