diff --git a/FIX-CALENDAR-TIMEZONE.md b/FIX-CALENDAR-TIMEZONE.md new file mode 100644 index 0000000..7d4b3ee --- /dev/null +++ b/FIX-CALENDAR-TIMEZONE.md @@ -0,0 +1,250 @@ +# 🔧 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!** 🚀