From 2011c4f6a48e3cc6f2d0a5e8815f369ccc07a493 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 11 Nov 2025 11:31:56 +0000 Subject: [PATCH 1/3] =?UTF-8?q?Ajout=20de=20migrations=20SQL=20pour=20corr?= =?UTF-8?q?iger=20le=20sch=C3=A9ma=20de=20base=20de=20donn=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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' --- migrations/001_add_image_filename.sql | 11 ++++++++ migrations/README.md | 36 +++++++++++++++++++++++++++ migrations/run-migrations.sh | 12 +++++++++ 3 files changed, 59 insertions(+) create mode 100644 migrations/001_add_image_filename.sql create mode 100644 migrations/README.md create mode 100755 migrations/run-migrations.sh diff --git a/migrations/001_add_image_filename.sql b/migrations/001_add_image_filename.sql new file mode 100644 index 0000000..0584f52 --- /dev/null +++ b/migrations/001_add_image_filename.sql @@ -0,0 +1,11 @@ +-- Migration pour ajouter la colonne image_filename à la table notes +-- À exécuter si vous obtenez l'erreur: "no such column: n.image_filename" + +-- Vérifier la structure actuelle +-- SELECT sql FROM sqlite_master WHERE name='notes'; + +-- Ajouter la colonne image_filename si elle n'existe pas +ALTER TABLE notes ADD COLUMN image_filename TEXT; + +-- Vérifier que la colonne a été ajoutée +-- SELECT * FROM notes LIMIT 1; diff --git a/migrations/README.md b/migrations/README.md new file mode 100644 index 0000000..2454bcf --- /dev/null +++ b/migrations/README.md @@ -0,0 +1,36 @@ +# Migrations de base de données + +Ce dossier contient les scripts de migration SQL pour mettre à jour le schéma de la base de données. + +## Utilisation + +### Méthode 1 : Exécuter dans le container Docker + +```bash +# Copier le script dans le container +docker cp migrations/run-migrations.sh notes-todo-app:/app/ + +# Exécuter la migration +docker exec notes-todo-app sh /app/run-migrations.sh +``` + +### Méthode 2 : Manuellement avec sqlite3 + +```bash +# Se connecter au container +docker exec -it notes-todo-app sh + +# Exécuter la migration SQL +sqlite3 /app/data/notes.db < /path/to/migration.sql +``` + +### Méthode 3 : Recréer la base de données (⚠️ perte de données) + +```bash +docker-compose down -v +docker-compose up -d --build +``` + +## Liste des migrations + +- **001_add_image_filename.sql** : Ajoute la colonne `image_filename` à la table `notes` diff --git a/migrations/run-migrations.sh b/migrations/run-migrations.sh new file mode 100755 index 0000000..a260db8 --- /dev/null +++ b/migrations/run-migrations.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# Script pour exécuter les migrations SQL sur la base de données + +DB_PATH="/app/data/notes.db" + +echo "=== Exécution des migrations SQLite ===" + +# Migration 001: Ajouter image_filename +echo "Migration 001: Ajout de la colonne image_filename..." +sqlite3 $DB_PATH "ALTER TABLE notes ADD COLUMN image_filename TEXT;" 2>/dev/null && echo "✓ Migration 001 appliquée" || echo "⚠ Migration 001 déjà appliquée ou erreur" + +echo "=== Migrations terminées ===" From c5d1cfd9fd47da7875de25001196c0f18549077b Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 11 Nov 2025 11:34:32 +0000 Subject: [PATCH 2/3] Fix: Auto-migration pour ajouter la colonne image_filename manquante MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ajout d'une vérification automatique au démarrage - Utilise PRAGMA table_info pour vérifier les colonnes existantes - Ajoute image_filename si elle n'existe pas - Résout l'erreur SQLITE_ERROR: no such column: n.image_filename --- config/database.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/config/database.js b/config/database.js index 261794b..50274a2 100644 --- a/config/database.js +++ b/config/database.js @@ -81,6 +81,27 @@ function initDatabase() { logger.info('✓ Tables de base de données créées avec succès'); + // Migration: Ajouter image_filename si elle n'existe pas + db.all("PRAGMA table_info(notes)", (err, columns) => { + if (err) { + logger.error('Erreur lors de la vérification de la structure de la table notes:', err); + return; + } + + const hasImageFilename = columns.some(col => col.name === 'image_filename'); + + if (!hasImageFilename) { + logger.info('Migration: Ajout de la colonne image_filename...'); + db.run('ALTER TABLE notes ADD COLUMN image_filename TEXT', (err) => { + if (err) { + logger.error('Erreur lors de l\'ajout de la colonne image_filename:', err); + } else { + logger.info('✓ Colonne image_filename ajoutée avec succès'); + } + }); + } + }); + // Créer l'utilisateur admin par défaut si la table est vide db.get('SELECT COUNT(*) as count FROM users', async (err, row) => { if (err) { From e156af7fa0f85b02adac268ed816f1dc8ac4c439 Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 11 Nov 2025 11:35:04 +0000 Subject: [PATCH 3/3] =?UTF-8?q?Docs:=20Ajout=20section=20d=C3=A9pannage=20?= =?UTF-8?q?dans=20le=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Documentation pour l'erreur image_filename - Instructions de résolution automatique et manuelle - Ajout troubleshooting pour erreurs courantes --- README.md | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/README.md b/README.md index 8579d22..4dd4f02 100644 --- a/README.md +++ b/README.md @@ -191,6 +191,41 @@ DELETE /api/todos/:id - File type whitelist - SQL prepared statements +## 🔧 Dépannage + +### Erreur "no such column: n.image_filename" + +Cette erreur survient lorsque la base de données a été créée avec une ancienne version du schéma. + +**Solution automatique (recommandée)** : +L'application détecte et ajoute automatiquement la colonne manquante au démarrage. Redéployez simplement : +```bash +docker-compose down +docker-compose up -d --build +``` + +**Solution manuelle** : +Si nécessaire, vous pouvez appliquer la migration manuellement : +```bash +docker exec notes-todo-app sh /app/migrations/run-migrations.sh +``` + +### Erreur de permissions sur les volumes Docker + +Si vous rencontrez des erreurs SQLITE_CANTOPEN ou EACCES, recréez les volumes : +```bash +docker-compose down -v +docker-compose up -d --build +``` +⚠️ Attention : Cela supprimera toutes les données existantes. + +### L'application ne démarre pas + +Vérifiez les logs : +```bash +docker-compose logs -f notes-todo-app +``` + ## 📝 Licence MIT