- 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
276 lines
7.1 KiB
JavaScript
276 lines
7.1 KiB
JavaScript
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);
|