- Create migration 005 to add parent_id and level columns to todos tables
- Fix migration 003 to use correct table name (note_todos instead of todos)
- Update POST /api/notes/:id/todos to accept parent_id parameter
- Update POST /api/todos to accept parent_id for global todos
- Add automatic level calculation based on parent depth
- Update GET endpoints to return parent_id and level fields
- Add validation to ensure parent todo exists before creating subtask
- Support CASCADE DELETE for subtasks when parent is deleted
Prepared SQL migrations for adding due_date support to todos.
Migrations:
- 003_add_due_date_to_todos.sql - Adds due_date column to todos table
- 004_add_due_date_to_global_todos.sql - Adds due_date column to global_todos table
Features:
- TIMESTAMPTZ column for timezone-aware dates
- Indexes on due_date for query performance
- Composite indexes on (completed, due_date) for filtering
Note: Backend and frontend implementation pending.
These migrations are ready to be applied when the feature is completed.
Correction du décalage de timezone de 1h dans Google Calendar
PROBLÈME:
- Les événements s'affichaient avec 1h de décalage
- Événement à 10h → affiché à 11h (ou 09h selon cas)
CAUSE:
- TIMESTAMP (sans timezone) dans PostgreSQL
- Google envoie dates avec timezone info
- PostgreSQL stockait sans timezone
- JavaScript réinterprétait avec timezone local
- = Double application du décalage
SOLUTION:
1. calendar_events: TIMESTAMP → TIMESTAMPTZ
- start_time: TIMESTAMPTZ (conserve timezone)
- end_time: TIMESTAMPTZ (conserve timezone)
2. Migration automatique:
- scripts/migrate-calendar-timezone.js
- Exécuté automatiquement au démarrage Docker
- Convertit les données existantes
- USING start_time AT TIME ZONE 'UTC'
3. Correction booléens all_day:
- Ligne 433: isAllDay ? 1 : 0 → isAllDay
- Ligne 451: isAllDay ? 1 : 0 → isAllDay
FICHIERS MODIFIÉS:
- config/database.js: TIMESTAMPTZ pour calendar_events
- routes/calendar.routes.js: Booléens corrigés
- docker-entrypoint.sh: Migration auto timezone
- migrations/002_calendar_timestamptz.sql: SQL manuel
- scripts/migrate-calendar-timezone.js: Script migration
DÉPLOIEMENT:
Au prochain rebuild Docker:
1. La table sera recréée avec TIMESTAMPTZ
2. Les événements existants seront migrés
3. Les nouvelles synchros utiliseront le bon format
4. Plus de décalage horaire!
Resynchronisez Google Calendar après déploiement
pour appliquer le nouveau format.
Ajout de deux nouvelles fonctionnalités pour les notes:
1. Affichage des tags dans les cartes repliées:
- Les tags sont maintenant visibles dans les cartes de notes sans avoir à les ouvrir
- Badge avec icône TagIcon et nom du tag
- Chargement automatique des tags depuis la base de données
2. Icône de priorité cliquable:
- Bouton "!" en haut à droite de chaque carte de note
- Rouge (!) quand la note est prioritaire (toujours visible)
- Gris clair (!) quand non prioritaire (visible au hover)
- Toggle au clic pour marquer/démarquer comme prioritaire
- Les notes prioritaires sont triées en premier
Backend:
- Route PATCH /api/notes/:id/priority pour toggle la priorité
- Modification GET /api/notes pour charger tags et priority
- Tri par priority DESC, updated_at DESC
- Migration automatique pour ajouter colonne priority
- Index pour performance des requêtes de tri
Frontend:
- Interface Note étendue avec tags et priority
- Méthode togglePriority dans NotesService
- Affichage conditionnel de l'icône (toujours visible si prioritaire)
- Empêche le clic sur l'icône d'ouvrir la note (stopPropagation)
Migration:
- Ajout automatique de la colonne priority (INTEGER DEFAULT 0)
- Création d'index idx_notes_priority pour performance
- Fichier de migration 002_add_priority.sql créé pour référence
- Création du dossier migrations/
- Migration 001: Ajout de la colonne image_filename manquante
- Script run-migrations.sh pour appliquer les migrations
- Documentation dans migrations/README.md
- Correction de l'erreur 'no such column: n.image_filename'