riseup-squad18/MEDICONNECT 2/scripts/listar-usuarios.js

147 lines
4.8 KiB
JavaScript

/**
* 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();