refactor: migrate core page layouts to use SafeAreaView and add utility notification scripts and Stepper component

This commit is contained in:
2026-04-23 10:39:13 +01:00
parent 5d16602ceb
commit 0fb8ffb12a
14 changed files with 1246 additions and 786 deletions

65
verify_notifications.mjs Normal file
View File

@@ -0,0 +1,65 @@
import { createClient } from '@supabase/supabase-js';
const supabaseUrl = 'https://jqklhhpyykzrktikjnmb.supabase.co';
const supabaseAnonKey = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Impxa2xoaHB5eWt6cmt0aWtqbm1iIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjgzODQ0MDgsImV4cCI6MjA4Mzk2MDQwOH0.QsPuBnyUtRPSavlqKj3IGR9c8juT02LY_hSi-j3c6M0';
const supabase = createClient(supabaseUrl, supabaseAnonKey);
async function verifyNotifications() {
console.log("--- INICIANDO VERIFICAÇÃO DE SISTEMA DE NOTIFICAÇÕES ---");
// 1. Verificar se existem tokens FCM registados
const { data: usersWithTokens, error: err1 } = await supabase
.from('profiles')
.select('id, name, fcm_token')
.not('fcm_token', 'is', null);
if (err1) {
console.error("Erro ao buscar perfis:", err1);
} else {
console.log(`Tokens encontrados: ${usersWithTokens.length}`);
usersWithTokens.forEach(u => {
console.log(` - Utilizador: ${u.name} | Token: ${u.fcm_token ? 'PRESENTE (' + u.fcm_token.substring(0, 20) + '...)' : 'AUSENTE'}`);
});
}
// 2. Verificar agendamentos pendentes com lembrete ativado
const { data: appts, error: err2 } = await supabase
.from('appointments')
.select('id, date, status, reminder_minutes, reminder_sent')
.eq('status', 'pendente')
.eq('reminder_sent', false);
if (err2) {
console.error("Erro ao buscar agendamentos:", err2);
} else {
console.log(`Agendamentos pendentes para lembrete: ${appts.length}`);
const now = new Date();
appts.forEach(a => {
const apptDate = new Date(a.date.replace(' ', 'T'));
const diffMin = (apptDate.getTime() - now.getTime()) / (1000 * 60);
const status = diffMin <= (a.reminder_minutes || 1440) ? "PROXIMO (Deve disparar)" : "FUTURO";
console.log(` - ID: ${a.id} | Data: ${a.date} | Faltam: ${Math.round(diffMin)}min | Config: ${a.reminder_minutes}min | Estado: ${status}`);
});
}
// 3. Verificar se a tabela de notificações está a receber dados
const { data: recentNotifs, error: err3 } = await supabase
.from('notifications')
.select('*')
.order('created_at', { ascending: false })
.limit(5);
if (err3) {
console.error("Erro ao buscar log de notificações:", err3);
} else {
console.log(`Últimas 5 notificações registadas na BD:`);
recentNotifs.forEach(n => {
console.log(` - [${n.created_at}] Para User: ${n.user_id} | MSG: ${n.message} | Lida: ${n.read}`);
});
}
console.log("--- FIM DA VERIFICAÇÃO ---");
}
verifyNotifications();