feat(install): agregar opcion --empty-academic en install.sh e init_db.py para inicializar base de datos sin datos demo

This commit is contained in:
2026-09-23 20:44:08 -03:00
parent ddd1714eb2
commit 95d2aac323
5 changed files with 196 additions and 102 deletions
+36 -9
View File
@@ -21,6 +21,7 @@ hdr() { echo -e "\n${BOLD}${CYAN}══ $* ══${RESET}\n"; }
# ─── Argumentos de Línea de Comandos ───────────────────────────────────────────
ARG_DB_ACTION=""
ARG_KEEP_USERS=false
ARG_EMPTY_ACADEMIC=false
for arg in "$@"; do
case "$arg" in
--keep-db)
@@ -32,13 +33,19 @@ for arg in "$@"; do
--fresh-db|--restore-db)
ARG_DB_ACTION="fresh"
;;
--empty-academic|--no-demo|--clean-db|--without-demo-data)
ARG_DB_ACTION="fresh"
ARG_EMPTY_ACADEMIC=true
;;
-h|--help)
echo "Uso: sudo bash install.sh [OPCIONES]"
echo "Opciones:"
echo " --keep-db Mantiene la base de datos existente si ya contiene datos."
echo " --keep-users Preserva los usuarios existentes sin volver a crearlos o pisar sus contraseñas."
echo " --fresh-db Restaura la base de datos desde cero (DROP y recarga snapshot)."
echo " -h, --help Muestra esta ayuda."
echo " --keep-db Mantiene la base de datos existente si ya contiene datos."
echo " --keep-users Preserva los usuarios existentes sin volver a crearlos o pisar sus contraseñas."
echo " --fresh-db Restaura la base de datos desde cero (DROP y recarga snapshot classrooms_db.sql)."
echo " --empty-academic Crea la base de datos limpia sin carreras, materias, ciclos lectivos, aulas, edificios ni reservas demo."
echo " --no-demo Alias de --empty-academic."
echo " -h, --help Muestra esta ayuda."
exit 0
;;
*)
@@ -117,6 +124,7 @@ info "Directorio Frontend: ${FRONTEND_DIR}"
info "Usuario de Servicio: ${APP_USER}"
info "Preservar Base de Datos: ${ARG_DB_ACTION:-auto (interactivo/detección)}"
info "Preservar Usuarios: ${ARG_KEEP_USERS}"
info "Base Limpia (Sin Demo): ${ARG_EMPTY_ACADEMIC}"
# ─── 1. Paquetes Base del Sistema ──────────────────────────────────────────────
hdr "1. Actualizando repositorios y paquetes base"
@@ -340,22 +348,32 @@ if [ "$DB_EXISTS" = true ] && [ "$TABLE_COUNT" -gt 0 ]; then
info "Bandera --keep-db recibida: Se mantiene la base de datos existente intacta."
DO_RESTORE_FRESH=false
elif [[ "$ARG_DB_ACTION" == "fresh" ]]; then
warn "Bandera --fresh-db recibida: Se recreará la base de datos desde cero."
if [ "$ARG_EMPTY_ACADEMIC" = true ]; then
warn "Bandera --empty-academic recibida: Se inicializará la base de datos limpia sin datos demo."
else
warn "Bandera --fresh-db recibida: Se recreará la base de datos desde cero con snapshot."
fi
DO_RESTORE_FRESH=true
elif [ -t 0 ]; then
echo -e "\n${BOLD}${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
echo -e "${BOLD} ¿Qué deseas hacer con la base de datos PostgreSQL existente?${RESET}"
echo -e " [1] ${GREEN}${BOLD}Mantener la base de datos actual${RESET} (Recomendado: preserva registros y sincroniza esquema)"
echo -e " [2] ${RED}${BOLD}Restaurar desde cero${RESET} (DROP DATABASE y recargar snapshot ${SQL_BACKUP_FILE##*/})"
echo -e " [2] ${RED}${BOLD}Restaurar desde cero con datos de muestra${RESET} (DROP DATABASE y recargar snapshot ${SQL_BACKUP_FILE##*/})"
echo -e " [3] ${CYAN}${BOLD}Base de datos limpia sin datos demo${RESET} (DROP DATABASE y crear tablas vacías sin carreras, materias, aulas ni sedes)"
echo -e "${BOLD}${YELLOW}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${RESET}"
DB_CHOICE=""
read -t 30 -p " Ingresá tu opción [1/2] (por defecto 1 en 30s): " DB_CHOICE || DB_CHOICE="1"
read -t 30 -p " Ingresá tu opción [1/2/3] (por defecto 1 en 30s): " DB_CHOICE || DB_CHOICE="1"
DB_CHOICE="${DB_CHOICE:-1}"
if [[ "$DB_CHOICE" == "2" ]]; then
warn "Opción [2] seleccionada: Restauración destructiva desde cero."
warn "Opción [2] seleccionada: Restauración destructiva desde snapshot demo."
DO_RESTORE_FRESH=true
ARG_EMPTY_ACADEMIC=false
elif [[ "$DB_CHOICE" == "3" ]]; then
warn "Opción [3] seleccionada: Base de datos limpia sin carreras, materias, aulas ni sedes demo."
DO_RESTORE_FRESH=true
ARG_EMPTY_ACADEMIC=true
else
ok "Opción [1] seleccionada: Mantener base de datos existente."
DO_RESTORE_FRESH=false
@@ -401,7 +419,12 @@ hdr "9. Aplicando esquema y datos en la base de datos"
cd "$BACKEND_DIR"
if [ "$DO_RESTORE_FRESH" = true ]; then
if [[ -f "$SQL_BACKUP_FILE" ]]; then
if [ "$ARG_EMPTY_ACADEMIC" = true ]; then
info "Inicializando base de datos limpia (sin datos demo de carreras, materias, aulas o sedes)..."
pg_cmd -c "DROP DATABASE IF EXISTS \"${DB_NAME}\";" > /dev/null 2>&1 || true
pg_cmd -c "CREATE DATABASE \"${DB_NAME}\" OWNER postgres;" > /dev/null 2>&1
ok "Base de datos '${DB_NAME}' creada limpia (sin snapshot demo)"
elif [[ -f "$SQL_BACKUP_FILE" ]]; then
BACKUP_SIZE=$(du -h "$SQL_BACKUP_FILE" | awk '{print $1}')
info "Restaurando snapshot '${SQL_BACKUP_FILE##*/}' (${BACKUP_SIZE})..."
pg_cmd -c "DROP DATABASE IF EXISTS \"${DB_NAME}\";" > /dev/null 2>&1 || true
@@ -436,6 +459,10 @@ if [ "$ARG_KEEP_USERS" = true ]; then
INIT_DB_EXTRA_FLAGS+=( "--keep-users" )
info "Bandera --keep-users activada: init_db.py preservará los usuarios y contraseñas sin modificarlos ni recrearlos."
fi
if [ "$ARG_EMPTY_ACADEMIC" = true ]; then
INIT_DB_EXTRA_FLAGS+=( "--empty-academic" )
info "Bandera --empty-academic activada: init_db.py creará las tablas vacías sin carreras, materias, ciclos lectivos, aulas, edificios ni reservas."
fi
LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 PYTHONUTF8=1 PYTHONIOENCODING=utf-8 \
PYTHONPATH="${BACKEND_DIR}" FLASK_APP=wsgi.py "${VENV_DIR}/bin/python" -X utf8 init_db.py "${INIT_DB_EXTRA_FLAGS[@]}"