# 🔧 FIX DÉFINITIF - DĂ©calage Horaire Google Calendar ## 🔍 ProblĂšme identifiĂ© **Analyse approfondie effectuĂ©e:** Le dĂ©calage d'1 heure vient de la migration PostgreSQL qui utilisait `AT TIME ZONE 'UTC'` au lieu de `'Europe/Paris'`. ### Flux du problĂšme: ``` Google Calendar (10h Paris avec offset +01:00) ↓ PostgreSQL stocke en TIMESTAMP (sans timezone) → "10:00:00" ↓ Migration: AT TIME ZONE 'UTC' ❌ (suppose que 10h est UTC) ↓ PostgreSQL traite comme: 10h UTC = 11h Paris ↓ Frontend affiche: 11h ❌ (dĂ©calage d'1h) ``` ### Solution appliquĂ©e: ``` Google Calendar (10h Paris avec offset +01:00) ↓ Migration: DELETE les anciens Ă©vĂ©nements ✅ ↓ Migration: AT TIME ZONE 'Europe/Paris' ✅ ↓ Nouvelle sync Google Calendar ↓ PostgreSQL TIMESTAMPTZ stocke correctement ↓ Frontend affiche: 10h ✅ (correct!) ``` --- ## 🚀 ÉTAPES DE CORRECTION ### 1ïžâƒŁ Rebuild Docker (applique les corrections) ```bash docker-compose build notes-app && docker-compose restart notes-app ``` **Attendez de voir dans les logs:** ``` 🔄 Migration des timezones du calendrier... 📊 Types actuels: timestamp without time zone 🔄 Conversion en cours... đŸ—‘ïž Suppression des Ă©vĂ©nements existants ✅ X Ă©vĂ©nements supprimĂ©s ✅ start_time → TIMESTAMPTZ ✅ end_time → TIMESTAMPTZ ✅ Migration terminĂ©e avec succĂšs! ``` ### 2ïžâƒŁ Resynchroniser Google Calendar 1. Ouvrez **http://localhost:2222** 2. Connectez-vous 3. Allez dans **Admin** → **Google Calendar** 4. Cliquez sur **🔄 Synchroniser** **RĂ©sultat attendu:** ``` 15 Ă©vĂ©nements synchronisĂ©s ``` ### 3ïžâƒŁ VĂ©rifier les heures Dans la box Calendrier, vĂ©rifiez que: - ÉvĂ©nement Google Ă  10h00 → NoteFlow affiche 10h00 ✅ - ÉvĂ©nement Google Ă  15h30 → NoteFlow affiche 15h30 ✅ - Plus de dĂ©calage d'1h! --- ## 🔍 DIAGNOSTIC (si problĂšme persiste) ExĂ©cutez le script de diagnostic: ```bash docker exec notes-todo-app node scripts/diagnose-calendar-timezone.js ``` **Ce script affichera:** - ✅ Timezone PostgreSQL (devrait ĂȘtre UTC) - ✅ Types de colonnes (TIMESTAMPTZ ou TIMESTAMP) - ✅ Exemples de dates stockĂ©es (brut, UTC, Paris) - ✅ Format renvoyĂ© par le driver Node.js - ⚠ Recommandations si problĂšme dĂ©tectĂ© --- ## 📊 VĂ©rification manuelle PostgreSQL ### VĂ©rifier les types de colonnes: ```bash docker exec noteflow-postgres psql -U noteflow -d noteflow -p 5499 -c " SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'calendar_events' AND column_name IN ('start_time', 'end_time'); " ``` **Attendu:** ``` column_name | data_type -------------+----------------------------------- end_time | timestamp with time zone start_time | timestamp with time zone ``` ### VĂ©rifier un exemple de date: ```bash docker exec noteflow-postgres psql -U noteflow -d noteflow -p 5499 -c " SELECT title, start_time, start_time AT TIME ZONE 'Europe/Paris' as heure_paris FROM calendar_events ORDER BY start_time ASC LIMIT 3; " ``` **VĂ©rifiez que `heure_paris` correspond Ă  l'heure dans Google Calendar.** --- ## 🆘 Si le problĂšme persiste ### Option 1: Suppression manuelle + resync ```bash # Supprimer tous les Ă©vĂ©nements docker exec noteflow-postgres psql -U noteflow -d noteflow -p 5499 -c "DELETE FROM calendar_events" # Puis resynchroniser depuis l'interface web ``` ### Option 2: VĂ©rifier timezone serveur PostgreSQL ```bash docker exec noteflow-postgres psql -U noteflow -d noteflow -p 5499 -c "SHOW timezone" ``` **Devrait afficher:** `UTC` ou `Etc/UTC` Si ce n'est pas UTC, dĂ©finissez-le: ```bash docker exec noteflow-postgres psql -U noteflow -d noteflow -p 5499 -c "ALTER DATABASE noteflow SET timezone TO 'UTC'" ``` Puis redĂ©marrez: ```bash docker-compose restart postgres docker-compose restart notes-app ``` ### Option 3: VĂ©rifier timezone navigateur Le dĂ©calage pourrait venir du navigateur. VĂ©rifiez: ```javascript // Dans la console du navigateur (F12) console.log(new Date().getTimezoneOffset()); console.log(Intl.DateTimeFormat().resolvedOptions().timeZone); ``` **Attendu pour Paris:** - `getTimezoneOffset()`: -60 (hiver) ou -120 (Ă©tĂ©) - `timeZone`: "Europe/Paris" --- ## 📋 Checklist finale AprĂšs rebuild et resync: - [ ] Docker rebuild terminĂ© sans erreur - [ ] Migration timezone appliquĂ©e (voir logs) - [ ] ÉvĂ©nements supprimĂ©s et resynchronisĂ©s - [ ] Colonnes en TIMESTAMPTZ (pas TIMESTAMP) - [ ] Google Calendar synchronisĂ© avec succĂšs - [ ] Heures affichĂ©es correspondent Ă  Google Calendar - [ ] ÉvĂ©nements "toute la journĂ©e" affichĂ©s correctement - [ ] Plus de dĂ©calage d'1h! --- ## 🎯 RĂ©sumĂ© technique ### Avant (cassĂ©): ```sql -- Colonnes: TIMESTAMP (sans timezone) start_time TIMESTAMP -- Stockage: "2025-11-14 10:00:00" (ambigu) -- Lecture: TraitĂ© comme UTC → affichĂ© 11h Paris ❌ ``` ### AprĂšs (corrigĂ©): ```sql -- Colonnes: TIMESTAMPTZ (avec timezone) start_time TIMESTAMPTZ -- Stockage: "2025-11-14 10:00:00+01:00" → converti en "09:00:00Z UTC" -- Lecture: "09:00:00Z UTC" → affichĂ© 10h Paris ✅ ``` ### Commits appliquĂ©s: - **70bc3e0**: Fix dĂ©calage horaire (TIMESTAMPTZ) - **6b4137f**: Migration avec suppression donnĂ©es - **e8de7eb**: Suppression branding login - **f3e1eb1**: Timezone Europe/Paris + diagnostic ← **ACTUEL** --- ## 💡 Explication finale **Pourquoi ça marchait pas?** - Les anciennes donnĂ©es Ă©taient en heure locale (Paris) - La migration disait "c'est de l'UTC" (`AT TIME ZONE 'UTC'`) - PostgreSQL stockait donc mal - Frontend affichait avec dĂ©calage **Pourquoi ça marche maintenant?** - Migration dit "c'est de l'heure Paris" (`AT TIME ZONE 'Europe/Paris'`) - Anciennes donnĂ©es supprimĂ©es - Nouvelles syncs avec Google utilisent TIMESTAMPTZ correctement - Les dates ont l'info timezone - Frontend affiche correctement --- **Date de crĂ©ation:** 2025-11-14 **Commit:** f3e1eb1 - Fix: Timezone Europe/Paris + diagnostic complet calendrier **Rebuild Docker pour appliquer les corrections!** 🚀