setup.sh 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #!/bin/bash
  2. set -e
  3. ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
  4. APP_PROPS="$ROOT_DIR/src/main/resources/application-postgres.properties"
  5. if [ -f "$ROOT_DIR/.env" ]; then
  6. export $(grep -v '^#' "$ROOT_DIR/.env" | xargs)
  7. fi
  8. get_prop() {
  9. grep "^$1=" "$APP_PROPS" | cut -d'=' -f2 | sed 's/${[^:]*:\([^}]*\)}/\1/' | tr -d '\r'
  10. }
  11. DB_URL=$(get_prop "spring.datasource.url")
  12. DB_USERNAME=$(get_prop "spring.datasource.username")
  13. DB_PASSWORD=$(get_prop "spring.datasource.password")
  14. DB_HOST=$(echo "$DB_URL" | sed -E 's|jdbc:postgresql://([^:/]+).*|\1|')
  15. DB_PORT=$(echo "$DB_URL" | sed -E 's|jdbc:postgresql://[^:/]+:([0-9]+).*|\1|')
  16. DB_NAME=$(echo "$DB_URL" | sed -E 's|.*/([^?]+)$|\1|')
  17. DB_PORT=${DB_PORT:-5432}
  18. INIT_SQL="$ROOT_DIR/src/main/resources/db/migration/postgresql/V1__init.sql"
  19. SEED_SQL="$ROOT_DIR/src/main/resources/db/migration/postgresql/V2__seed_company_role.sql"
  20. if ! command -v psql &> /dev/null; then
  21. echo "Erro: psql não encontrado. Instale o cliente PostgreSQL (psql)."
  22. exit 1
  23. fi
  24. DB_EXISTS=$(PGPASSWORD=$DB_PASSWORD psql -U "$DB_USERNAME" -h "$DB_HOST" -p "$DB_PORT" -d "postgres" -tAc "SELECT 1 FROM pg_database WHERE datname='$DB_NAME'")
  25. if [ "$DB_EXISTS" != "1" ]; then
  26. echo "Criando banco de dados '$DB_NAME'..."
  27. PGPASSWORD=$DB_PASSWORD psql -U "$DB_USERNAME" -h "$DB_HOST" -p "$DB_PORT" -d "postgres" -c "CREATE DATABASE \"$DB_NAME\";"
  28. else
  29. echo "Banco '$DB_NAME' já existe, prosseguindo..."
  30. fi
  31. echo "Executando migrations..."
  32. PGPASSWORD=$DB_PASSWORD psql -U "$DB_USERNAME" -h "$DB_HOST" -p "$DB_PORT" -d "$DB_NAME" -f "$INIT_SQL"
  33. echo "Executando seed..."
  34. PGPASSWORD=$DB_PASSWORD psql -U "$DB_USERNAME" -h "$DB_HOST" -p "$DB_PORT" -d "$DB_NAME" -f "$SEED_SQL"
  35. echo "Setup concluído com sucesso para o banco '$DB_NAME'."