/** * Script para listar todos os usuários do sistema * Lista informações de auth.users, doctors e patients */ import axios from "axios"; const SUPABASE_URL = "https://yuanqfswhberkoevtmfr.supabase.co"; const SUPABASE_ANON_KEY = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl1YW5xZnN3aGJlcmtvZXZ0bWZyIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTQ5NTQzNjksImV4cCI6MjA3MDUzMDM2OX0.g8Fm4XAvtX46zifBZnYVH4tVuQkqUH6Ia9CXQj4DztQ"; // Credenciais do admin const ADMIN_EMAIL = "riseup@popcode.com.br"; const ADMIN_PASSWORD = "riseup"; async function main() { try { console.log("🔐 Fazendo login como admin...\n"); // 1. Login do admin const loginResponse = await axios.post( `${SUPABASE_URL}/auth/v1/token?grant_type=password`, { email: ADMIN_EMAIL, password: ADMIN_PASSWORD, }, { headers: { apikey: SUPABASE_ANON_KEY, "Content-Type": "application/json", }, } ); const token = loginResponse.data.access_token; const userId = loginResponse.data.user.id; console.log("✅ Login realizado com sucesso!"); console.log(`User ID: ${userId}\n`); // 2. Listar todos os médicos console.log("👨‍⚕️ LISTANDO MÉDICOS:\n"); const medicosResponse = await axios.get( `${SUPABASE_URL}/rest/v1/doctors?select=*`, { headers: { apikey: SUPABASE_ANON_KEY, Authorization: `Bearer ${token}`, }, } ); console.log(`Total de médicos: ${medicosResponse.data.length}\n`); medicosResponse.data.forEach((medico, index) => { console.log( `${index + 1}. ${medico.full_name || medico.nome || "Sem nome"}` ); console.log(` ID: ${medico.id}`); console.log(` User ID: ${medico.user_id || "não vinculado"}`); console.log(` Email: ${medico.email}`); console.log(` CRM: ${medico.crm} - ${medico.crm_uf || ""}`); console.log( ` Especialidade: ${medico.specialty || medico.especialidade}` ); console.log(` Ativo: ${medico.active ? "Sim" : "Não"}`); console.log(""); }); // 3. Listar todos os pacientes console.log("👥 LISTANDO PACIENTES:\n"); const pacientesResponse = await axios.get( `${SUPABASE_URL}/rest/v1/patients?select=*`, { headers: { apikey: SUPABASE_ANON_KEY, Authorization: `Bearer ${token}`, }, } ); console.log(`Total de pacientes: ${pacientesResponse.data.length}\n`); pacientesResponse.data.forEach((paciente, index) => { console.log(`${index + 1}. ${paciente.full_name}`); console.log(` ID: ${paciente.id}`); console.log(` Email: ${paciente.email}`); console.log(` CPF: ${paciente.cpf}`); console.log(` Telefone: ${paciente.phone_mobile}`); console.log(""); }); // 4. Verificar se existe tabela de roles/profiles console.log("🔍 VERIFICANDO ESTRUTURA DE ROLES:\n"); try { const profilesResponse = await axios.get( `${SUPABASE_URL}/rest/v1/profiles?select=*`, { headers: { apikey: SUPABASE_ANON_KEY, Authorization: `Bearer ${token}`, }, } ); console.log( `✅ Tabela profiles encontrada com ${profilesResponse.data.length} registros` ); console.log("Profiles:"); profilesResponse.data.forEach((profile) => { console.log(` - User ID: ${profile.id || profile.user_id}`); console.log(` Role: ${profile.role || "não definida"}`); console.log(` Nome: ${profile.full_name || "não definido"}`); console.log(""); }); } catch (error) { if (error.response?.status === 404) { console.log("⚠️ Tabela profiles não encontrada ou não acessível"); console.log( "💡 Sugestão: Criar tabela profiles com campos: id (uuid), user_id (uuid), role (text), full_name (text)\n" ); } else { console.log( "❌ Erro ao acessar profiles:", error.response?.data?.message || error.message ); } } // 5. Resumo console.log("📊 RESUMO:\n"); console.log(`✅ ${medicosResponse.data.length} médicos cadastrados`); console.log(`✅ ${pacientesResponse.data.length} pacientes cadastrados`); const medicosComUser = medicosResponse.data.filter((m) => m.user_id).length; console.log(`\n🔗 ${medicosComUser} médicos vinculados a usuários auth`); console.log( `⚠️ ${ medicosResponse.data.length - medicosComUser } médicos SEM vinculação auth\n` ); } catch (error) { console.error("❌ Erro:", error.response?.data || error.message); if (error.response) { console.error("Status:", error.response.status); } } } main();