/** * 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();