mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-12 01:39:47 +02:00
Amélioration de la migration timezone pour éviter les données corrompues PROBLÈME: Les événements existants ont des heures incorrectes car: - Stockés en TIMESTAMP (sans timezone) - Driver PostgreSQL les interprète comme UTC - Décalage d'1h lors de l'affichage SOLUTION: 1. Supprimer TOUS les événements existants 2. Convertir les colonnes TIMESTAMP → TIMESTAMPTZ 3. Forcer resynchronisation depuis Google Calendar Migration mise à jour: - DELETE FROM calendar_events (supprime données corrompues) - ALTER COLUMN → TIMESTAMPTZ - Les nouvelles syncs utiliseront TIMESTAMPTZ - Heures correctes garanties APRÈS REBUILD: 1. Docker rebuild applique TIMESTAMPTZ 2. Migration supprime les anciens événements 3. Resynchronisez Google Calendar dans l'interface 4. Les heures seront correctes scripts/migrate-calendar-timezone.js ligne 52-55
104 lines
3.1 KiB
JavaScript
Executable File
104 lines
3.1 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
// Migration: Convertir calendar_events TIMESTAMP → TIMESTAMPTZ
|
|
// + Supprimer les données existantes et forcer resynchronisation
|
|
const { Pool } = require('pg');
|
|
|
|
const DATABASE_URL = process.env.DATABASE_URL;
|
|
|
|
if (!DATABASE_URL) {
|
|
console.error('❌ DATABASE_URL non définie');
|
|
process.exit(1);
|
|
}
|
|
|
|
async function migrate() {
|
|
const pool = new Pool({ connectionString: DATABASE_URL });
|
|
|
|
try {
|
|
console.log('\n🔄 Migration: calendar_events TIMESTAMP → TIMESTAMPTZ\n');
|
|
|
|
const client = await pool.connect();
|
|
|
|
// Vérifier le type actuel
|
|
const check = await client.query(`
|
|
SELECT column_name, data_type
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'calendar_events'
|
|
AND column_name IN ('start_time', 'end_time')
|
|
`);
|
|
|
|
console.log('📊 Types actuels:');
|
|
check.rows.forEach(row => {
|
|
console.log(` ${row.column_name}: ${row.data_type}`);
|
|
});
|
|
|
|
// Si déjà TIMESTAMPTZ, skip
|
|
const alreadyMigrated = check.rows.every(row =>
|
|
row.data_type.includes('timestamp with time zone') ||
|
|
row.data_type === 'timestamptz'
|
|
);
|
|
|
|
if (alreadyMigrated) {
|
|
console.log('\n✅ Migration déjà effectuée, rien à faire');
|
|
client.release();
|
|
await pool.end();
|
|
return;
|
|
}
|
|
|
|
console.log('\n🔄 Conversion en cours...');
|
|
|
|
await client.query('BEGIN');
|
|
|
|
// SUPPRIMER toutes les données existantes pour éviter les problèmes de timezone
|
|
console.log(' 🗑️ Suppression des événements existants (seront resynchronisés)');
|
|
const deleteResult = await client.query('DELETE FROM calendar_events');
|
|
console.log(` ✅ ${deleteResult.rowCount} événements supprimés`);
|
|
|
|
// Convertir start_time
|
|
await client.query(`
|
|
ALTER TABLE calendar_events
|
|
ALTER COLUMN start_time TYPE TIMESTAMPTZ
|
|
USING start_time AT TIME ZONE 'UTC'
|
|
`);
|
|
console.log(' ✅ start_time → TIMESTAMPTZ');
|
|
|
|
// Convertir end_time
|
|
await client.query(`
|
|
ALTER TABLE calendar_events
|
|
ALTER COLUMN end_time TYPE TIMESTAMPTZ
|
|
USING end_time AT TIME ZONE 'UTC'
|
|
`);
|
|
console.log(' ✅ end_time → TIMESTAMPTZ');
|
|
|
|
await client.query('COMMIT');
|
|
|
|
// Vérifier après migration
|
|
const verify = await client.query(`
|
|
SELECT column_name, data_type
|
|
FROM information_schema.columns
|
|
WHERE table_name = 'calendar_events'
|
|
AND column_name IN ('start_time', 'end_time')
|
|
`);
|
|
|
|
console.log('\n📊 Types après migration:');
|
|
verify.rows.forEach(row => {
|
|
console.log(` ${row.column_name}: ${row.data_type}`);
|
|
});
|
|
|
|
console.log('\n✅ Migration terminée avec succès!');
|
|
console.log('');
|
|
console.log('⚠️ IMPORTANT: Resynchronisez Google Calendar pour récupérer');
|
|
console.log(' vos événements avec les bonnes heures.');
|
|
console.log('');
|
|
|
|
client.release();
|
|
await pool.end();
|
|
|
|
} catch (error) {
|
|
console.error('\n❌ Erreur lors de la migration:', error.message);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
migrate();
|