Marketplace móvil para negocios locales mexicanos. Estructura inicial: - apps/backend (NestJS API) - apps/frontend (React Web) - apps/mobile (Expo/React Native) - apps/mcp-server (Claude MCP Server) - apps/whatsapp-service (WhatsApp Business API) - database/ (PostgreSQL DDL) - docs/ (Documentación) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
178 lines
6.8 KiB
Bash
Executable File
178 lines
6.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# =============================================================================
|
|
# MiChangarrito - Script de Recreación de Base de Datos
|
|
# =============================================================================
|
|
# Versión: 1.0.0
|
|
# Fecha: 2026-01-05
|
|
# Autor: @PERFIL_DEVENV
|
|
# =============================================================================
|
|
# DESCRIPCION:
|
|
# Elimina y recrea la base de datos completamente.
|
|
# Útil para validar cambios en schemas o resetear el ambiente.
|
|
#
|
|
# USO:
|
|
# ./recreate-database.sh # Modo interactivo
|
|
# ./recreate-database.sh --force # Sin confirmación
|
|
# ./recreate-database.sh --validate # Ejecuta validación después
|
|
#
|
|
# PREREQUISITOS:
|
|
# - PostgreSQL 15+ instalado y corriendo
|
|
# - Script create-database.sh disponible
|
|
# =============================================================================
|
|
|
|
set -e
|
|
|
|
# Colores
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
# Flags
|
|
FORCE=false
|
|
VALIDATE=false
|
|
|
|
# Parsear argumentos
|
|
for arg in "$@"; do
|
|
case $arg in
|
|
--force)
|
|
FORCE=true
|
|
shift
|
|
;;
|
|
--validate)
|
|
VALIDATE=true
|
|
shift
|
|
;;
|
|
--help|-h)
|
|
echo "Uso: $0 [--force] [--validate]"
|
|
echo " --force No pedir confirmación"
|
|
echo " --validate Ejecutar validación al terminar"
|
|
exit 0
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Detectar directorio del script
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
DATABASE_DIR="$(dirname "$SCRIPT_DIR")"
|
|
|
|
# Banner
|
|
echo ""
|
|
echo -e "${RED}╔══════════════════════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${RED}║ MICHANGARRITO - RECREACIÓN DE BASE DE DATOS ║${NC}"
|
|
echo -e "${RED}║ ⚠️ OPERACIÓN DESTRUCTIVA ║${NC}"
|
|
echo -e "${RED}╚══════════════════════════════════════════════════════════════════╝${NC}"
|
|
echo ""
|
|
|
|
# Advertencia
|
|
echo -e "${YELLOW}ADVERTENCIA: Esta operación:${NC}"
|
|
echo " 1. ELIMINARÁ todos los datos existentes"
|
|
echo " 2. Recreará la estructura completa"
|
|
echo " 3. Ejecutará todos los seeds"
|
|
echo ""
|
|
|
|
# Confirmación (a menos que --force)
|
|
if [ "$FORCE" = false ]; then
|
|
read -p "¿Estás seguro de continuar? (escribe 'RECREAR' para confirmar): " confirm
|
|
if [ "$confirm" != "RECREAR" ]; then
|
|
echo -e "${RED}Operación cancelada.${NC}"
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# Registrar inicio
|
|
START_TIME=$(date +%s)
|
|
echo ""
|
|
echo -e "${CYAN}Iniciando recreación: $(date '+%Y-%m-%d %H:%M:%S')${NC}"
|
|
echo ""
|
|
|
|
# Ejecutar create-database.sh con --force
|
|
echo -e "${YELLOW}Ejecutando create-database.sh...${NC}"
|
|
echo ""
|
|
|
|
if [ -f "$SCRIPT_DIR/create-database.sh" ]; then
|
|
chmod +x "$SCRIPT_DIR/create-database.sh"
|
|
"$SCRIPT_DIR/create-database.sh" --force
|
|
else
|
|
echo -e "${RED}Error: create-database.sh no encontrado${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Calcular tiempo
|
|
END_TIME=$(date +%s)
|
|
DURATION=$((END_TIME - START_TIME))
|
|
|
|
echo ""
|
|
echo -e "${CYAN}Recreación completada en ${DURATION} segundos${NC}"
|
|
echo ""
|
|
|
|
# Validación opcional
|
|
if [ "$VALIDATE" = true ]; then
|
|
echo -e "${YELLOW}Ejecutando validación...${NC}"
|
|
echo ""
|
|
|
|
if [ -f "$SCRIPT_DIR/validate-database.sh" ]; then
|
|
chmod +x "$SCRIPT_DIR/validate-database.sh"
|
|
"$SCRIPT_DIR/validate-database.sh"
|
|
else
|
|
# Validación inline básica
|
|
DB_HOST="${DB_HOST:-localhost}"
|
|
DB_PORT="${DB_PORT:-5432}"
|
|
DB_NAME="${DB_NAME:-michangarrito_dev}"
|
|
DB_USER="${DB_USER:-michangarrito_dev}"
|
|
DB_PASSWORD="${DB_PASSWORD:-MCh_dev_2025_secure}"
|
|
|
|
echo -e "${CYAN}Validación básica:${NC}"
|
|
|
|
# Contar schemas
|
|
SCHEMA_COUNT=$(PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -tAc "SELECT count(*) FROM pg_namespace WHERE nspname NOT LIKE 'pg_%' AND nspname != 'information_schema';" 2>/dev/null || echo "0")
|
|
echo " Schemas: $SCHEMA_COUNT"
|
|
|
|
# Contar tablas
|
|
TABLE_COUNT=$(PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -tAc "SELECT count(*) FROM information_schema.tables WHERE table_schema NOT IN ('pg_catalog', 'information_schema');" 2>/dev/null || echo "0")
|
|
echo " Tablas: $TABLE_COUNT"
|
|
|
|
# Contar funciones
|
|
FUNC_COUNT=$(PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -tAc "SELECT count(*) FROM pg_proc p JOIN pg_namespace n ON p.pronamespace = n.oid WHERE n.nspname NOT LIKE 'pg_%' AND n.nspname != 'information_schema';" 2>/dev/null || echo "0")
|
|
echo " Funciones: $FUNC_COUNT"
|
|
|
|
# Contar triggers
|
|
TRIGGER_COUNT=$(PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -tAc "SELECT count(*) FROM information_schema.triggers WHERE trigger_schema NOT IN ('pg_catalog', 'information_schema');" 2>/dev/null || echo "0")
|
|
echo " Triggers: $TRIGGER_COUNT"
|
|
|
|
echo ""
|
|
|
|
# Validar schemas esperados
|
|
EXPECTED_SCHEMAS=("public" "auth" "catalog" "sales" "inventory" "customers" "orders" "subscriptions" "messaging")
|
|
MISSING_SCHEMAS=0
|
|
|
|
echo -e "${CYAN}Schemas esperados:${NC}"
|
|
for schema in "${EXPECTED_SCHEMAS[@]}"; do
|
|
EXISTS=$(PGPASSWORD="$DB_PASSWORD" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" -tAc "SELECT 1 FROM pg_namespace WHERE nspname='$schema';" 2>/dev/null || echo "")
|
|
if [ "$EXISTS" = "1" ]; then
|
|
echo -e " [${GREEN}✓${NC}] $schema"
|
|
else
|
|
echo -e " [${RED}✗${NC}] $schema"
|
|
((MISSING_SCHEMAS++))
|
|
fi
|
|
done
|
|
|
|
echo ""
|
|
|
|
if [ $MISSING_SCHEMAS -eq 0 ]; then
|
|
echo -e "${GREEN}✓ Validación exitosa: Todos los schemas existen${NC}"
|
|
else
|
|
echo -e "${RED}✗ Validación fallida: $MISSING_SCHEMAS schemas faltantes${NC}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${GREEN}╔══════════════════════════════════════════════════════════════════╗${NC}"
|
|
echo -e "${GREEN}║ RECREACIÓN COMPLETADA EXITOSAMENTE ║${NC}"
|
|
echo -e "${GREEN}╚══════════════════════════════════════════════════════════════════╝${NC}"
|
|
echo ""
|