59 lines
2.0 KiB
TypeScript
59 lines
2.0 KiB
TypeScript
// plugins/scheduler.client.ts
|
|
import { useClinicStore } from '@/stores/clinicStore';
|
|
import { useDoctorStore } from '@/stores/doctorStore';
|
|
|
|
export default defineNuxtPlugin((nuxtApp) => {
|
|
// We only want this to run on the client side (kiosks)
|
|
if (process.server) return;
|
|
|
|
const CHECK_INTERVAL = 60 * 1000; // Check every minute
|
|
let isSyncing = false;
|
|
|
|
const checkSync = async () => {
|
|
if (isSyncing) return;
|
|
|
|
try {
|
|
const clinicStore = useClinicStore();
|
|
const doctorStore = useDoctorStore();
|
|
|
|
const now = new Date();
|
|
|
|
// We target 2:00 AM.
|
|
// If it's between 2:00 and 2:05, and store says sync is needed, we trigger it.
|
|
// This window prevents missing it if the kiosk is slightly off or interval skips.
|
|
const isSyncWindow = now.getHours() === 2 && now.getMinutes() < 5;
|
|
|
|
const clinicSyncNeeded = clinicStore.isSyncNeeded();
|
|
const doctorSyncNeeded = doctorStore.isSyncNeeded();
|
|
|
|
if (isSyncWindow && (clinicSyncNeeded || doctorSyncNeeded)) {
|
|
console.log('⏰ [scheduler] 2 AM Sync window detected. Triggering sync...');
|
|
isSyncing = true;
|
|
|
|
// 1. Sync Clinics
|
|
console.log('🔄 [scheduler] Syncing clinics...');
|
|
await clinicStore.fetchRegulerClinics(true);
|
|
|
|
// 2. Sync Doctors after clinics are ready
|
|
console.log('🔄 [scheduler] Syncing doctors...');
|
|
const allClinics = clinicStore.clinics;
|
|
await doctorStore.syncAllDoctors(allClinics);
|
|
|
|
console.log('✅ [scheduler] Daily 2 AM sync completed successfully.');
|
|
}
|
|
} catch (error) {
|
|
console.error('❌ [scheduler] Error during scheduled sync:', error);
|
|
} finally {
|
|
isSyncing = false;
|
|
}
|
|
};
|
|
|
|
// Run initial check on site load
|
|
setTimeout(checkSync, 5000); // Wait 5s for stores to hydrate
|
|
|
|
// Set interval for periodic check
|
|
setInterval(checkSync, CHECK_INTERVAL);
|
|
|
|
console.log('🕒 [scheduler] 2 AM Sync Scheduler initialized.');
|
|
});
|