const axios = require('axios'); // Configurações const BASE_URL = 'https://bff-dev.saveinmed.com.br/api/v1'; const EMAIL = 'andre.fr93@gmail.com'; const SENHA = 'j875bth9'; let accessToken = ''; let userId = ''; async function login() { console.log('🔐 Fazendo login...'); try { const response = await axios.post(`${BASE_URL}/auth/login`, { identificador: EMAIL, senha: SENHA }); accessToken = response.data.access_token; console.log('✅ Login realizado com sucesso'); console.log('Token:', accessToken.substring(0, 20) + '...'); return true; } catch (error) { console.error('❌ Erro no login:', error.response?.data || error.message); return false; } } async function getUserData() { console.log('👤 Buscando dados do usuário...'); try { const response = await axios.get(`${BASE_URL}/auth/me`, { headers: { 'Authorization': `Bearer ${accessToken}`, 'accept': 'application/json' } }); userId = response.data.id || response.data._id || response.data.userId; console.log('✅ Dados do usuário obtidos'); console.log('User ID:', userId); console.log('Dados:', JSON.stringify(response.data, null, 2)); return response.data; } catch (error) { console.error('❌ Erro ao buscar dados do usuário:', error.response?.data || error.message); return null; } } async function criarEndereco() { console.log('📍 Criando endereço...'); const enderecoData = { titulo: "Endereço Principal Teste", cep: "15990200", logradouro: "Rua São Lourenço", numero: "123", complemento: "casa", cidade: "Matão", estado: "SP", pais: "Brasil", bairro: "Centro" }; try { const response = await axios.post(`${BASE_URL}/enderecos`, enderecoData, { headers: { 'Authorization': `Bearer ${accessToken}`, 'Content-Type': 'application/json', 'accept': 'application/json' } }); const enderecoId = response.data.id || response.data._id; console.log('✅ Endereço criado com ID:', enderecoId); console.log('Resposta:', JSON.stringify(response.data, null, 2)); return enderecoId; } catch (error) { console.error('❌ Erro ao criar endereço:', error.response?.data || error.message); console.error('Status:', error.response?.status); console.error('Headers:', error.response?.headers); return null; } } async function criarEmpresa(enderecoId) { console.log('🏢 Criando empresa...'); // Vamos testar com um payload mais simples primeiro const empresaData = { cnpj: "15961591595252", "razao-social": "TESTE LTDA", "nome-fantasia": "TESTE", "data-abertura": "2000-02-20", situacao: "Ativa", "natureza-juridica": "TESTE sda", porte: "MEI", "capital-social": 50000, telefone: "15654894156", email: "andre.fr93@gmail.com", "atividade-principal-codigo": "1510", "atividade-principal-desc": "TESTE TESTE", enderecos: enderecoId ? [enderecoId] : [] }; console.log('Payload empresa:', JSON.stringify(empresaData, null, 2)); try { const response = await axios.post(`${BASE_URL}/empresas`, empresaData, { headers: { 'Authorization': `Bearer ${accessToken}`, 'Content-Type': 'application/json', 'accept': 'application/json' } }); const empresaId = response.data.id || response.data._id; console.log('✅ Empresa criada com ID:', empresaId); console.log('Resposta:', JSON.stringify(response.data, null, 2)); return empresaId; } catch (error) { console.error('❌ Erro ao criar empresa:'); console.error('Status:', error.response?.status); console.error('Data:', error.response?.data); // Vamos tentar sem alguns campos para identificar o problema console.log('\n🔄 Tentando com payload simplificado...'); const empresaSimples = { cnpj: "15961591595252", "razao-social": "TESTE LTDA", "nome-fantasia": "TESTE", "data-abertura": "2000-02-20", situacao: "Ativa", "natureza-juridica": "TESTE sda", porte: "MEI", "capital-social": 50000, telefone: "15654894156", email: "andre.fr93@gmail.com", "atividade-principal-codigo": "1510", "atividade-principal-desc": "TESTE TESTE" // Removendo enderecos para testar }; try { const response2 = await axios.post(`${BASE_URL}/empresas`, empresaSimples, { headers: { 'Authorization': `Bearer ${accessToken}`, 'Content-Type': 'application/json', 'accept': 'application/json' } }); const empresaId = response2.data.id || response2.data._id; console.log('✅ Empresa criada com payload simplificado - ID:', empresaId); return empresaId; } catch (error2) { console.error('❌ Erro mesmo com payload simplificado:', error2.response?.data); return null; } } } async function atualizarUsuario(enderecoId, empresaId) { console.log('👤 Atualizando usuário...'); if (!userId) { console.error('❌ ID do usuário não encontrado'); return false; } // Primeiro buscar dados atuais const userData = await getUserData(); if (!userData) { return false; } // Gerenciar arrays de endereços e empresas - extrair apenas IDs const enderecosExistentes = userData.enderecos || []; const empresasExistentes = userData.empresasDados || []; // Extrair apenas os IDs dos endereços existentes const enderecosIds = enderecosExistentes.map((endereco) => { if (typeof endereco === 'string') { return endereco; // Já é um ID } return endereco.$id || endereco.id || endereco; // Extrair ID do objeto }); // Extrair apenas os IDs das empresas existentes const empresasIds = empresasExistentes.map((empresa) => { if (typeof empresa === 'string') { return empresa; // Já é um ID } return empresa.$id || empresa.id || empresa; // Extrair ID do objeto }); const usuarioData = { ...userData, nome: "NANDO", email: EMAIL, cpf: "12345678901", // CPF com exatamente 11 dígitos "nome-social": "NANDO TESTE", // Não pode ser vazio "registro-completo": true, enderecos: enderecoId ? [...enderecosIds, enderecoId] : enderecosIds, empresasDados: empresaId ? [...empresasIds, empresaId] : empresasIds }; console.log('Payload usuário:', JSON.stringify(usuarioData, null, 2)); try { const response = await axios.patch(`${BASE_URL}/usuarios/${userId}`, usuarioData, { headers: { 'Authorization': `Bearer ${accessToken}`, 'Content-Type': 'application/json', 'accept': 'application/json' } }); console.log('✅ Usuário atualizado com sucesso'); console.log('Resposta:', JSON.stringify(response.data, null, 2)); return true; } catch (error) { console.error('❌ Erro ao atualizar usuário:'); console.error('Status:', error.response?.status); console.error('Data:', error.response?.data); if (error.response?.data) { console.error('Detalhes do erro:', JSON.stringify(error.response.data, null, 2)); } return false; } } async function testarFluxoCompleto() { console.log('🚀 Iniciando teste do fluxo completo...\n'); // 1. Login const loginSuccess = await login(); if (!loginSuccess) { console.log('❌ Falha no login, abortando teste'); return; } console.log('\n'); // 2. Buscar dados do usuário const userData = await getUserData(); if (!userData) { console.log('❌ Falha ao buscar dados do usuário, abortando teste'); return; } console.log('\n'); // 3. Criar endereço const enderecoId = await criarEndereco(); if (!enderecoId) { console.log('❌ Falha ao criar endereço, abortando teste'); return; } console.log('\n'); // 4. Criar empresa const empresaId = await criarEmpresa(enderecoId); if (!empresaId) { console.log('❌ Falha ao criar empresa, abortando teste'); return; } console.log('\n'); // 5. Atualizar usuário const updateSuccess = await atualizarUsuario(enderecoId, empresaId); if (!updateSuccess) { console.log('❌ Falha ao atualizar usuário'); return; } console.log('\n🎉 Teste completo realizado com sucesso!'); console.log(`✅ Endereço ID: ${enderecoId}`); console.log(`✅ Empresa ID: ${empresaId}`); console.log(`✅ Usuário atualizado`); } // Executar teste testarFluxoCompleto().catch(console.error);