142 lines
5.1 KiB
JavaScript
142 lines
5.1 KiB
JavaScript
/**
|
||
* Script para criar 3 consultas de exemplo para o usuário/paciente Pedro Araujo.
|
||
* Credenciais locais fornecidas: Email: pedro.araujo@mediconnect.com Senha: local123
|
||
* Este script NÃO cria o usuário nem o paciente se não existirem; apenas tenta
|
||
* localizar o paciente por email e gerar um arquivo local de demonstração
|
||
* (src/data/consultas-pedro.json) e opcionalmente mesclar no consultas-demo.json.
|
||
*
|
||
* Modo 1 (arquivo local): Gera JSON com consultas fictícias.
|
||
* Modo 2 (Supabase) - opcional futuro: Inserir via REST (requer tabela appointments e RLS configurada).
|
||
*/
|
||
|
||
import fs from 'fs';
|
||
import path from 'path';
|
||
import fetch from 'node-fetch';
|
||
|
||
const SUPABASE_URL = 'https://yuanqfswhberkoevtmfr.supabase.co';
|
||
const SUPABASE_ANON_KEY = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inl1YW5xZnN3aGJlcmtvZXZ0bWZyIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NTQ5NTQzNjksImV4cCI6MjA3MDUzMDM2OX0.g8Fm4XAvtX46zifBZnYVH4tVuQkqUH6Ia9CXQj4DztQ';
|
||
|
||
const PEDRO_EMAIL = 'pedro.araujo@mediconnect.com';
|
||
// Placeholder: se souber o ID real do paciente no Supabase, coloque aqui para futura inserção
|
||
let pedroPatientId = null;
|
||
|
||
async function tentarLocalizarPaciente() {
|
||
try {
|
||
const res = await fetch(`${SUPABASE_URL}/rest/v1/patients?select=id,email&email=eq.${encodeURIComponent(PEDRO_EMAIL)}`, {
|
||
headers: {
|
||
apikey: SUPABASE_ANON_KEY,
|
||
Authorization: `Bearer ${SUPABASE_ANON_KEY}`,
|
||
}
|
||
});
|
||
if (!res.ok) return null;
|
||
const data = await res.json();
|
||
if (Array.isArray(data) && data.length > 0) {
|
||
return data[0].id;
|
||
}
|
||
return null;
|
||
} catch (e) {
|
||
return null;
|
||
}
|
||
}
|
||
|
||
function criarConsultasLocais(patientIdOrEmail) {
|
||
const agora = new Date();
|
||
const isoFuturo = (dias, hora) => {
|
||
const d = new Date(agora.getTime() + dias * 86400000);
|
||
d.setHours(hora, 0, 0, 0);
|
||
return d.toISOString();
|
||
};
|
||
|
||
const medicoFernandoId = 'be1e3cba-534e-48c3-9590-b7e55861cade';
|
||
const medicoFernandoNome = 'Fernando Pirichowski - Squad 18';
|
||
const pacientePedroNome = 'Pedro Araujo';
|
||
|
||
const consultas = [
|
||
{
|
||
id: 'consulta-demo-pedro-001',
|
||
pacienteId: patientIdOrEmail,
|
||
medicoId: medicoFernandoId,
|
||
pacienteNome: pacientePedroNome,
|
||
medicoNome: medicoFernandoNome,
|
||
dataHora: isoFuturo(2, 10),
|
||
status: 'agendada',
|
||
tipo: 'Consulta',
|
||
observacoes: 'Primeira avaliação clínica do Pedro.'
|
||
},
|
||
{
|
||
id: 'consulta-demo-pedro-002',
|
||
pacienteId: patientIdOrEmail,
|
||
medicoId: medicoFernandoId,
|
||
pacienteNome: pacientePedroNome,
|
||
medicoNome: medicoFernandoNome,
|
||
dataHora: isoFuturo(7, 9),
|
||
status: 'confirmada',
|
||
tipo: 'Retorno',
|
||
observacoes: 'Retorno para revisar sintomas.'
|
||
},
|
||
{
|
||
id: 'consulta-demo-pedro-003',
|
||
pacienteId: patientIdOrEmail,
|
||
medicoId: medicoFernandoId,
|
||
pacienteNome: pacientePedroNome,
|
||
medicoNome: medicoFernandoNome,
|
||
dataHora: isoFuturo(14, 11),
|
||
status: 'agendada',
|
||
tipo: 'Exame',
|
||
observacoes: 'Agendamento de exame complementar.'
|
||
}
|
||
];
|
||
return consultas;
|
||
}
|
||
|
||
function salvarArquivoJson(fileName, data) {
|
||
const dataDir = path.join(process.cwd(), 'src', 'data');
|
||
if (!fs.existsSync(dataDir)) fs.mkdirSync(dataDir, { recursive: true });
|
||
const fullPath = path.join(dataDir, fileName);
|
||
fs.writeFileSync(fullPath, JSON.stringify(data, null, 2));
|
||
console.log(`✅ Arquivo gerado: ${fullPath}`);
|
||
return fullPath;
|
||
}
|
||
|
||
function mesclarNoConsultasDemo(novas) {
|
||
const demoPath = path.join(process.cwd(), 'src', 'data', 'consultas-demo.json');
|
||
if (!fs.existsSync(demoPath)) {
|
||
console.log('ℹ️ consultas-demo.json não encontrado, pulando mescla.');
|
||
return;
|
||
}
|
||
try {
|
||
const atual = JSON.parse(fs.readFileSync(demoPath, 'utf-8'));
|
||
const idsExistentes = new Set(atual.map(c => c.id));
|
||
const filtradas = novas.filter(c => !idsExistentes.has(c.id));
|
||
const combinado = [...atual, ...filtradas];
|
||
fs.writeFileSync(demoPath, JSON.stringify(combinado, null, 2));
|
||
console.log(`✅ ${filtradas.length} consultas adicionadas a consultas-demo.json`);
|
||
} catch (e) {
|
||
console.warn('⚠️ Falha ao mesclar no consultas-demo.json:', e.message);
|
||
}
|
||
}
|
||
|
||
async function main() {
|
||
console.log('\n📁 Criando consultas de exemplo para Pedro...');
|
||
const pacienteId = await tentarLocalizarPaciente();
|
||
if (pacienteId) {
|
||
pedroPatientId = pacienteId;
|
||
console.log(`✅ Paciente encontrado no Supabase: ${pacienteId}`);
|
||
} else {
|
||
console.log('ℹ️ Paciente Pedro não encontrado no Supabase — usando email como identificador local.');
|
||
}
|
||
const ident = pedroPatientId || PEDRO_EMAIL;
|
||
const consultas = criarConsultasLocais(ident);
|
||
salvarArquivoJson('consultas-pedro.json', consultas);
|
||
mesclarNoConsultasDemo(consultas);
|
||
console.log('\n✨ Concluído. Você pode agora:');
|
||
console.log(' 1. Rodar a aplicação (pnpm dev)');
|
||
console.log(' 2. Verificar se seu código carrega dados de src/data/consultas-demo.json');
|
||
console.log(' 3. (Se não carregar automaticamente) Injetar via console usando snippet que fornecerei.');
|
||
}
|
||
|
||
main().catch(e => {
|
||
console.error('❌ Erro no script:', e.message);
|
||
process.exit(1);
|
||
});
|