## Scripts de Base de Datos (12 archivos) - init-database.sh: Inicializacion completa con usuario y BD - init-database-v3.sh: Version con dotenv-vault - reset-database.sh: Reset BD manteniendo usuario - recreate-database.sh: Recreacion completa - cleanup-duplicados.sh, fix-duplicate-triggers.sh - verify-users.sh, verify-missions-status.sh - load-users-and-profiles.sh, DB-127-validar-gaps.sh ## Scripts de Produccion (5 archivos) - build-production.sh: Compilar backend y frontend - deploy-production.sh: Desplegar con PM2 - pre-deploy-check.sh: Validaciones pre-deploy - repair-missing-data.sh: Reparar datos faltantes - migrate-missing-objects.sh: Migrar objetos SQL ## Documentacion (7 archivos) - GUIA-DESPLIEGUE-PRODUCCION-COMPLETA.md - GUIA-ACTUALIZACION-PRODUCCION.md - GUIA-VALIDACION-PRODUCCION.md - GUIA-DEPLOYMENT-AGENTE-PRODUCCION.md - GUIA-SSL-NGINX-PRODUCCION.md - GUIA-SSL-AUTOFIRMADO.md - DIRECTIVA-DEPLOYMENT.md ## Actualizaciones DDL/Seeds - 99-post-ddl-permissions.sql: Permisos actualizados - LOAD-SEEDS-gamification_system.sh: Seeds completos ## Nuevos archivos - PROMPT-AGENTE-PRODUCCION.md: Prompt para agente productivo - FLUJO-CARGA-LIMPIA.md: Documentacion de carga limpia Resuelve: Problema de carga de BD entre dev y produccion Cumple: DIRECTIVA-POLITICA-CARGA-LIMPIA.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.3 KiB
5.3 KiB
FLUJO DE CARGA LIMPIA - GAMILIT DATABASE
Fecha: 2025-12-18 Version: 1.0 Cumple con: DIRECTIVA-POLITICA-CARGA-LIMPIA.md
RESUMEN
Este documento describe los 3 escenarios de inicializacion de base de datos y que script usar en cada caso.
ESCENARIOS Y SCRIPTS
Escenario 1: INSTALACION NUEVA (Usuario y BD no existen)
Usar: init-database.sh o init-database-v3.sh
Ubicacion: apps/database/scripts/
cd /home/isem/workspace/projects/gamilit/apps/database/scripts
# Opcion A: Con password manual
./init-database.sh --env dev --password "tu_password_seguro"
# Opcion B: Con dotenv-vault (recomendado para produccion)
./manage-secrets.sh generate --env prod
./manage-secrets.sh sync --env prod
./init-database-v3.sh --env prod
Que hace:
- Crea usuario PostgreSQL
gamilit_user - Crea base de datos
gamilit_platform - Ejecuta todos los DDL (16 fases)
- Carga todos los Seeds (38+ archivos)
- Genera archivo de credenciales
- Actualiza .env de backend/frontend
Escenario 2: RECREACION COMPLETA (Usuario existe, BD se resetea)
Usar: drop-and-recreate-database.sh
Ubicacion: apps/database/
cd /home/isem/workspace/projects/gamilit/apps/database
# Con DATABASE_URL
export DATABASE_URL="postgresql://gamilit_user:password@localhost:5432/gamilit_platform"
./drop-and-recreate-database.sh
# O pasando como argumento
./drop-and-recreate-database.sh "postgresql://gamilit_user:password@localhost:5432/gamilit_platform"
Que hace:
- Desconecta usuarios activos
- DROP DATABASE gamilit_platform
- CREATE DATABASE gamilit_platform
- Llama a
create-database.shautomaticamente
Escenario 3: SOLO DDL + SEEDS (BD limpia ya existe)
Usar: create-database.sh
Ubicacion: apps/database/
cd /home/isem/workspace/projects/gamilit/apps/database
export DATABASE_URL="postgresql://gamilit_user:password@localhost:5432/gamilit_platform"
./create-database.sh
Que hace:
- Habilita extensiones (pgcrypto, uuid-ossp)
- Ejecuta DDL en 16 fases ordenadas
- Carga Seeds de produccion (38+ archivos)
- Genera reporte de objetos creados
DIAGRAMA DE DECISION
¿Existe el usuario gamilit_user?
│
├── NO ──► Escenario 1: ./scripts/init-database.sh --env dev
│
└── SI ──► ¿Necesitas eliminar TODOS los datos?
│
├── SI ──► Escenario 2: ./drop-and-recreate-database.sh
│
└── NO ──► ¿La BD esta vacia (recien creada)?
│
├── SI ──► Escenario 3: ./create-database.sh
│
└── NO ──► Escenario 2: ./drop-and-recreate-database.sh
COMANDOS RAPIDOS POR AMBIENTE
Desarrollo (primera vez)
cd apps/database/scripts
./init-database.sh --env dev --password "dev_password_123"
Desarrollo (recrear BD)
cd apps/database
export DATABASE_URL="postgresql://gamilit_user:dev_password_123@localhost:5432/gamilit_platform"
./drop-and-recreate-database.sh
Produccion (primera vez)
cd apps/database/scripts
./manage-secrets.sh generate --env prod
./manage-secrets.sh sync --env prod
./init-database-v3.sh --env prod
Produccion (recrear BD)
cd apps/database
export DATABASE_URL="postgresql://gamilit_user:$DB_PASSWORD@localhost:5432/gamilit_platform"
./drop-and-recreate-database.sh
VALIDACION POST-CARGA
Despues de cualquier escenario, validar con:
# Verificar conteo de objetos
psql "$DATABASE_URL" -c "
SELECT
(SELECT COUNT(*) FROM information_schema.schemata WHERE schema_name NOT IN ('pg_catalog','information_schema','pg_toast')) as schemas,
(SELECT COUNT(*) FROM information_schema.tables WHERE table_schema NOT IN ('pg_catalog','information_schema')) as tables,
(SELECT COUNT(*) FROM pg_type WHERE typcategory = 'E') as enums
;"
# Verificar datos criticos
psql "$DATABASE_URL" -c "
SELECT 'tenants' as tabla, COUNT(*) FROM auth_management.tenants
UNION ALL SELECT 'users', COUNT(*) FROM auth.users
UNION ALL SELECT 'modules', COUNT(*) FROM educational_content.modules
UNION ALL SELECT 'maya_ranks', COUNT(*) FROM gamification_system.maya_ranks
UNION ALL SELECT 'feature_flags', COUNT(*) FROM system_configuration.feature_flags;
"
Valores esperados:
- Schemas: 15+
- Tablas: 60+
- ENUMs: 35+
- Tenants: 14+
- Users: 20+
- Modules: 5
- Maya Ranks: 5
- Feature Flags: 26+
SCRIPTS DISPONIBLES
| Script | Ubicacion | Proposito |
|---|---|---|
init-database.sh |
scripts/ | Crear usuario + BD + DDL + Seeds |
init-database-v3.sh |
scripts/ | Igual pero con dotenv-vault |
drop-and-recreate-database.sh |
./ | Drop BD + Recrear + DDL + Seeds |
create-database.sh |
./ | Solo DDL + Seeds (BD debe existir) |
reset-database.sh |
scripts/ | Reset BD (mantiene usuario) |
recreate-database.sh |
scripts/ | Drop completo (usuario + BD) |
manage-secrets.sh |
scripts/ | Gestionar passwords con vault |
CUMPLIMIENTO DE DIRECTIVA
Este flujo cumple con DIRECTIVA-POLITICA-CARGA-LIMPIA.md:
- ✅ DDL es fuente de verdad
- ✅ BD es resultado de ejecutar DDL
- ✅ No se usan migrations
- ✅ Recreacion completa en cualquier momento
- ✅ Un comando = BD lista
Ultima actualizacion: 2025-12-18