feat(ops): scripts de recuperación tras reinicialización de DB
scripts/apply_all_migrations.sh: aplica todas las migraciones de supabase/migrations/ en orden de timestamp, una por una, con ON_ERROR_STOP=1 (sin esto psql sigue tras un error SQL y devuelve exit 0 igual — set -e nunca lo vería). scripts/setup_all.sh: orquesta la recuperación completa — migraciones, catálogo de encuestas (supabase/seed.sql, paso agregado: sin él surveys/questions quedan vacías y seed_prueba_50.sql no tiene nada que referenciar), usuario platform_admin vía ADMIN_EMAIL/ADMIN_PASSWORD, y datos de prueba (docs/dashboard/seed_prueba_50.sql). No ejecutado — solo los archivos, a la espera de uso manual en el VPS.
This commit is contained in:
45
scripts/setup_all.sh
Executable file
45
scripts/setup_all.sh
Executable file
@@ -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."
|
||||
Reference in New Issue
Block a user