261 lines
8.1 KiB
JavaScript
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();
|