- 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
135 lines
3.6 KiB
JavaScript
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);
|