#!/usr/bin/env bash # ============================================================================= # Datacat — Script d'installation locale (sans Docker) # Usage : bash scripts/setup-local.sh # ============================================================================= set -e RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' ok() { echo -e "${GREEN}✔${NC} $1"; } warn() { echo -e "${YELLOW}⚠${NC} $1"; } err() { echo -e "${RED}✖${NC} $1"; exit 1; } info() { echo -e "${BLUE}→${NC} $1"; } echo "" echo "======================================" echo " Datacat — Setup local (sans Docker)" echo "======================================" echo "" # ----------------------------------------------------------------------------- # 1. Vérification des prérequis # ----------------------------------------------------------------------------- info "Vérification des prérequis..." # Node.js if ! command -v node &>/dev/null; then err "Node.js non trouvé. Installer Node.js 22 LTS : https://nodejs.org" fi NODE_VERSION=$(node -v) ok "Node.js $NODE_VERSION" # pnpm if ! command -v pnpm &>/dev/null; then warn "pnpm non trouvé. Installation..." npm install -g pnpm@10.33.0 fi PNPM_VERSION=$(pnpm -v) ok "pnpm $PNPM_VERSION" # PostgreSQL if ! command -v psql &>/dev/null; then err "PostgreSQL non trouvé. Installer PostgreSQL 17 : https://www.postgresql.org/download/" fi PG_VERSION=$(psql --version) ok "$PG_VERSION" # git (requis par asyncapi CLI) if ! command -v git &>/dev/null; then err "git non trouvé. Installer git : https://git-scm.com" fi ok "git $(git --version | awk '{print $3}')" echo "" # ----------------------------------------------------------------------------- # 2. Base de données PostgreSQL # ----------------------------------------------------------------------------- info "Configuration de la base de données..." DB_NAME="datacat" DB_USER="datacat" DB_PASS="datacat" # Détecter l'utilisateur postgres PG_CMD="" if sudo -u postgres psql -c '\q' &>/dev/null 2>&1; then PG_CMD="sudo -u postgres psql" elif psql -U postgres -c '\q' &>/dev/null 2>&1; then PG_CMD="psql -U postgres" else warn "Impossible de se connecter à PostgreSQL automatiquement." warn "Exécutez manuellement les commandes suivantes :" echo "" echo " CREATE DATABASE $DB_NAME;" echo " CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';" echo " GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;" echo " ALTER DATABASE $DB_NAME OWNER TO $DB_USER;" echo "" read -p "Appuyez sur Entrée une fois la base créée..." fi if [ -n "$PG_CMD" ]; then # Créer l'utilisateur s'il n'existe pas if $PG_CMD -tc "SELECT 1 FROM pg_roles WHERE rolname='$DB_USER'" | grep -q 1; then ok "Utilisateur '$DB_USER' déjà existant" else $PG_CMD -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASS';" &>/dev/null ok "Utilisateur '$DB_USER' créé" fi # Créer la base si elle n'existe pas if $PG_CMD -tc "SELECT 1 FROM pg_database WHERE datname='$DB_NAME'" | grep -q 1; then ok "Base de données '$DB_NAME' déjà existante" else $PG_CMD -c "CREATE DATABASE $DB_NAME;" &>/dev/null $PG_CMD -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;" &>/dev/null $PG_CMD -c "ALTER DATABASE $DB_NAME OWNER TO $DB_USER;" &>/dev/null ok "Base de données '$DB_NAME' créée" fi fi echo "" # ----------------------------------------------------------------------------- # 3. CLIs de génération de documentation # ----------------------------------------------------------------------------- info "Installation des CLIs de génération..." if command -v asyncapi &>/dev/null; then ok "asyncapi CLI déjà installé ($(asyncapi --version 2>/dev/null || echo 'version inconnue'))" else info "Installation de @asyncapi/cli@6.0.0..." npm install -g @asyncapi/cli@6.0.0 ok "asyncapi CLI installé" fi if command -v redocly &>/dev/null; then ok "redocly CLI déjà installé" else info "Installation de @redocly/cli..." npm install -g @redocly/cli ok "redocly CLI installé" fi echo "" # ----------------------------------------------------------------------------- # 4. Installation des dépendances Node.js # ----------------------------------------------------------------------------- SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" ROOT_DIR="$(dirname "$SCRIPT_DIR")" info "Installation des dépendances (shared)..." cd "$ROOT_DIR/shared" && pnpm install --silent ok "shared" info "Installation des dépendances (back)..." cd "$ROOT_DIR/back" && pnpm install --silent ok "back" info "Installation des dépendances (front-public)..." cd "$ROOT_DIR/front-public" && pnpm install --silent ok "front-public" echo "" # ----------------------------------------------------------------------------- # 5. Résumé # ----------------------------------------------------------------------------- echo "======================================" echo -e "${GREEN} Installation terminée !${NC}" echo "======================================" echo "" echo "Pour démarrer l'application :" echo "" echo " Terminal 1 — Backend :" echo " cd back && pnpm run start:dev" echo " → API sur http://localhost:3000" echo "" echo " Terminal 2 — Frontend :" echo " cd front-public && pnpm run start" echo " → App sur http://localhost:4200" echo ""