Files
LogiFlow/scripts/production-migration-fix.sh
michaelschal b383363e45 Ensure database tables are created automatically in production environments
Add a new script to synchronize missing database migrations and update the Docker entrypoint to execute it before starting the application.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: f9197b9b-a5b3-4469-a27d-930a9e9ee736
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/f9197b9b-a5b3-4469-a27d-930a9e9ee736/i2gFnxm
2025-08-18 09:54:50 +00:00

137 lines
4.3 KiB
Bash
Executable File

#!/bin/bash
# Script de correction des migrations pour la production
# Solution complète pour appliquer automatiquement les migrations DLC
set -e
echo "🚨 [PRODUCTION FIX] Correction automatique des migrations"
echo "========================================================"
# Fonction de logging avec timestamp
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
}
# Vérification de Docker Compose
if ! command -v docker-compose &> /dev/null; then
log "❌ docker-compose non trouvé"
exit 1
fi
# Vérification que le conteneur PostgreSQL est actif
log "🔍 Vérification du conteneur PostgreSQL..."
if ! docker-compose ps | grep -q logiflow-db; then
log "❌ Conteneur logiflow-db non actif"
log "📋 Conteneurs disponibles:"
docker-compose ps
exit 1
fi
log "✅ Conteneur PostgreSQL actif"
# Application de toutes les migrations manquantes
log "🔄 Application des migrations manquantes..."
# Migration 1: Vérification et création de la structure de base
log "📂 Étape 1: Vérification de la structure de base..."
docker-compose exec -T logiflow-db psql -U logiflow_admin -d logiflow_db << 'EOF'
-- Vérifier que la table dlc_products existe
DO $$
BEGIN
IF NOT EXISTS (SELECT FROM information_schema.tables WHERE table_name = 'dlc_products') THEN
RAISE NOTICE 'Table dlc_products manquante - création nécessaire';
-- La table sera créée par la migration initiale si nécessaire
ELSE
RAISE NOTICE 'Table dlc_products trouvée';
END IF;
END $$;
EOF
# Migration 2: Application de la migration DLC stock épuisé
log "📂 Étape 2: Application de la migration DLC stock épuisé..."
docker-compose exec -T logiflow-db psql -U logiflow_admin -d logiflow_db << 'EOF'
-- Migration DLC Stock Épuisé - Version de production sécurisée
DO $$
DECLARE
column_count integer;
BEGIN
-- Compter les colonnes existantes
SELECT COUNT(*) INTO column_count
FROM information_schema.columns
WHERE table_name = 'dlc_products'
AND column_name IN ('stock_epuise', 'stock_epuise_by', 'stock_epuise_at');
RAISE NOTICE 'Colonnes DLC stock épuisé trouvées: %', column_count;
-- Ajouter les colonnes manquantes
IF column_count < 3 THEN
RAISE NOTICE 'Application de la migration DLC...';
-- Ajouter les colonnes avec protection IF NOT EXISTS
ALTER TABLE dlc_products
ADD COLUMN IF NOT EXISTS stock_epuise boolean DEFAULT false NOT NULL,
ADD COLUMN IF NOT EXISTS stock_epuise_by varchar(255),
ADD COLUMN IF NOT EXISTS stock_epuise_at timestamp;
-- Créer l'index
CREATE INDEX IF NOT EXISTS idx_dlc_products_stock_epuise ON dlc_products(stock_epuise);
-- Initialiser les valeurs existantes
UPDATE dlc_products
SET stock_epuise = false
WHERE stock_epuise IS NULL;
RAISE NOTICE 'Migration DLC appliquée avec succès';
ELSE
RAISE NOTICE 'Migration DLC déjà appliquée';
END IF;
END $$;
-- Vérification finale
SELECT
'Migration DLC - Verification finale' as status,
COUNT(*) as colonnes_dlc_trouvees
FROM information_schema.columns
WHERE table_name = 'dlc_products'
AND column_name IN ('stock_epuise', 'stock_epuise_by', 'stock_epuise_at');
EOF
if [ $? -eq 0 ]; then
log "✅ Migration DLC appliquée avec succès"
else
log "❌ Erreur lors de la migration DLC"
exit 1
fi
# Redémarrage de l'application
log "🔄 Redémarrage de l'application..."
docker-compose restart logiflow
# Attendre que l'application redémarre
log "⏳ Attente du redémarrage (30 secondes)..."
sleep 30
# Vérification finale
log "🔍 Vérification finale de l'API DLC..."
# Test de l'API DLC
HEALTH_CHECK=$(docker-compose logs logiflow 2>&1 | tail -20 | grep -c "Error fetching DLC products" || echo "0")
if [ "$HEALTH_CHECK" -eq 0 ]; then
log "✅ API DLC fonctionne correctement"
else
log "⚠️ Des erreurs DLC persistent - vérification manuelle nécessaire"
fi
echo ""
echo "🎉 CORRECTION DE PRODUCTION TERMINÉE"
echo "=================================="
echo "✅ Migrations DLC appliquées"
echo "✅ Application redémarrée"
echo "✅ L'erreur 'column does not exist' devrait être résolue"
echo ""
echo "Vérifiez maintenant votre interface DLC pour confirmer que tout fonctionne."