#!/bin/bash # =========================================== # LeDiscord - Script de migration de base de données # =========================================== set -e echo "🗄️ Script de migration de base de données LeDiscord" # Vérifier que Docker est en cours d'exécution if ! docker info > /dev/null 2>&1; then echo "❌ Docker n'est pas en cours d'exécution" exit 1 fi # Vérifier que le conteneur backend est en cours d'exécution if ! docker ps | grep -q "lediscord_backend"; then echo "❌ Le conteneur backend n'est pas en cours d'exécution" echo " Lancez d'abord 'make start' ou 'docker-compose up -d'" exit 1 fi echo "✅ Conteneur backend en cours d'exécution" # Menu des options echo "" echo "Choisissez une option :" echo "1) Créer une migration" echo "2) Appliquer les migrations" echo "3) Annuler la dernière migration" echo "4) Voir l'état des migrations" echo "5) Réinitialiser la base de données (⚠️ DANGEREUX)" echo "6) Sauvegarder la base de données" echo "7) Restaurer la base de données" echo "0) Quitter" echo "" read -p "Votre choix (0-7) : " choice case $choice in 1) echo "📝 Création d'une migration..." read -p "Nom de la migration : " migration_name docker exec lediscord_backend alembic revision --autogenerate -m "$migration_name" echo "✅ Migration créée" ;; 2) echo "🔄 Application des migrations..." docker exec lediscord_backend alembic upgrade head echo "✅ Migrations appliquées" ;; 3) echo "↩️ Annulation de la dernière migration..." docker exec lediscord_backend alembic downgrade -1 echo "✅ Dernière migration annulée" ;; 4) echo "📊 État des migrations..." docker exec lediscord_backend alembic current echo "" echo "Historique des migrations :" docker exec lediscord_backend alembic history ;; 5) echo "⚠️ ATTENTION : Cette action va supprimer toutes les données !" read -p "Êtes-vous sûr ? Tapez 'OUI' pour confirmer : " confirm if [ "$confirm" = "OUI" ]; then echo "🗑️ Suppression de la base de données..." docker exec lediscord_backend alembic downgrade base docker exec lediscord_backend alembic upgrade head echo "✅ Base de données réinitialisée" else echo "❌ Opération annulée" fi ;; 6) echo "💾 Sauvegarde de la base de données..." timestamp=$(date +%Y%m%d_%H%M%S) docker exec lediscord_postgres pg_dump -U lediscord_user lediscord > "backup_${timestamp}.sql" echo "✅ Sauvegarde créée : backup_${timestamp}.sql" ;; 7) echo "📥 Restauration de la base de données..." read -p "Nom du fichier de sauvegarde : " backup_file if [ -f "$backup_file" ]; then docker exec -i lediscord_postgres psql -U lediscord_user lediscord < "$backup_file" echo "✅ Base de données restaurée" else echo "❌ Fichier de sauvegarde non trouvé : $backup_file" fi ;; 0) echo "👋 Au revoir !" exit 0 ;; *) echo "❌ Choix invalide" exit 1 ;; esac