setup 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #!/bin/bash
  2. set -euo pipefail
  3. # Caminhos
  4. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  5. ROOT_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
  6. MIGRATIONS_FILE="${ROOT_DIR}/migrations/migrations_v1.sql"
  7. # Carrega variáveis do .env se existir
  8. if [[ -f "${ROOT_DIR}/.env" ]]; then
  9. set -a
  10. # shellcheck disable=SC1090
  11. source "${ROOT_DIR}/.env"
  12. set +a
  13. fi
  14. # Configurações de conexão (PostgreSQL)
  15. DB_HOST=${DB_HOST:-localhost}
  16. DB_PORT=${DB_PORT:-5432}
  17. DB_NAME=${DB_NAME:-tooeasy}
  18. DB_USER=${DB_USER:-postgres}
  19. DB_PASSWORD=${DB_PASSWORD:-}
  20. echo "[setup] Host=${DB_HOST} Port=${DB_PORT} DB=${DB_NAME} User=${DB_USER}"
  21. if [[ ! -f "${MIGRATIONS_FILE}" ]]; then
  22. echo "[setup] ERRO: Arquivo de migração não encontrado: ${MIGRATIONS_FILE}" >&2
  23. exit 1
  24. fi
  25. # 1) Cria o banco de dados se não existir
  26. echo "[setup] Verificando se o banco '${DB_NAME}' existe..."
  27. if ! PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d postgres -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | grep -q 1; then
  28. echo "[setup] Criando banco de dados '${DB_NAME}'..."
  29. PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d postgres -c "CREATE DATABASE \"${DB_NAME}\";"
  30. else
  31. echo "[setup] Banco '${DB_NAME}' já existe."
  32. fi
  33. # 2) Executa migração (schema) somente se ainda não existir
  34. echo "[setup] Verificando schema..."
  35. if [[ -z "$(PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -tAc "SELECT to_regclass('public.company')")" ]]; then
  36. echo "[setup] Aplicando migrações do arquivo: ${MIGRATIONS_FILE}"
  37. PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -v ON_ERROR_STOP=1 -f "${MIGRATIONS_FILE}"
  38. else
  39. echo "[setup] Schema já existente. Pulando migrações."
  40. fi
  41. # 3) Seed inicial (idempotente)
  42. echo "[setup] Inserindo dados iniciais (seed)..."
  43. PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -v ON_ERROR_STOP=1 -c "
  44. INSERT INTO \"company\" (company_name, company_flag)
  45. SELECT 'LumyonTech', 'a'
  46. WHERE NOT EXISTS (SELECT 1 FROM \"company\" WHERE company_name = 'LumyonTech');
  47. "
  48. PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -v ON_ERROR_STOP=1 -c "
  49. INSERT INTO \"role\" (company_id, role_name, role_permission, role_flag)
  50. SELECT c.company_id, 'Admin', '{}'::jsonb, 'a'
  51. FROM \"company\" c
  52. WHERE c.company_name = 'LumyonTech'
  53. AND NOT EXISTS (
  54. SELECT 1 FROM \"role\" r WHERE r.role_name = 'Admin' AND r.company_id = c.company_id
  55. );
  56. "
  57. PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -v ON_ERROR_STOP=1 -c "
  58. INSERT INTO \"status\" (status_status)
  59. SELECT 'OPEN'
  60. WHERE NOT EXISTS (SELECT 1 FROM \"status\" WHERE status_status = 'OPEN');
  61. "
  62. PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -v ON_ERROR_STOP=1 -c "
  63. INSERT INTO \"chain\" (chain_name)
  64. SELECT 'polygon'
  65. WHERE NOT EXISTS (SELECT 1 FROM \"chain\" WHERE chain_name = 'polygon');
  66. "
  67. # 4) Resumo
  68. echo "[setup] Finalizado com sucesso!"
  69. echo "[setup] Tabelas seed (amostra):"
  70. PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -c "
  71. TABLE \"company\";
  72. TABLE \"role\";
  73. TABLE \"status\";
  74. TABLE \"chain\";
  75. " | sed 's/\x1b\[[0-9;]*m//g'