diff --git a/src/components/whatsappGroups/DebugInfo.tsx b/src/components/whatsappGroups/DebugInfo.tsx index 59cb378..afd669b 100644 --- a/src/components/whatsappGroups/DebugInfo.tsx +++ b/src/components/whatsappGroups/DebugInfo.tsx @@ -1,5 +1,9 @@ -import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'; +import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; +import { Alert, AlertDescription } from '@/components/ui/alert'; +import { AlertCircle } from 'lucide-react'; +import { useState, useEffect } from 'react'; +import { getUserDebugInfo } from '@/services/whatsAppInstanceService'; interface DebugInfoProps { errorMessage: string | null; @@ -7,28 +11,76 @@ interface DebugInfoProps { } const DebugInfo = ({ errorMessage, debugInfo }: DebugInfoProps) => { - if (!errorMessage && !debugInfo) return null; - - return ( - <> - {errorMessage && ( - - Erro ao cadastrar grupo - - {errorMessage} - - - )} + const [userDebugData, setUserDebugData] = useState(null); + const [debugLoading, setDebugLoading] = useState(false); + const userEmail = localStorage.getItem('userEmail') || ''; - {debugInfo && ( - - Informações de depuração - - {debugInfo} - - - )} - + // Buscar dados completos do usuário para debug + useEffect(() => { + const fetchUserDebugData = async () => { + if (!userEmail) return; + + setDebugLoading(true); + try { + const data = await getUserDebugInfo(userEmail); + setUserDebugData(data); + } catch (error) { + console.error('Erro ao buscar dados de debug:', error); + } finally { + setDebugLoading(false); + } + }; + + fetchUserDebugData(); + }, [userEmail]); + + return ( + + + Debug Info + + +
+ Email: {userEmail || 'Não fornecido'} +
+ + {debugLoading ? ( +
Carregando dados do banco...
+ ) : userDebugData ? ( +
+
+ Dados completos do banco: +
+
+
ID: {userDebugData.id}
+
Nome: {userDebugData.nome}
+
Email: {userDebugData.email}
+
WhatsApp: {userDebugData.whatsapp || 'Não definido'}
+
Instância Zap: {userDebugData.instancia_zap || 'NULL'}
+
Status Instância: {userDebugData.status_instancia || 'NULL'}
+
Remote JID: {userDebugData.remote_jid || 'NULL'}
+
Criado em: {userDebugData.created_at}
+
+
+ ) : ( +
Nenhum dado encontrado no banco para este usuário
+ )} + + {errorMessage && ( + + + {errorMessage} + + )} + + {debugInfo && ( + + + {debugInfo} + + )} +
+
); }; diff --git a/src/services/gruposWhatsAppService.ts b/src/services/gruposWhatsAppService.ts index 8429999..c7db3e7 100644 --- a/src/services/gruposWhatsAppService.ts +++ b/src/services/gruposWhatsAppService.ts @@ -1,58 +1,89 @@ -import { WhatsAppGroup } from "@/types/financialTypes"; -import { createWorkflowInN8n } from "./n8nWorkflowService"; -import { findOrCreateWhatsAppGroup, listWhatsAppGroups, updateWorkflowId } from "./whatsAppGroupsService"; +import { supabase } from '@/integrations/supabase/client'; +import { WhatsAppGroup } from '@/types/financialTypes'; +import { getUserWhatsAppInstance } from './whatsAppInstanceService'; /** - * Main function to register a WhatsApp group and create its workflow - * Orchestrates the process using the specialized services - * @param nomeGrupo Nome definido pelo usuário para o grupo + * Lista todos os grupos do WhatsApp do usuário atual */ -export async function cadastrarGrupoWhatsApp(nomeGrupo?: string): Promise { +export async function listarGruposWhatsApp(): Promise { try { - // Find or create a WhatsApp group for the current user - const group = await findOrCreateWhatsAppGroup(nomeGrupo); - - // If no group was found or created, return null - if (!group) { - console.error('Erro inesperado: não foi possível obter ou criar um grupo'); - return null; + const userEmail = localStorage.getItem('userEmail'); + if (!userEmail) { + console.error('Email do usuário não fornecido'); + throw new Error('Email do usuário não encontrado'); } - - // Create workflow in n8n if it doesn't exist - try { - if (!group.workflow_id) { - const userEmail = localStorage.getItem('userEmail')?.trim().toLowerCase(); - - if (!userEmail) { - throw new Error('Email do usuário não encontrado no localStorage'); - } - - console.log(`Iniciando criação de workflow para o email: ${userEmail} e grupo ID: ${group.id}`); - const workflowResponse = await createWorkflowInN8n(userEmail); - - if (workflowResponse && workflowResponse.id) { - // Update the group with workflow_id - await updateWorkflowId(group.id, workflowResponse.id); - group.workflow_id = workflowResponse.id; - console.log('Workflow criado com sucesso no n8n:', workflowResponse.id); - } else { - console.log('Resposta do n8n não contém ID de workflow válido:', workflowResponse); - } - } - } catch (n8nError) { - console.error('Erro ao criar workflow no n8n:', n8nError); - // Don't prevent group creation, just continue without workflow_id + + console.log('Buscando grupos para o usuário:', userEmail); + + // Primeiro verificar se o usuário tem instância WhatsApp + const instanceData = await getUserWhatsAppInstance(userEmail); + console.log('Dados da instância do usuário:', instanceData); + + if (!instanceData || !instanceData.instancia_zap) { + console.log('Usuário não tem instância WhatsApp válida ou dados estão incompletos'); + return []; } - - // Always return the group, even if workflow creation fails - return group; + + // Buscar grupos usando o email como user_id + const { data: grupos, error } = await supabase + .from('grupos_whatsapp') + .select('*') + .eq('user_id', userEmail.trim().toLowerCase()) + .order('created_at', { ascending: false }); + + if (error) { + console.error('Erro ao listar grupos do WhatsApp:', error); + throw new Error('Não foi possível listar os grupos de WhatsApp'); + } + + console.log('Grupos encontrados:', grupos); + return grupos || []; + } catch (error) { - console.error('Erro ao cadastrar grupo do WhatsApp:', error); - throw error; // Propagate error to be handled in the component + console.error('Erro ao listar grupos do WhatsApp:', error); + throw error; } } -// Re-export functions from the specialized services for backward compatibility -export { listWhatsAppGroups as listarGruposWhatsApp }; -export { updateWorkflowId as atualizarWorkflowId }; +/** + * Verifica se o usuário tem uma instância WhatsApp conectada + */ +export async function verificarInstanciaWhatsApp(): Promise<{ + hasInstance: boolean; + instanceName: string | null; + status: string | null; +}> { + try { + const userEmail = localStorage.getItem('userEmail'); + if (!userEmail) { + console.log('Email do usuário não fornecido'); + return { hasInstance: false, instanceName: null, status: null }; + } + + console.log('Verificando instância para o usuário:', userEmail); + const instanceData = await getUserWhatsAppInstance(userEmail); + + if (!instanceData) { + console.log('Usuário não possui instância'); + return { hasInstance: false, instanceName: null, status: null }; + } + + const hasInstance = !!(instanceData.instancia_zap && instanceData.instancia_zap.trim() !== ''); + console.log('Resultado da verificação:', { + hasInstance, + instanceName: instanceData.instancia_zap, + status: instanceData.status_instancia + }); + + return { + hasInstance, + instanceName: instanceData.instancia_zap, + status: instanceData.status_instancia + }; + + } catch (error) { + console.error('Erro ao verificar instância WhatsApp:', error); + return { hasInstance: false, instanceName: null, status: null }; + } +} diff --git a/src/services/whatsAppInstanceService.ts b/src/services/whatsAppInstanceService.ts index 758d75a..2b18e4d 100644 --- a/src/services/whatsAppInstanceService.ts +++ b/src/services/whatsAppInstanceService.ts @@ -51,14 +51,21 @@ export async function getUserWhatsAppInstance(userEmail: string): Promise<{ if (error) { console.error('Erro ao buscar instância WhatsApp:', error); + throw error; + } + + console.log('Dados da instância encontrados no banco:', data); + + // Se não encontrou dados, retorna null + if (!data) { + console.log('Nenhum usuário encontrado com o email:', userEmail); return null; } - console.log('Dados da instância encontrados:', data); return data; } catch (error) { console.error('Erro ao buscar instância WhatsApp:', error); - return null; + throw error; } } @@ -68,7 +75,9 @@ export async function getUserWhatsAppInstance(userEmail: string): Promise<{ export async function checkUserHasInstance(userEmail: string): Promise { try { const instanceData = await getUserWhatsAppInstance(userEmail); - return !!(instanceData && instanceData.instancia_zap && instanceData.instancia_zap.trim() !== ''); + const hasInstance = !!(instanceData && instanceData.instancia_zap && instanceData.instancia_zap.trim() !== ''); + console.log(`Usuário ${userEmail} tem instância:`, hasInstance, instanceData); + return hasInstance; } catch (error) { console.error('Erro ao verificar se usuário tem instância:', error); return false; @@ -101,3 +110,29 @@ export async function removeUserWhatsAppInstance(userEmail: string): Promise { + try { + console.log('Buscando informações completas do usuário para debug:', userEmail); + + const { data, error } = await supabase + .from('usuarios') + .select('*') + .eq('email', userEmail.trim().toLowerCase()) + .maybeSingle(); + + if (error) { + console.error('Erro ao buscar informações completas do usuário:', error); + throw error; + } + + console.log('Informações completas do usuário encontradas:', data); + return data; + } catch (error) { + console.error('Erro ao buscar informações completas do usuário:', error); + throw error; + } +}