riseup-squad18/scripts/manage-users.js
Fernando Pirichowski Aguiar 389a191f20 fix: corrige persistência de avatar, agendamento de consulta e download de PDF
- Avatar do paciente agora persiste após reload (adiciona timestamp para evitar cache)
- Agendamento usa patient_id correto ao invés de user_id
- Botão de download de PDF desbloqueado com logs detalhados
2025-11-15 08:36:41 -03:00

276 lines
7.1 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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(" <20>💼 Secretária: secretaria@mediconnect.com / secretaria123");
console.log(" <20>👨 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);