diff --git a/scripts/apply_all_migrations.sh b/scripts/apply_all_migrations.sh new file mode 100755 index 0000000..f1ff436 --- /dev/null +++ b/scripts/apply_all_migrations.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Aplica todas las migraciones de supabase/migrations/ en orden de timestamp. +# Uso: scripts/apply_all_migrations.sh +set -e + +MIGRATIONS_DIR="$(dirname "$0")/../supabase/migrations" + +for f in $(ls "$MIGRATIONS_DIR"/*.sql | sort); do + echo "Applying: $f" + # -v ON_ERROR_STOP=1: sin esto, psql sigue ejecutando statements después de un + # error SQL y termina con exit code 0 igual — set -e nunca vería el fallo. + if docker exec -i supabase-db psql -v ON_ERROR_STOP=1 -U postgres -d postgres < "$f"; then + echo "Done: $f" + else + echo "ERROR applying: $f" >&2 + exit 1 + fi +done + +echo "All migrations applied." diff --git a/scripts/setup_all.sh b/scripts/setup_all.sh new file mode 100755 index 0000000..458dd2d --- /dev/null +++ b/scripts/setup_all.sh @@ -0,0 +1,45 @@ +#!/bin/bash +# Recuperación completa de la DB tras una reinicialización (deploy que vació +# supabase-db). Orden: +# 1. Todas las migraciones (scripts/apply_all_migrations.sh) +# 2. Catálogo de encuestas (supabase/seed.sql) — sin esto, las migraciones +# dejan organizations/surveys/questions vacías y nada de lo que sigue +# tiene contra qué referenciar (setup_first_admin.sql sí funcionaría, +# pero seed_prueba_50.sql fallaría: rpc_submit_response necesita +# questions.id reales, que solo existen después de este paso). +# 3. Usuario platform_admin (scripts/setup_first_admin.sql) +# 4. Datos de prueba (docs/dashboard/seed_prueba_50.sql) +# +# Uso: +# ADMIN_EMAIL='admin@inquality.com.py' ADMIN_PASSWORD='...' scripts/setup_all.sh +set -e + +SCRIPT_DIR="$(dirname "$0")" +ROOT_DIR="$SCRIPT_DIR/.." + +if [ -z "$ADMIN_EMAIL" ] || [ -z "$ADMIN_PASSWORD" ]; then + echo "ERROR: ADMIN_EMAIL y ADMIN_PASSWORD son obligatorios (variables de entorno)." >&2 + exit 1 +fi + +echo "== 1/4: Aplicando todas las migraciones ==" +"$SCRIPT_DIR/apply_all_migrations.sh" + +echo "== 2/4: Sembrando catálogo de encuestas (supabase/seed.sql) ==" +# ADVERTENCIA propia del archivo: "SOLO ENTORNOS DE DESARROLLO — nunca ejecutar +# en producción". Esa advertencia es para NO re-correrlo contra una DB con +# datos reales (DELETE+INSERT de questions con UUIDs nuevos puede chocar con +# answers existentes via FK). En este escenario de recuperación la DB está +# vacía (reinicializada por el deploy) — no hay answers/responses que puedan +# quedar huérfanas. Si la DB NO está realmente vacía, frenar antes de este paso. +docker exec -i supabase-db psql -v ON_ERROR_STOP=1 -U postgres -d postgres < "$ROOT_DIR/supabase/seed.sql" + +echo "== 3/4: Creando usuario platform_admin ==" +docker exec -i supabase-db psql -v ON_ERROR_STOP=1 -U postgres -d postgres \ + -v email="$ADMIN_EMAIL" -v password="$ADMIN_PASSWORD" \ + < "$ROOT_DIR/scripts/setup_first_admin.sql" + +echo "== 4/4: Sembrando datos de prueba (seed_prueba_50.sql) ==" +docker exec -i supabase-db psql -v ON_ERROR_STOP=1 -U postgres -d postgres < "$ROOT_DIR/docs/dashboard/seed_prueba_50.sql" + +echo "Setup completo."