riseup-squad18/scripts/cleanup-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

135 lines
3.6 KiB
JavaScript

import axios from "axios";
const SUPABASE_URL = "https://yuanqfswhberkoevtmfr.supabase.co";
const ANON_KEY =
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl1YW5xZnN3aGJlcmtvZXZ0bWZyIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTQ5NTQzNjksImV4cCI6MjA3MDUzMDM2OX0.g8Fm4XAvtX46zifBZnYVH4tVuQkqUH6Ia9CXQj4DztQ";
let ACCESS_TOKEN = "";
// 1. 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: "riseup@popcode.com.br",
password: "riseup",
},
{
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 usuários
async function listUsers() {
console.log("\n📋 Listando usuários...\n");
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(`${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}`);
console.log(` 🆔 ID: ${user.id}\n`);
});
return response.data;
} catch (error) {
console.error(
"❌ Erro ao listar usuários:",
error.response?.data || error.message
);
return [];
}
}
// 3. Deletar usuário
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
);
}
}
// Script principal
async function main() {
console.log("🧹 Iniciando limpeza de usuários de teste...");
// 1. Login
await login();
// 2. Listar usuários atuais
const users = await listUsers();
// 3. Lista de emails para deletar (apenas os que o assistente criou)
const testEmails = [
"admin@mediconnect.com",
"secretaria@mediconnect.com",
"dr.medico@mediconnect.com",
"fernando.pirichowski@souunit.com.br",
];
// 4. Deletar usuários de teste
let deletedCount = 0;
for (const user of users) {
if (testEmails.includes(user.email)) {
await deleteUser(user.id, user.full_name || user.email);
deletedCount++;
// Aguardar 1 segundo entre deleções
await new Promise((resolve) => setTimeout(resolve, 1000));
}
}
console.log(
`\n✅ Limpeza concluída! ${deletedCount} usuários de teste deletados.`
);
// 5. Listar usuários finais
console.log("\n📊 Usuários restantes:");
await listUsers();
}
main().catch(console.error);