Set up database initialization process using SQL scripts and Drizzle ORM

Adds init.sql and init-db.sh for database initialization, and enhances Docker setup.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: dec54137-d5a2-4406-8ad4-5f2f9fb110bf
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/0715008c-7244-40f4-befc-26c014852236/438ba2d5-c119-4a74-9474-438eed8b3141.jpg
This commit is contained in:
michaelschal committed 2025-07-11 16:01:42 +00:00
1 parent 9cc28ddc93
commit 77d77ab658
5 files changed
+357 -4

No files matched your search

Executable
+151
View File
@@ -0,0 +1,151 @@
#!/bin/bash
# Script d'initialisation de la base de données RegisFlow
# Usage: ./init-db.sh [DATABASE_URL]
set -e
# Configuration par défaut
DEFAULT_DB_HOST="localhost"
DEFAULT_DB_PORT="5433"
DEFAULT_DB_NAME="regisflow"
DEFAULT_DB_USER="regisflow"
DEFAULT_DB_PASSWORD="RegisFlow2024!PostgreSQL"
# Couleurs pour les messages
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() {
echo -e "${BLUE}ℹ️ $1${NC}"
}
log_success() {
echo -e "${GREEN}✅ $1${NC}"
}
log_warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
log_error() {
echo -e "${RED}❌ $1${NC}"
}
# Fonction pour extraire les informations de DATABASE_URL
parse_database_url() {
local url="$1"
# Extraire les composants de l'URL PostgreSQL
if [[ $url =~ postgresql://([^:]+):([^@]+)@([^:]+):([^/]+)/(.+) ]]; then
DB_USER="${BASH_REMATCH[1]}"
DB_PASSWORD="${BASH_REMATCH[2]}"
DB_HOST="${BASH_REMATCH[3]}"
DB_PORT="${BASH_REMATCH[4]}"
DB_NAME="${BASH_REMATCH[5]}"
else
log_error "Format DATABASE_URL invalide. Utilisez: postgresql://user:password@host:port/database"
exit 1
fi
}
# Déterminer la configuration de la base de données
if [ -n "$1" ]; then
log_info "Utilisation de DATABASE_URL fournie: $1"
parse_database_url "$1"
elif [ -n "$DATABASE_URL" ]; then
log_info "Utilisation de DATABASE_URL depuis l'environnement"
parse_database_url "$DATABASE_URL"
else
log_info "Utilisation de la configuration par défaut"
DB_HOST="$DEFAULT_DB_HOST"
DB_PORT="$DEFAULT_DB_PORT"
DB_NAME="$DEFAULT_DB_NAME"
DB_USER="$DEFAULT_DB_USER"
DB_PASSWORD="$DEFAULT_DB_PASSWORD"
fi
log_info "Configuration de la base de données:"
log_info " Host: $DB_HOST"
log_info " Port: $DB_PORT"
log_info " Database: $DB_NAME"
log_info " User: $DB_USER"
# Vérifier que psql est installé
if ! command -v psql &> /dev/null; then
log_error "psql n'est pas installé. Installez PostgreSQL client."
exit 1
fi
# Vérifier la connexion à PostgreSQL
log_info "Test de connexion à PostgreSQL..."
export PGPASSWORD="$DB_PASSWORD"
if ! psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -c "\q" 2>/dev/null; then
log_error "Impossible de se connecter à PostgreSQL"
log_info "Vérifiez que PostgreSQL est démarré et accessible"
log_info "Commande de test: psql -h $DB_HOST -p $DB_PORT -U $DB_USER -d $DB_NAME"
exit 1
fi
log_success "Connexion PostgreSQL réussie"
# Exécuter le script d'initialisation
log_info "Exécution du script d'initialisation..."
if [ -f "init.sql" ]; then
if psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -f init.sql; then
log_success "Script d'initialisation exécuté avec succès"
else
log_error "Erreur lors de l'exécution du script d'initialisation"
exit 1
fi
else
log_error "Fichier init.sql non trouvé"
exit 1
fi
# Vérifier que les tables ont été créées
log_info "Vérification des tables créées..."
TABLES=$(psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -t -c "SELECT tablename FROM pg_tables WHERE schemaname='public';" | tr -d ' ' | grep -v '^$')
if echo "$TABLES" | grep -q "users\|stores\|sales\|sessions"; then
log_success "Tables principales créées:"
echo "$TABLES" | while read -r table; do
if [ -n "$table" ]; then
log_info " - $table"
fi
done
else
log_error "Les tables principales n'ont pas été créées correctement"
exit 1
fi
# Vérifier l'utilisateur admin
log_info "Vérification de l'utilisateur administrateur..."
ADMIN_COUNT=$(psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -t -c "SELECT COUNT(*) FROM users WHERE username='admin';" | tr -d ' ')
if [ "$ADMIN_COUNT" = "1" ]; then
log_success "Utilisateur admin créé avec succès"
else
log_warning "Problème avec la création de l'utilisateur admin"
fi
# Afficher le résumé
echo ""
log_success "🎉 Initialisation de la base de données terminée!"
echo "======================================================"
log_info "Base de données: $DB_NAME sur $DB_HOST:$DB_PORT"
log_info "Utilisateur administrateur:"
log_info " - Username: admin"
log_info " - Password: admin123"
log_warning "IMPORTANT: Changez le mot de passe admin après la première connexion!"
echo ""
# Nettoyer les variables d'environnement
unset PGPASSWORD
log_success "Prêt pour le déploiement!"