Checkpoint: Corrections multiples :

- Renommage questionnaire.nom → questionnaire.titre dans QuestionnaireReponse.tsx, AdminQuestionnaireEdit.tsx, questionnaireScheduler.ts, questionnaireExport.ts
- Correction des requêtes SQL dans questionnaireDb.ts (suppression de la condition complete inexistante)
- Ajout des colonnes valeurMin et valeurMax dans la table questions
- Renommage de la colonne nom en titre dans la table questionnaires
This commit is contained in:
Manus
2026-01-14 03:08:54 -05:00
parent 8ecb856191
commit b53801c463
94 changed files with 29353 additions and 2042 deletions

281
fix-all-database-schema-FINAL.sh Executable file
View File

@@ -0,0 +1,281 @@
#!/bin/bash
# Script de correction COMPLÈTE et DÉFINITIVE du schéma de base de données
# Formation Manager Itinova - Janvier 2026
# Ce script corrige TOUTES les colonnes manquantes identifiées
DB_USER="app_user"
DB_PASS="Itinova69!"
DB_NAME="formation_manager"
echo "=========================================="
echo "CORRECTION DÉFINITIVE DU SCHÉMA"
echo "Formation Manager Itinova"
echo "=========================================="
echo ""
echo "⚠️ Ce script va MODIFIER la base de données"
echo "Appuyez sur Entrée pour continuer ou Ctrl+C pour annuler..."
read
echo ""
echo "=== DÉBUT DES CORRECTIONS ==="
echo ""
# Fonction pour exécuter une requête SQL avec gestion d'erreur
execute_sql() {
local description="$1"
local query="$2"
echo "$description"
result=$(mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -e "$query" 2>&1 | grep -v "Warning: Using a password")
if [ -z "$result" ]; then
echo " ✓ OK"
return 0
else
if echo "$result" | grep -q "Duplicate column name"; then
echo " ⚠ Colonne existe déjà"
return 0
elif echo "$result" | grep -q "Can't DROP"; then
echo " ⚠ Colonne n'existe pas"
return 0
else
echo " ✗ Erreur: $result"
return 1
fi
fi
}
echo "=========================================="
echo "1. CORRECTION DE LA TABLE formateurs"
echo "=========================================="
# CRITIQUE: La colonne email manque dans formateurs
execute_sql "Ajout de la colonne email" \
"ALTER TABLE formateurs ADD COLUMN email VARCHAR(320) AFTER nom;"
echo ""
echo "=========================================="
echo "2. CORRECTION DE LA TABLE rappels"
echo "=========================================="
# CRITIQUE: La colonne timing manque dans rappels
execute_sql "Ajout de la colonne timing" \
"ALTER TABLE rappels ADD COLUMN timing ENUM('pre_formation', 'post_formation') NOT NULL DEFAULT 'pre_formation' AFTER heureEnvoi;"
execute_sql "Ajout de la colonne nomFichier" \
"ALTER TABLE rappels ADD COLUMN nomFichier VARCHAR(255) AFTER timing;"
execute_sql "Ajout de la colonne urlFichier" \
"ALTER TABLE rappels ADD COLUMN urlFichier VARCHAR(500) AFTER nomFichier;"
execute_sql "Ajout de la colonne s3Key" \
"ALTER TABLE rappels ADD COLUMN s3Key VARCHAR(500) AFTER urlFichier;"
execute_sql "Ajout de la colonne typeFichier" \
"ALTER TABLE rappels ADD COLUMN typeFichier VARCHAR(100) AFTER s3Key;"
execute_sql "Ajout de la colonne tailleFichier" \
"ALTER TABLE rappels ADD COLUMN tailleFichier INT AFTER typeFichier;"
execute_sql "Ajout de la colonne derniereExecution" \
"ALTER TABLE rappels ADD COLUMN derniereExecution DATETIME AFTER actif;"
execute_sql "Modification de l'ENUM templateType" \
"ALTER TABLE rappels MODIFY COLUMN templateType ENUM('rappel', 'rappelJ1', 'rappel3', 'rappel4', 'rappel5', 'rappel6') NOT NULL;"
echo ""
echo "=========================================="
echo "3. CORRECTION DE LA TABLE sequences"
echo "=========================================="
execute_sql "Modification de l'ENUM statut" \
"ALTER TABLE sequences MODIFY COLUMN statut ENUM('ouverte','bloquee','terminee','fermee','annulee') NOT NULL DEFAULT 'ouverte';"
execute_sql "Modification de l'ENUM publicCible" \
"ALTER TABLE sequences MODIFY COLUMN publicCible ENUM('directeur','chef_service','autre','tous') NOT NULL DEFAULT 'tous';"
execute_sql "Modification de la taille de lieu" \
"ALTER TABLE sequences MODIFY COLUMN lieu VARCHAR(255) NOT NULL;"
execute_sql "Modification de la taille de qrCodeToken" \
"ALTER TABLE sequences MODIFY COLUMN qrCodeToken VARCHAR(100) UNIQUE;"
echo ""
echo "=========================================="
echo "4. CORRECTION DE LA TABLE formations"
echo "=========================================="
execute_sql "Ajout de la colonne modeAttestation" \
"ALTER TABLE formations ADD COLUMN modeAttestation ENUM('auto', 'manuel') NOT NULL DEFAULT 'auto' AFTER actif;"
execute_sql "Ajout de la colonne modeEnvoi" \
"ALTER TABLE formations ADD COLUMN modeEnvoi ENUM('auto', 'manuel') NOT NULL DEFAULT 'manuel' AFTER modeAttestation;"
echo ""
echo "=========================================="
echo "5. CORRECTION DE LA TABLE users"
echo "=========================================="
execute_sql "Ajout de la colonne username" \
"ALTER TABLE users ADD COLUMN username VARCHAR(100) UNIQUE AFTER email;"
execute_sql "Ajout de la colonne password" \
"ALTER TABLE users ADD COLUMN password VARCHAR(255) AFTER username;"
execute_sql "Ajout de la colonne isActive" \
"ALTER TABLE users ADD COLUMN isActive BOOLEAN NOT NULL DEFAULT TRUE AFTER role;"
execute_sql "Ajout de la colonne formateurId" \
"ALTER TABLE users ADD COLUMN formateurId INT AFTER isActive;"
execute_sql "Modification de l'ENUM role" \
"ALTER TABLE users MODIFY COLUMN role ENUM('user', 'admin', 'formateur') NOT NULL DEFAULT 'user';"
echo ""
echo "=========================================="
echo "6. CORRECTION DE LA TABLE apprenants"
echo "=========================================="
execute_sql "Modification de codeEtablissement" \
"ALTER TABLE apprenants MODIFY COLUMN codeEtablissement VARCHAR(50) NULL;"
execute_sql "Modification de fonction" \
"ALTER TABLE apprenants MODIFY COLUMN fonction VARCHAR(100) NULL;"
echo ""
echo "=========================================="
echo "7. CORRECTION DE LA TABLE emailConfig"
echo "=========================================="
execute_sql "Modification de l'ENUM provider" \
"ALTER TABLE emailConfig MODIFY COLUMN provider ENUM('resend', 'smtp', 'simulation') NOT NULL DEFAULT 'simulation';"
echo ""
echo "=========================================="
echo "8. CORRECTION DE LA TABLE emailTemplates"
echo "=========================================="
execute_sql "Modification de l'ENUM type" \
"ALTER TABLE emailTemplates MODIFY COLUMN type ENUM('inscription', 'teaser', 'rappel', 'rappelJ1', 'rappel3', 'rappel4', 'rappel5', 'rappel6') NOT NULL UNIQUE;"
echo ""
echo "=========================================="
echo "9. CORRECTION DE LA TABLE logsRappels"
echo "=========================================="
execute_sql "Ajout de la colonne email" \
"ALTER TABLE logsRappels ADD COLUMN email VARCHAR(320) NOT NULL AFTER apprenantId;"
execute_sql "Modification de l'ENUM type" \
"ALTER TABLE logsRappels MODIFY COLUMN type ENUM('rappel', 'rappelJ1', 'rappel3', 'rappel4', 'rappel5', 'rappel6') NOT NULL;"
echo ""
echo "=========================================="
echo "10. CORRECTION DE LA TABLE questionnaires"
echo "=========================================="
# Vérifier si la colonne nom existe et la renommer en titre
result=$(mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -se "SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='$DB_NAME' AND TABLE_NAME='questionnaires' AND COLUMN_NAME='nom';" 2>/dev/null)
if [ "$result" = "1" ]; then
execute_sql "Renommage de nom en titre" \
"ALTER TABLE questionnaires CHANGE COLUMN nom titre VARCHAR(255) NOT NULL;"
else
echo "→ La colonne titre existe déjà"
fi
echo ""
echo "=========================================="
echo "11. CORRECTION DE LA TABLE reponsesQuestionnaires"
echo "=========================================="
# Vérifier si la colonne complete existe et la supprimer
result=$(mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -se "SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='$DB_NAME' AND TABLE_NAME='reponsesQuestionnaires' AND COLUMN_NAME='complete';" 2>/dev/null)
if [ "$result" = "1" ]; then
execute_sql "Suppression de la colonne complete" \
"ALTER TABLE reponsesQuestionnaires DROP COLUMN complete;"
else
echo "→ La colonne complete n'existe pas (OK)"
fi
echo ""
echo "=========================================="
echo "12. CORRECTION DE LA TABLE attestations"
echo "=========================================="
execute_sql "Ajout de la colonne documentUrl" \
"ALTER TABLE attestations ADD COLUMN documentUrl VARCHAR(500) AFTER s3Key;"
execute_sql "Ajout de la colonne documentS3Key" \
"ALTER TABLE attestations ADD COLUMN documentS3Key VARCHAR(500) AFTER documentUrl;"
execute_sql "Ajout de la colonne uploadedBy" \
"ALTER TABLE attestations ADD COLUMN uploadedBy INT AFTER documentS3Key;"
execute_sql "Ajout de la colonne uploadedAt" \
"ALTER TABLE attestations ADD COLUMN uploadedAt TIMESTAMP AFTER uploadedBy;"
execute_sql "Ajout de la colonne emailEnvoye" \
"ALTER TABLE attestations ADD COLUMN emailEnvoye BOOLEAN NOT NULL DEFAULT FALSE AFTER uploadedAt;"
execute_sql "Ajout de la colonne dateEnvoiEmail" \
"ALTER TABLE attestations ADD COLUMN dateEnvoiEmail TIMESTAMP AFTER emailEnvoye;"
echo ""
echo "=========================================="
echo "13. CORRECTION DE LA TABLE parametres"
echo "=========================================="
# Supprimer envoiAutomatiqueAttestations si elle existe
result=$(mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -se "SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='$DB_NAME' AND TABLE_NAME='parametres' AND COLUMN_NAME='envoiAutomatiqueAttestations';" 2>/dev/null)
if [ "$result" = "1" ]; then
execute_sql "Suppression de la colonne envoiAutomatiqueAttestations" \
"ALTER TABLE parametres DROP COLUMN envoiAutomatiqueAttestations;"
else
echo "→ La colonne envoiAutomatiqueAttestations n'existe pas (OK)"
fi
execute_sql "Ajout de la colonne urlPublique" \
"ALTER TABLE parametres ADD COLUMN urlPublique VARCHAR(500) NOT NULL DEFAULT 'https://formations.itinova.org' AFTER id;"
execute_sql "Ajout de la colonne delaiExpirationQR" \
"ALTER TABLE parametres ADD COLUMN delaiExpirationQR INT NOT NULL DEFAULT 30 AFTER urlPublique;"
execute_sql "Ajout de la colonne dureeValiditeToken" \
"ALTER TABLE parametres ADD COLUMN dureeValiditeToken INT NOT NULL DEFAULT 24 AFTER delaiExpirationQR;"
execute_sql "Ajout de la colonne notificationsActives" \
"ALTER TABLE parametres ADD COLUMN notificationsActives BOOLEAN NOT NULL DEFAULT TRUE AFTER dureeValiditeToken;"
echo ""
echo "=========================================="
echo "14. CORRECTION DES AUTRES TABLES"
echo "=========================================="
execute_sql "Ajout de userId dans passwordResetTokens" \
"ALTER TABLE passwordResetTokens ADD COLUMN userId INT NOT NULL AFTER id;"
execute_sql "Ajout de ordre dans datesFormation" \
"ALTER TABLE datesFormation ADD COLUMN ordre INT NOT NULL AFTER sequenceId;"
execute_sql "Ajout de validateurId dans presences" \
"ALTER TABLE presences ADD COLUMN validateurId INT AFTER modeValidation;"
echo ""
echo "=========================================="
echo "✅ TOUTES LES CORRECTIONS APPLIQUÉES"
echo "=========================================="
echo ""
# Compter les tables
total_tables=$(mysql -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -se "SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$DB_NAME';" 2>/dev/null)
echo "✓ Nombre total de tables: $total_tables"
echo ""
echo "=== PROCHAINES ÉTAPES ==="
echo "1. Redémarrer l'application: pm2 restart formation-manager"
echo "2. Vérifier les logs: pm2 logs formation-manager --lines 30"
echo "3. Tester l'application dans le navigateur"
echo ""
echo "=========================================="