mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-11 17:29:37 +02:00
Fix: Correction du décalage horaire de 1h pour les événements Google Calendar
Problème identifié: - Google Calendar envoie '2025-11-17T10:20:00+01:00' (10h20 Paris = 09h20 UTC) - PostgreSQL TIMESTAMP enlève le fuseau horaire et stocke '2025-11-17 10:20:00' (heure locale) - Le parser 1114 traite cette valeur comme UTC → '2025-11-17T10:20:00.000Z' - Frontend affiche 11h20 en heure de Paris (10:20 UTC + 1h) au lieu de 10h20 Solution: - Convertir tous les timestamps en UTC (ISO format) avant insertion dans PostgreSQL - Appliquer la conversion dans toutes les routes: POST /sync, POST /events, PUT /events/:id - Le parser 1114 traite maintenant correctement les valeurs UTC stockées Changements: - routes/calendar.routes.js: Conversion UTC avant insertion (3 routes corrigées) - routes/calendar.routes.js: Correction syntaxe PostgreSQL (INSERT ... ON CONFLICT) - scripts/cleanup-calendar-events.js: Script pour nettoyer les événements existants Pour appliquer la correction sur les données existantes: 1. Exécuter: docker exec notes-todo-app node scripts/cleanup-calendar-events.js 2. Redémarrer: docker-compose restart notes-app 3. Resynchroniser Google Calendar depuis l'interface web
This commit is contained in:
3 files changed
+118
-17
No files matched your search
Executable
+64
@@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Script pour nettoyer les événements calendar existants
|
||||
* À exécuter après la correction du bug timezone pour forcer une resynchronisation
|
||||
*/
|
||||
|
||||
const { Pool } = require('pg');
|
||||
|
||||
const DATABASE_URL = process.env.DATABASE_URL ||
|
||||
`postgresql://${process.env.PGUSER || 'noteflow'}:${process.env.PGPASSWORD || 'noteflow_secure_password_change_me'}@${process.env.PGHOST || 'postgres'}:${process.env.PGPORT || '5499'}/${process.env.PGDATABASE || 'noteflow'}`;
|
||||
|
||||
async function cleanup() {
|
||||
const pool = new Pool({ connectionString: DATABASE_URL });
|
||||
|
||||
try {
|
||||
console.log('\n╔════════════════════════════════════════════════════════════╗');
|
||||
console.log('║ NETTOYAGE DES ÉVÉNEMENTS CALENDAR ║');
|
||||
console.log('╚════════════════════════════════════════════════════════════╝\n');
|
||||
|
||||
const client = await pool.connect();
|
||||
|
||||
// Compter les événements avant
|
||||
const countBefore = await client.query('SELECT COUNT(*) FROM calendar_events');
|
||||
console.log(`📊 Nombre d'événements actuels: ${countBefore.rows[0].count}\n`);
|
||||
|
||||
if (parseInt(countBefore.rows[0].count) === 0) {
|
||||
console.log('✅ Aucun événement à nettoyer\n');
|
||||
client.release();
|
||||
await pool.end();
|
||||
return;
|
||||
}
|
||||
|
||||
// Supprimer tous les événements
|
||||
console.log('🗑️ Suppression des événements...');
|
||||
const deleteResult = await client.query('DELETE FROM calendar_events');
|
||||
console.log(`✅ ${deleteResult.rowCount} événement(s) supprimé(s)\n`);
|
||||
|
||||
// Vérifier après
|
||||
const countAfter = await client.query('SELECT COUNT(*) FROM calendar_events');
|
||||
console.log(`📊 Nombre d'événements après: ${countAfter.rows[0].count}\n`);
|
||||
|
||||
console.log('╔════════════════════════════════════════════════════════════╗');
|
||||
console.log('║ ✅ NETTOYAGE TERMINÉ ║');
|
||||
console.log('╚════════════════════════════════════════════════════════════╝\n');
|
||||
|
||||
console.log('📝 PROCHAINES ÉTAPES:\n');
|
||||
console.log('1. Redémarrez l\'application avec: docker-compose restart notes-app');
|
||||
console.log('2. Ouvrez l\'interface web');
|
||||
console.log('3. Allez dans Admin → Google Calendar');
|
||||
console.log('4. Cliquez sur "Synchroniser"');
|
||||
console.log('5. Vérifiez que les heures sont maintenant correctes\n');
|
||||
|
||||
client.release();
|
||||
await pool.end();
|
||||
|
||||
} catch (error) {
|
||||
console.error('\n❌ Erreur:', error.message);
|
||||
console.error(error.stack);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
cleanup();
|
||||
Reference in new issue
Block a user