riseup-squad18/MEDICONNECT 2/scripts/criar-medico-fernando.js

261 lines
8.1 KiB
JavaScript

/**
* Script para criar médico Fernando Pirichowski - Squad 18
* Cria usuário auth + registro na tabela doctors + atualiza profile com role
*/
import axios from "axios";
const SUPABASE_URL = "https://yuanqfswhberkoevtmfr.supabase.co";
const SUPABASE_ANON_KEY =
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl1YW5xZnN3aGJlcmtvZXZ0bWZyIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTQ5NTQzNjksImV4cCI6MjA3MDUzMDM2OX0.g8Fm4XAvtX46zifBZnYVH4tVuQkqUH6Ia9CXQj4DztQ";
// Credenciais do admin para operações autenticadas
const ADMIN_EMAIL = "riseup@popcode.com.br";
const ADMIN_PASSWORD = "riseup";
// Dados do médico Fernando
const FERNANDO_EMAIL = "fernando.pirichowski@souunit.com.br";
const FERNANDO_PASSWORD = "fernando";
const FERNANDO_NOME = "Fernando Pirichowski - Squad 18";
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 adminToken = loginResponse.data.access_token;
console.log("✅ Login admin realizado com sucesso!\n");
// 2. Verificar se usuário já existe tentando fazer login primeiro
console.log("👤 Verificando se usuário Fernando já existe...\n");
let fernandoUserId;
let fernandoToken;
let usuarioJaExiste = false;
try {
// Tentar login primeiro
const loginFernando = await axios.post(
`${SUPABASE_URL}/auth/v1/token?grant_type=password`,
{
email: FERNANDO_EMAIL,
password: FERNANDO_PASSWORD,
},
{
headers: {
apikey: SUPABASE_ANON_KEY,
"Content-Type": "application/json",
},
}
);
fernandoUserId = loginFernando.data.user.id;
fernandoToken = loginFernando.data.access_token;
usuarioJaExiste = true;
console.log("✅ Usuário já existe! Login realizado com sucesso.");
console.log(` User ID: ${fernandoUserId}\n`);
} catch (loginError) {
// Se login falhar, tentar criar
console.log(" Usuário não existe, criando novo...\n");
try {
const signupResponse = await axios.post(
`${SUPABASE_URL}/auth/v1/signup`,
{
email: FERNANDO_EMAIL,
password: FERNANDO_PASSWORD,
data: {
full_name: FERNANDO_NOME,
},
},
{
headers: {
apikey: SUPABASE_ANON_KEY,
"Content-Type": "application/json",
},
}
);
fernandoUserId = signupResponse.data.user?.id || signupResponse.data.id;
fernandoToken =
signupResponse.data.access_token ||
signupResponse.data.session?.access_token;
if (!fernandoUserId) {
throw new Error("Não foi possível obter o User ID do signup");
}
console.log("✅ Usuário criado com sucesso!");
console.log(` User ID: ${fernandoUserId}`);
console.log(` Email: ${FERNANDO_EMAIL}\n`);
} catch (signupError) {
throw signupError;
}
}
// 3. Criar registro na tabela doctors
console.log("🏥 Criando registro na tabela doctors...\n");
const doctorData = {
user_id: fernandoUserId,
full_name: FERNANDO_NOME,
email: FERNANDO_EMAIL,
cpf: "12345678901", // CPF válido para teste
crm: "SQUAD18",
crm_uf: "SE",
specialty: "Clínico Geral",
phone_mobile: "79999999999",
active: true,
};
let doctorId;
try {
const doctorResponse = await axios.post(
`${SUPABASE_URL}/rest/v1/doctors`,
doctorData,
{
headers: {
apikey: SUPABASE_ANON_KEY,
Authorization: `Bearer ${adminToken}`,
"Content-Type": "application/json",
Prefer: "return=representation",
},
}
);
doctorId = Array.isArray(doctorResponse.data)
? doctorResponse.data[0].id
: doctorResponse.data.id;
console.log("✅ Médico cadastrado na tabela doctors!");
console.log(` Doctor ID: ${doctorId}`);
console.log(` Nome: ${FERNANDO_NOME}`);
console.log(` CRM: ${doctorData.crm}-${doctorData.crm_uf}\n`);
} catch (error) {
if (error.response?.data?.message?.includes("duplicate key")) {
console.log("⚠️ Registro de médico já existe na tabela doctors\n");
// Buscar o ID do médico existente
const existingDoctor = await axios.get(
`${SUPABASE_URL}/rest/v1/doctors?email=eq.${FERNANDO_EMAIL}&select=id`,
{
headers: {
apikey: SUPABASE_ANON_KEY,
Authorization: `Bearer ${adminToken}`,
},
}
);
if (existingDoctor.data.length > 0) {
doctorId = existingDoctor.data[0].id;
console.log(` Doctor ID existente: ${doctorId}\n`);
}
} else {
throw error;
}
}
// 4. Atualizar profile com role 'medico'
console.log('🔧 Atualizando profile com role "medico"...\n');
try {
await axios.patch(
`${SUPABASE_URL}/rest/v1/profiles?id=eq.${fernandoUserId}`,
{
role: "medico",
full_name: FERNANDO_NOME,
},
{
headers: {
apikey: SUPABASE_ANON_KEY,
Authorization: `Bearer ${adminToken}`,
"Content-Type": "application/json",
Prefer: "return=representation",
},
}
);
console.log('✅ Profile atualizado com role "medico"!\n');
} catch (error) {
console.log(
"⚠️ Erro ao atualizar profile:",
error.response?.data?.message || error.message
);
console.log(" (Profile pode ter sido criado automaticamente)\n");
}
// 5. Verificar criação
console.log("🔍 VERIFICANDO CADASTRO COMPLETO:\n");
const verificarDoctor = await axios.get(
`${SUPABASE_URL}/rest/v1/doctors?user_id=eq.${fernandoUserId}&select=*`,
{
headers: {
apikey: SUPABASE_ANON_KEY,
Authorization: `Bearer ${adminToken}`,
},
}
);
const verificarProfile = await axios.get(
`${SUPABASE_URL}/rest/v1/profiles?id=eq.${fernandoUserId}&select=*`,
{
headers: {
apikey: SUPABASE_ANON_KEY,
Authorization: `Bearer ${adminToken}`,
},
}
);
console.log("✅ MÉDICO FERNANDO CRIADO COM SUCESSO!\n");
console.log("📋 Detalhes do cadastro:\n");
console.log("Auth User:");
console.log(` - ID: ${fernandoUserId}`);
console.log(` - Email: ${FERNANDO_EMAIL}`);
console.log(` - Senha: ${FERNANDO_PASSWORD}\n`);
if (verificarDoctor.data.length > 0) {
console.log("Tabela Doctors:");
console.log(` - ID: ${verificarDoctor.data[0].id}`);
console.log(` - Nome: ${verificarDoctor.data[0].full_name}`);
console.log(
` - CRM: ${verificarDoctor.data[0].crm}-${verificarDoctor.data[0].crm_uf}`
);
console.log(` - Especialidade: ${verificarDoctor.data[0].specialty}`);
console.log(
` - Ativo: ${verificarDoctor.data[0].active ? "Sim" : "Não"}\n`
);
}
if (verificarProfile.data.length > 0) {
console.log("Tabela Profiles:");
console.log(` - User ID: ${verificarProfile.data[0].id}`);
console.log(` - Nome: ${verificarProfile.data[0].full_name}`);
console.log(
` - Role: ${verificarProfile.data[0].role || "não definida"}\n`
);
}
console.log("🎉 Agora você pode fazer login com:");
console.log(` Email: ${FERNANDO_EMAIL}`);
console.log(` Senha: ${FERNANDO_PASSWORD}\n`);
} catch (error) {
console.error("❌ Erro:", error.response?.data || error.message);
if (error.response) {
console.error("Status:", error.response.status);
console.error("Data:", JSON.stringify(error.response.data, null, 2));
}
}
}
main();