import axios from "axios"; const SUPABASE_URL = "https://yuanqfswhberkoevtmfr.supabase.co"; const ANON_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl1YW5xZnN3aGJlcmtvZXZ0bWZyIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTQ5NTQzNjksImV4cCI6MjA3MDUzMDM2OX0.g8Fm4XAvtX46zifBZnYVH4tVuQkqUH6Ia9CXQj4DztQ"; // Credenciais do admin const ADMIN_EMAIL = "riseup@popcode.com.br"; const ADMIN_PASSWORD = "riseup"; let ACCESS_TOKEN = ""; // 1. Fazer login como admin async function login() { console.log("\n🔐 Fazendo login como admin..."); try { const response = await axios.post( `${SUPABASE_URL}/auth/v1/token?grant_type=password`, { email: ADMIN_EMAIL, password: ADMIN_PASSWORD, }, { headers: { "Content-Type": "application/json", apikey: ANON_KEY, }, } ); ACCESS_TOKEN = response.data.access_token; console.log("✅ Login realizado com sucesso!"); console.log("📧 Email:", response.data.user.email); console.log("🆔 User ID:", response.data.user.id); return response.data; } catch (error) { console.error("❌ Erro no login:", error.response?.data || error.message); process.exit(1); } } // 2. Listar todos os usuários (via profiles - simplificado) async function listUsers() { console.log("\n📋 Listando usuários..."); try { const response = await axios.get( `${SUPABASE_URL}/rest/v1/profiles?select=id,full_name,email`, { headers: { apikey: ANON_KEY, Authorization: `Bearer ${ACCESS_TOKEN}`, }, } ); console.log(`\n✅ ${response.data.length} usuários encontrados:\n`); response.data.forEach((user, index) => { console.log(`${index + 1}. ${user.full_name || "Sem nome"}`); console.log(` 📧 Email: ${user.email || "Sem email"}`); console.log(` 🆔 ID: ${user.id}`); console.log(""); }); return response.data; } catch (error) { console.error( "❌ Erro ao listar usuários:", error.response?.data || error.message ); return []; } } // 3. Deletar usuário (Edge Function) async function deleteUser(userId, userName) { console.log(`\n🗑️ Deletando usuário: ${userName} (${userId})...`); try { const response = await axios.post( `${SUPABASE_URL}/functions/v1/delete-user`, { userId }, { headers: { "Content-Type": "application/json", apikey: ANON_KEY, Authorization: `Bearer ${ACCESS_TOKEN}`, }, } ); console.log(`✅ ${userName} deletado com sucesso!`); return response.data; } catch (error) { console.error( `❌ Erro ao deletar ${userName}:`, error.response?.data || error.message ); } } // 4. Criar novo usuário com Edge Function async function createUserWithPassword(email, password, fullName, role) { console.log(`\n➕ Criando usuário: ${fullName} (${role})...`); try { const response = await axios.post( `${SUPABASE_URL}/functions/v1/create-user`, { email, password, full_name: fullName, role, }, { headers: { "Content-Type": "application/json", apikey: ANON_KEY, Authorization: `Bearer ${ACCESS_TOKEN}`, }, } ); console.log(`✅ ${fullName} criado com sucesso!`); console.log(` 📧 Email: ${email}`); console.log(` 🔑 Senha: ${password}`); console.log(` 👤 Role: ${role}`); return response.data; } catch (error) { console.error( `❌ Erro ao criar ${fullName}:`, error.response?.data || error.message ); } } // 5. Criar médico com Edge Function async function createDoctor( email, password, fullName, especialidade, crm, crmUf, cpf ) { console.log(`\n➕ Criando médico: ${fullName}...`); try { const response = await axios.post( `${SUPABASE_URL}/functions/v1/create-doctor`, { email, password, full_name: fullName, cpf, especialidade, crm, crm_uf: crmUf, }, { headers: { "Content-Type": "application/json", apikey: ANON_KEY, Authorization: `Bearer ${ACCESS_TOKEN}`, }, } ); console.log(`✅ ${fullName} criado com sucesso!`); console.log(` 📧 Email: ${email}`); console.log(` 🔑 Senha: ${password}`); console.log(` 🆔 CPF: ${cpf}`); console.log(` 🩺 Especialidade: ${especialidade}`); console.log(` 📋 CRM: ${crm}-${crmUf}`); return response.data; } catch (error) { console.error( `❌ Erro ao criar ${fullName}:`, error.response?.data || error.message ); } } // Script principal async function main() { console.log("🚀 Iniciando gerenciamento de usuários..."); // 1. Login await login(); // 2. Listar usuários atuais const users = await listUsers(); // 3. Encontrar e deletar admin e médico específicos (por email) const adminToDelete = users.find((u) => u.email === "admin@mediconnect.com"); const secretariaToDelete = users.find( (u) => u.email === "secretaria@mediconnect.com" ); const medicoToDelete = users.find( (u) => u.email === "medico@mediconnect.com" || u.email === "dr.medico@mediconnect.com" ); if (adminToDelete) { await deleteUser( adminToDelete.id, adminToDelete.full_name || adminToDelete.email ); } else { console.log("\n⚠️ Nenhum admin adicional encontrado para deletar"); } if (secretariaToDelete) { await deleteUser( secretariaToDelete.id, secretariaToDelete.full_name || secretariaToDelete.email ); } else { console.log("\n⚠️ Nenhuma secretária encontrada para deletar"); } if (medicoToDelete) { await deleteUser( medicoToDelete.id, medicoToDelete.full_name || medicoToDelete.email ); } else { console.log("\n⚠️ Nenhum médico encontrado para deletar"); } // 4. Aguardar um pouco console.log("\n⏳ Aguardando 2 segundos..."); await new Promise((resolve) => setTimeout(resolve, 2000)); // 5. Criar novos usuários await createUserWithPassword( "admin@mediconnect.com", "admin123", "Administrador Sistema", "admin" ); await createUserWithPassword( "secretaria@mediconnect.com", "secretaria123", "Secretária Sistema", "secretaria" ); await createDoctor( "dr.medico@mediconnect.com", "medico123", "Dr. João Silva", "Cardiologia", "12345", "SP", "12345678900" ); // 6. Listar usuários finais console.log("\n📊 Estado final dos usuários:"); await listUsers(); console.log("\n✅ Processo concluído!"); console.log("\n📝 Credenciais dos novos usuários:"); console.log(" 👨‍💼 Admin: admin@mediconnect.com / admin123"); console.log(" �‍💼 Secretária: secretaria@mediconnect.com / secretaria123"); console.log(" �👨‍⚕️ Médico: dr.medico@mediconnect.com / medico123"); console.log(" 🆔 CPF: 12345678900"); console.log(" 🩺 Especialidade: Cardiologia"); console.log(" 📋 CRM: 12345-SP"); } // Executar main().catch(console.error);