From 3889badb7be00f0793b7121e96fc08f2ce7e9041 Mon Sep 17 00:00:00 2001
From: "gpt-engineer-app[bot]"
<159125892+gpt-engineer-app[bot]@users.noreply.github.com>
Date: Sat, 21 Jun 2025 15:23:35 +0000
Subject: [PATCH] Fix: Prevent new instance creation
The app was incorrectly allowing new WhatsApp instance creation even when a connected instance already existed. This commit addresses this issue.
---
.../whatsapp/useExistingInstanceCheck.ts | 15 +--
src/pages/WhatsApp.tsx | 104 ++++++++++--------
2 files changed, 64 insertions(+), 55 deletions(-)
diff --git a/src/hooks/whatsapp/useExistingInstanceCheck.ts b/src/hooks/whatsapp/useExistingInstanceCheck.ts
index 5797d78..1c3498d 100644
--- a/src/hooks/whatsapp/useExistingInstanceCheck.ts
+++ b/src/hooks/whatsapp/useExistingInstanceCheck.ts
@@ -10,18 +10,18 @@ export const useExistingInstanceCheck = (userEmail: string) => {
useEffect(() => {
const checkExistingInstance = async () => {
if (!userEmail) {
- console.log('❌ Email do usuário não encontrado');
+ console.log('❌ [EXISTING_INSTANCE] Email do usuário não encontrado');
setCheckingExistingInstance(false);
return;
}
try {
- console.log('🔍 Verificando se usuário já tem instância:', userEmail);
+ console.log('🔍 [EXISTING_INSTANCE] Verificando se usuário já tem instância CONECTADA:', userEmail);
const existingInstance = await getUserWhatsAppInstance(userEmail);
- console.log('📋 Dados da instância encontrados:', existingInstance);
+ console.log('📋 [EXISTING_INSTANCE] Dados da instância encontrados:', existingInstance);
- // Verificação correta: deve ter instancia_zap igual ao email E status_instancia = 'conectado'
+ // Verificação CORRETA: instancia_zap deve ser igual ao email E status_instancia = 'conectado'
const hasValidConnectedInstance = !!(
existingInstance &&
existingInstance.instancia_zap &&
@@ -32,19 +32,20 @@ export const useExistingInstanceCheck = (userEmail: string) => {
existingInstance.status_instancia === 'conectado'
);
- console.log('✅ Usuário possui instância conectada:', hasValidConnectedInstance, {
+ console.log('✅ [EXISTING_INSTANCE] Usuário possui instância CONECTADA:', hasValidConnectedInstance, {
instancia_zap: existingInstance?.instancia_zap,
status_instancia: existingInstance?.status_instancia,
userEmail: userEmail,
instanceMatchesEmail: existingInstance?.instancia_zap?.toLowerCase() === userEmail.toLowerCase(),
- isConnected: existingInstance?.status_instancia === 'conectado'
+ isConnected: existingInstance?.status_instancia === 'conectado',
+ hasValidConnectedInstance
});
setHasExistingInstance(hasValidConnectedInstance);
setExistingInstanceData(existingInstance);
} catch (error) {
- console.error('❌ Erro ao verificar instância existente:', error);
+ console.error('❌ [EXISTING_INSTANCE] Erro ao verificar instância existente:', error);
setHasExistingInstance(false);
setExistingInstanceData(null);
} finally {
diff --git a/src/pages/WhatsApp.tsx b/src/pages/WhatsApp.tsx
index 5ee3ff1..043f5a9 100644
--- a/src/pages/WhatsApp.tsx
+++ b/src/pages/WhatsApp.tsx
@@ -1,3 +1,4 @@
+
import { WhatsAppInstance } from '@/types/whatsAppTypes';
import Layout from '@/components/layout/Layout';
import CreateInstanceForm from '@/components/whatsapp/CreateInstanceForm';
@@ -38,7 +39,6 @@ const WhatsApp = () => {
handleViewQrCode
} = useWhatsAppActions(updateInstance, removeInstance, checkAllInstancesStatus);
- // Custom hook for instance fetching and management
const {
instanceName,
isLoading,
@@ -49,28 +49,32 @@ const WhatsApp = () => {
clearInstanceName
} = useWhatsAppInstance(currentUserId, addInstance);
- // State para controlar se deve mostrar o formulário de criação
const [showCreateForm, setShowCreateForm] = useState(false);
- const [hasValidInstance, setHasValidInstance] = useState(false);
+ const [hasConnectedInstance, setHasConnectedInstance] = useState(false);
const [checkingUserInstance, setCheckingUserInstance] = useState(true);
- const userEmail = localStorage.getItem('userEmail') || '';
+ const userEmail = (localStorage.getItem('userEmail') || '').toLowerCase();
- // Verificar se o usuário tem instância válida conectada no banco de dados
+ // Verificar se o usuário tem instância CONECTADA no banco de dados
useEffect(() => {
- const checkUserInstanceFromDB = async () => {
+ const checkUserConnectedInstance = async () => {
if (!userEmail) {
+ console.log('❌ Email do usuário não encontrado');
setCheckingUserInstance(false);
setShowCreateForm(true);
return;
}
+ setCheckingUserInstance(true);
+
try {
- console.log('🔍 Verificando instância do usuário no banco:', userEmail);
+ console.log('🔍 [WHATSAPP] Verificando instância conectada para:', userEmail);
const instanceData = await getUserWhatsAppInstance(userEmail);
- // Lógica corrigida: instancia_zap deve ser igual ao email E status deve ser 'conectado'
- const hasConnectedInstance = !!(
+ console.log('📋 [WHATSAPP] Dados da instância encontrados:', instanceData);
+
+ // Verificação CORRETA: instancia_zap deve ser igual ao email E status deve ser 'conectado'
+ const hasConnectedInstanceInDB = !!(
instanceData &&
instanceData.instancia_zap &&
instanceData.instancia_zap.trim() !== '' &&
@@ -80,53 +84,51 @@ const WhatsApp = () => {
instanceData.status_instancia === 'conectado'
);
- console.log('📋 Verificação da instância:', {
+ console.log('✅ [WHATSAPP] Verificação da instância conectada:', {
instanceData,
userEmail,
instanceMatchesEmail: instanceData?.instancia_zap?.toLowerCase() === userEmail.toLowerCase(),
isConnected: instanceData?.status_instancia === 'conectado',
- hasConnectedInstance
+ hasConnectedInstanceInDB
});
- setHasValidInstance(hasConnectedInstance);
- setShowCreateForm(!hasConnectedInstance); // Mostra formulário apenas se NÃO tiver instância conectada
+ setHasConnectedInstance(hasConnectedInstanceInDB);
+ setShowCreateForm(!hasConnectedInstanceInDB); // Mostra formulário APENAS se NÃO tiver instância conectada
- if (hasConnectedInstance) {
+ if (hasConnectedInstanceInDB) {
setInstanceFound(true);
+ console.log('✅ [WHATSAPP] Usuário já possui instância conectada, ocultando formulário de criação');
+ } else {
+ console.log('❌ [WHATSAPP] Usuário NÃO possui instância conectada, mostrando formulário de criação');
}
} catch (error) {
- console.error('❌ Erro ao verificar instância do usuário:', error);
- setHasValidInstance(false);
+ console.error('❌ [WHATSAPP] Erro ao verificar instância do usuário:', error);
+ setHasConnectedInstance(false);
setShowCreateForm(true);
} finally {
setCheckingUserInstance(false);
}
};
- checkUserInstanceFromDB();
+ checkUserConnectedInstance();
}, [userEmail, setInstanceFound]);
- // Set up periodic status checking only after instances are loaded
usePeriodicStatusCheck(instances.length, checkAllInstancesStatus);
- // Handler para quando o usuário cria uma nova instância
const handleInstanceCreated = (newInstance: WhatsAppInstance) => {
- console.log('🎉 Nova instância criada:', newInstance);
+ console.log('🎉 [WHATSAPP] Nova instância criada:', newInstance);
addInstance(newInstance);
setInstanceFound(true);
- setHasValidInstance(true);
+ setHasConnectedInstance(true);
setShowCreateForm(false);
- // Salvar o nome da instância no localStorage para uso futuro
saveInstanceName(newInstance.instanceName);
- // If there's a QR code in the response, show it
if (newInstance.qrcode) {
handleViewQrCode(newInstance);
}
- // Trigger a status check for all instances with a delay
setTimeout(async () => {
try {
await checkAllInstancesStatus();
@@ -136,25 +138,22 @@ const WhatsApp = () => {
}, 2000);
};
- // Handler for when an instance is deleted
const handleDeleteInstanceWrapper = (instanceId: string) => {
- console.log(`🗑️ Solicitação de exclusão da instância ID: ${instanceId}`);
+ console.log(`🗑️ [WHATSAPP] Solicitação de exclusão da instância ID: ${instanceId}`);
const instanceToDelete = instances.find(i => i.instanceId === instanceId);
if (instanceToDelete) {
handleDeleteInstance(instanceId, instanceToDelete.instanceName);
- // Se a instância excluída for a atual, limpar o nome salvo e permitir criação de nova
if (instanceToDelete.instanceName === instanceName) {
clearInstanceName();
- setHasValidInstance(false);
+ setHasConnectedInstance(false);
setShowCreateForm(true);
}
} else {
- console.error(`❌ Inst ncia com ID ${instanceId} não encontrada para exclusão`);
+ console.error(`❌ [WHATSAPP] 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;
if (checkingUserInstance || isLoading) {
@@ -178,7 +177,6 @@ const WhatsApp = () => {
)}
- {/* Update List Button - Always visible */}
- {/* Show create form if user doesn't have a connected instance */}
- {showCreateForm && (
-
Você já possui uma instância do WhatsApp conectada. Não é necessário criar uma nova.
+