From ec390787c641cdf5e75a410d99142a5fc858b479 Mon Sep 17 00:00:00 2001
From: "gpt-engineer-app[bot]"
<159125892+gpt-engineer-app[bot]@users.noreply.github.com>
Date: Thu, 19 Jun 2025 22:28:40 +0000
Subject: [PATCH] Implement WhatsApp connection flow
- Updated database on instance creation.
- Added n8n workflow activation.
- Filtered instance display by user email.
---
.../whatsapp/CreateInstanceForm.tsx | 52 +++++++++++------
src/hooks/useWhatsAppInstances.ts | 24 +++++++-
src/pages/WhatsApp.tsx | 16 ++++--
src/services/whatsAppInstanceService.ts | 56 +++++++++++++++++++
4 files changed, 126 insertions(+), 22 deletions(-)
diff --git a/src/components/whatsapp/CreateInstanceForm.tsx b/src/components/whatsapp/CreateInstanceForm.tsx
index 16f4ad8..5b8acf1 100644
--- a/src/components/whatsapp/CreateInstanceForm.tsx
+++ b/src/components/whatsapp/CreateInstanceForm.tsx
@@ -7,7 +7,7 @@ import { Label } from '@/components/ui/label';
import { MessageCircle, AlertCircle } from 'lucide-react';
import { useToast } from '@/hooks/use-toast';
import { createWhatsAppInstance } from '@/services/whatsAppService';
-import { updateUserWhatsAppInstance, getUserWhatsAppInstance } from '@/services/whatsAppInstanceService';
+import { updateUserWhatsAppInstance, getUserWhatsAppInstance, activateUserWorkflow } from '@/services/whatsAppInstanceService';
import { WhatsAppInstance } from '@/types/whatsAppTypes';
import { Alert, AlertDescription } from '@/components/ui/alert';
@@ -104,17 +104,34 @@ const CreateInstanceForm = ({
setLoading(true);
try {
- console.log(`Criando instância com nome ${instanceName} e número ${phoneNumber}`);
+ console.log(`🚀 Iniciando criação de instância com nome ${instanceName} e número ${phoneNumber}`);
- // 1. Primeiro atualizar o banco de dados com a instância
- await updateUserWhatsAppInstance(userEmail, instanceName, 'desconectado');
- console.log('Instância registrada no banco de dados');
-
- // 2. Criar instância na API
+ // 1. Criar instância na API
+ console.log('📡 Passo 1: Criando instância na API...');
const data = await createWhatsAppInstance(instanceName, phoneNumber);
- console.log('Resposta da API de criação de instância:', data);
+ console.log('✅ Resposta da API de criação de instância:', data);
- // 3. Criar objeto da instância
+ // 2. Atualizar o banco de dados com status "conectado"
+ console.log('💾 Passo 2: Atualizando banco de dados...');
+ await updateUserWhatsAppInstance(userEmail, instanceName, 'conectado');
+ console.log('✅ Instância registrada no banco de dados com status "conectado"');
+
+ // 3. Ativar o workflow do usuário no n8n
+ console.log('🔄 Passo 3: Ativando workflow do usuário no n8n...');
+ try {
+ await activateUserWorkflow(userEmail);
+ console.log('✅ Workflow ativado com sucesso no n8n');
+ } catch (workflowError) {
+ console.error('⚠️ Erro ao ativar workflow, mas instância foi criada:', workflowError);
+ // Não bloquear o fluxo se o workflow falhar, apenas loggar
+ toast({
+ title: "Aviso",
+ description: "Instância criada, mas houve um problema ao ativar a automação. Entre em contato com o suporte.",
+ variant: "destructive",
+ });
+ }
+
+ // 4. Criar objeto da instância
const newInstance: WhatsAppInstance = {
instanceName,
instanceId: instanceName,
@@ -125,31 +142,31 @@ const CreateInstanceForm = ({
connectionState: 'closed'
};
- console.log('Nova instância criada:', newInstance);
+ console.log('✅ Nova instância criada:', newInstance);
- // 4. Atualizar estado para evitar nova criação
+ // 5. Atualizar estado para evitar nova criação
setHasExistingInstance(true);
- // 5. Notificar componente pai
+ // 6. Notificar componente pai
onInstanceCreated(newInstance);
toast({
title: "Sucesso!",
- description: "Instância do WhatsApp criada com sucesso!"
+ description: "Instância do WhatsApp criada e ativada com sucesso!"
});
// Reset form fields
setPhoneNumber('');
} catch (error) {
- console.error("Erro ao criar instância WhatsApp:", error);
+ console.error("💥 Erro ao criar instância WhatsApp:", error);
- // Se houve erro na API, remover do banco de dados
+ // Se houve erro na API, tentar reverter no banco de dados
try {
await updateUserWhatsAppInstance(userEmail, '', 'desconectado');
- console.log('Instância removida do banco devido ao erro na API');
+ console.log('🔄 Instância removida do banco devido ao erro na API');
} catch (dbError) {
- console.error('Erro ao remover instância do banco:', dbError);
+ console.error('❌ Erro ao reverter instância no banco:', dbError);
}
toast({
@@ -260,6 +277,7 @@ const CreateInstanceForm = ({
• Apenas uma instância por usuário é permitida
• O nome da instância será seu email de login
• Após criar, você precisará escanear o QR Code para conectar
+
• Sua automação financeira será ativada automaticamente
diff --git a/src/hooks/useWhatsAppInstances.ts b/src/hooks/useWhatsAppInstances.ts
index cb68383..4370fe0 100644
--- a/src/hooks/useWhatsAppInstances.ts
+++ b/src/hooks/useWhatsAppInstances.ts
@@ -3,6 +3,8 @@ import { useInstanceState } from './whatsApp/useInstanceState';
import { useInstanceOperations } from './whatsApp/useInstanceOperations';
import { useInstanceStatusCheck } from './whatsApp/useInstanceStatusCheck';
import { useInstanceRefresh } from './whatsApp/useInstanceRefresh';
+import { WhatsAppInstance } from '@/types/whatsAppTypes';
+import { useMemo } from 'react';
export const useWhatsAppInstances = () => {
const {
@@ -34,8 +36,28 @@ export const useWhatsAppInstances = () => {
setIsRefreshing
);
+ // Filtrar instâncias para mostrar apenas as do usuário logado
+ const filteredInstances = useMemo(() => {
+ const userEmail = localStorage.getItem('userEmail');
+ if (!userEmail) {
+ console.log('❌ Email do usuário não encontrado, retornando lista vazia');
+ return [];
+ }
+
+ const filtered = instances.filter((instance: WhatsAppInstance) => {
+ // Comparar o instanceName com o email do usuário
+ // Como o instanceName é o email do usuário, podemos fazer a comparação direta
+ const isUserInstance = instance.instanceName === userEmail;
+ console.log(`🔍 Verificando instância ${instance.instanceName} para usuário ${userEmail}: ${isUserInstance ? 'INCLUIR' : 'EXCLUIR'}`);
+ return isUserInstance;
+ });
+
+ console.log(`📋 Total de instâncias: ${instances.length}, Filtradas para usuário ${userEmail}: ${filtered.length}`);
+ return filtered;
+ }, [instances]);
+
return {
- instances,
+ instances: filteredInstances, // Retornar instâncias filtradas
isRefreshing,
currentUserId,
addInstance,
diff --git a/src/pages/WhatsApp.tsx b/src/pages/WhatsApp.tsx
index ea64b89..0cc4083 100644
--- a/src/pages/WhatsApp.tsx
+++ b/src/pages/WhatsApp.tsx
@@ -57,7 +57,7 @@ const WhatsApp = () => {
// Handler para quando o usuário cria uma nova instância
const handleInstanceCreated = (newInstance: WhatsAppInstance) => {
- console.log('New instance to be added:', newInstance);
+ console.log('🎉 Nova instância criada:', newInstance);
addInstance(newInstance);
setInstanceFound(true);
setShowCreateForm(false);
@@ -82,7 +82,7 @@ const WhatsApp = () => {
// Handler for when an instance is deleted
const handleDeleteInstanceWrapper = (instanceId: string) => {
- console.log(`Instance deletion requested for ID: ${instanceId}`);
+ console.log(`🗑️ Solicitação de exclusão da instância ID: ${instanceId}`);
const instanceToDelete = instances.find(i => i.instanceId === instanceId);
if (instanceToDelete) {
handleDeleteInstance(instanceId, instanceToDelete.instanceName);
@@ -93,18 +93,26 @@ const WhatsApp = () => {
setShowCreateForm(true);
}
} else {
- console.error(`Instance with ID ${instanceId} not found for deletion`);
+ console.error(`❌ Instância com ID ${instanceId} não encontrada para exclusão`);
}
};
// Check if we have any instances to show
const hasInstances = Array.isArray(instances) && instances.length > 0;
+ const userEmail = localStorage.getItem('userEmail') || '';
return (