workspace/projects/gamilit/apps/database/README.md
rckrdmrd 608e1e2a2e
Some checks are pending
CI Pipeline / changes (push) Waiting to run
CI Pipeline / core (push) Blocked by required conditions
CI Pipeline / trading-backend (push) Blocked by required conditions
CI Pipeline / trading-data-service (push) Blocked by required conditions
CI Pipeline / trading-frontend (push) Blocked by required conditions
CI Pipeline / erp-core (push) Blocked by required conditions
CI Pipeline / erp-mecanicas (push) Blocked by required conditions
CI Pipeline / gamilit-backend (push) Blocked by required conditions
CI Pipeline / gamilit-frontend (push) Blocked by required conditions
Multi-project update: gamilit, orchestration, trading-platform
Gamilit:
- Backend: Teacher services, assignments, gamification, exercise submissions
- Frontend: Admin/Teacher/Student portals, module 4-5 mechanics, monitoring
- Database: DDL functions, seeds for dev/prod, auth/gamification schemas
- Docs: Architecture, features, guides cleanup and reorganization

Core/Orchestration:
- New workspace directives index
- Documentation directive

Trading-platform:
- Database seeds and inventory updates
- Tech leader validation report

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-18 07:17:46 -06:00

25 KiB

Database - GAMILIT

Proyecto de base de datos PostgreSQL para la plataforma GAMILIT

Estructura

apps/database/
├── ddl/                     # Definiciones DDL (schemas, tablas, funciones, etc.)
│   ├── 00-prerequisites.sql # Schemas + ENUMs base (ejecutar primero)
│   └── schemas/             # 14 schemas con todos los objetos
├── scripts/                 # Scripts operacionales
│   ├── init-database.sh     # Inicializar BD completa
│   ├── recreate-database.sh # Recrear BD desde cero
│   ├── reset-database.sh    # Reset BD manteniendo usuario
│   ├── inventory/           # Scripts para generar inventarios
│   └── ...                  # Otros scripts de gestión
├── seeds/                   # Datos iniciales por ambiente
│   ├── dev/                 # Datos de desarrollo
│   ├── staging/             # Datos de staging
│   └── prod/                # Datos de producción
├── _deprecated/             # Archivos obsoletos (histórico)
└── create-database.sh       # Script maestro de creación

Quick Start

Opción 1: Crear Base de Datos Nueva (Recomendado)

# Configurar DATABASE_URL
export DATABASE_URL="postgresql://usuario:password@localhost:5432/gamilit"

# Ejecutar script maestro
./create-database.sh

Opción 2: Inicializar con Usuario y Seeds

# Desarrollo
./scripts/init-database.sh --env dev

# Producción
./scripts/init-database.sh --env prod

Opción 3: Drop y Recrear (Testing de Carga Limpia) VALIDADO DB-111

# ADVERTENCIA: Elimina TODOS los datos
# Para testing de carga limpia desde cero (drop + create automático)
export DATABASE_URL="postgresql://usuario:password@localhost:5432/gamilit_db"

# Ejecuta drop, recreate y create-database en un solo comando
./drop-and-recreate-database.sh

Características (v2.3.7 - DB-111):

  • Desconecta automáticamente usuarios activos
  • DROP DATABASE completo
  • CREATE DATABASE automático
  • Ejecuta create-database.sh automáticamente
  • Carga 32 seeds PROD (100% de válidos)
  • Reporta éxito/error con códigos de salida

Validado: DB-111 (2025-11-11) - Scripts 100% funcionales

Opción 4: Recrear con Seeds

# ADVERTENCIA: Elimina TODOS los datos
./scripts/recreate-database.sh --env dev

Orden de Ejecución DDL

El script create-database.sh ejecuta los archivos DDL en este orden:

  1. Prerequisites - Schemas y ENUMs base
  2. Gamilit Schema - Funciones y vistas compartidas (utilities)
  3. Auth Schema - Autenticación base
  4. Storage Schema - Almacenamiento
  5. Auth Management - Gestión de usuarios
  6. Educational Content - Contenido educativo
  7. Gamification System - Sistema de gamificación
  8. Progress Tracking - Seguimiento de progreso
  9. Social Features - Características sociales 9.5. FK Constraints Diferidos - Resolución de dependencias circulares 9.7. Notifications - Sistema de notificaciones multi-canal NUEVO
  10. Content Management - Gestión de contenido
  11. Audit Logging - Auditoría
  12. System Configuration - Configuración
  13. Admin Dashboard - Dashboard administrativo (vistas analíticas)
  14. LTI Integration - Learning Tools Interoperability 1.3
  15. Public Schema - Deshabilitado (reservado para PostgreSQL core)
  16. Seed Data - Carga de datos iniciales de producción (34 archivos PROD) ACTUALIZADO 2025-11-18

Documentación Completa

La documentación detallada del proyecto de base de datos está en:

  • Inventarios de objetos DB: docs/90-transversal/inventarios-database/
  • Guía de creación: docs/95-guias-desarrollo/GUIA-CREAR-BASE-DATOS.md
  • Guía de referencias: docs/95-guias-desarrollo/GUIA-REFERENCIAS-SIMCO.md
  • Guía de carga de usuarios: docs/GUIA-CARGA-USUARIOS-Y-PERFILES.md NUEVO
  • CHANGELOG de Database: docs/database/CHANGELOG.md NUEVO (2025-11-24)
  • Funciones Gamilit: ddl/schemas/gamilit/functions/README.md NUEVO (2025-11-24)

Flujo de Registro de Usuario NUEVO

Inicialización Automática de Gamificación

Al crear un nuevo usuario, el sistema inicializa automáticamente las estadísticas de gamificación mediante el trigger initialize_user_stats().

Trigger: auth_management.profiles.trg_initialize_user_stats Función: gamilit.initialize_user_stats() Evento: AFTER INSERT en auth_management.profiles

Tablas Inicializadas (4):

Tabla Propósito Valores Iniciales
gamification_system.user_stats Estadísticas XP/ML Coins 100 ML Coins (bono bienvenida)
gamification_system.comodines_inventory Inventario de comodines Vacío (0 de cada tipo)
gamification_system.user_ranks Rango Maya Ajaw (nivel inicial)
progress_tracking.module_progress Progreso de módulos not_started, 0% para todos los módulos publicados

Flujo Completo:

1. Backend: INSERT auth.users (email, password_hash)
2. Backend: INSERT auth_management.profiles (user_id, role, tenant_id)
3. Trigger: trg_initialize_user_stats se dispara automáticamente
4. Función: initialize_user_stats() ejecuta 4 INSERT en paralelo
5. Usuario listo con gamificación completa

Roles con Gamificación:

  • student - Estudiantes (gamificación completa)
  • admin_teacher - Maestros (gamificación completa)
  • super_admin - Administradores (gamificación completa)

Documentación Detallada:

  • Ver: ddl/schemas/gamilit/functions/README.md - Sección "initialize_user_stats()"
  • Ver: docs/database/CHANGELOG.md - [2.5.2] 2025-11-24 (5 bug fixes)

Usuarios de Prueba

Para cargar usuarios de prueba en ambientes de desarrollo/staging:

# Opción 1: Cargar usuarios automáticamente (recomendado)
./scripts/load-users-and-profiles.sh

# Opción 2: Verificar usuarios existentes
./scripts/verify-users.sh

Credenciales disponibles después de la carga:

Tipo Email Password Cantidad
Super Admin admin@gamilit.com Test1234 2
Teacher teacher@gamilit.com Test1234 2
Student student@gamilit.com Test1234 4

Total: 8 usuarios de prueba

📖 Documentación completa: Ver docs/GUIA-CARGA-USUARIOS-Y-PERFILES.md para detalles sobre problemas conocidos y soluciones.

Scripts Disponibles

Gestión de Base de Datos

Script Descripción
create-database.sh Crea BD nueva ejecutando todos los DDL
init-database.sh Inicializa BD con usuario y seeds
recreate-database.sh Elimina y recrea BD completamente
reset-database.sh Reset BD manteniendo usuario
manage-secrets.sh Gestión de credenciales
update-env-files.sh Actualiza archivos .env

Usuarios y Perfiles NUEVO

Script Descripción
load-users-and-profiles.sh Carga usuarios y perfiles de prueba (8 usuarios)
verify-users.sh Verifica usuarios y perfiles cargados

Inventarios y Utilidades

Script Descripción
inventory/list-tables.sh Lista todas las tablas
inventory/list-enums.sh Lista todos los ENUMs
inventory/list-functions.sh Lista todas las funciones
inventory/generate-all-inventories.sh Genera todos los inventarios

Ver más detalles en scripts/README.md

Política de Carga Limpia

Este proyecto utiliza Política de Carga Limpia (Clean Load Policy):

  • DDL es la fuente de verdad - Todos los cambios se realizan en archivos DDL
  • Sin migrations - No se utilizan scripts de migración incremental
  • Recreación completa - La BD se puede recrear desde cero en cualquier momento

Para más detalles, consultar: orchestration/directivas/DIRECTIVA-POLITICA-CARGA-LIMPIA.md

Referencia: ADR-018 - Eliminación de Carpetas Migrations

Seeds VALIDADO Y COMPLETADO DB-111

Los seeds están organizados por ambiente:

  • dev/: Datos completos de desarrollo (usuarios demo, ejercicios, etc.)
  • staging/: Datos de staging
  • prod/: 32 archivos validados (100% de seeds válidos) - 27 ejercicios educativos

Seeds de Producción Detallados (v2.3.7 - DB-111)

Estado: 100% de cobertura - Todos los schemas tienen seeds necesarios

Estructura por schema:

Schema Archivos Contenido Estado
audit_logging/ 1 archivo Configuración por defecto Agregado DB-111
auth/ 1 archivo Usuarios testing y demo Validado
auth_management/ 3 archivos Tenants, providers, 26 perfiles Validado
content_management/ 1 archivo Templates de contenido Agregado DB-111
educational_content/ 8 archivos 5 módulos + 27 ejercicios + rubrics Validado
gamification_system/ 9 archivos Categorías, leaderboards, rangos Maya, achievements Validado
lti_integration/ 1 archivo Consumidores LTI Agregado DB-111
progress_tracking/ 1 archivo Progreso inicial de módulos Agregado DB-111
social_features/ 3 archivos Escuelas, aulas, miembros demo Agregado DB-111
system_configuration/ 4 archivos Settings, flags, notificaciones, rate limits Completado DB-111

Total: 32 seeds PROD ejecutándose (100% de válidos)

Seeds Legacy (deprecated):

  • auth_management/03-profiles.sql → Reemplazado por 04-profiles-complete.sql (v2.0)

Ejercicios por módulo:

  • Module 1 (Historiador Detective): 5 mecánicas con JSONB completo IMPLEMENTADO
  • Module 2 (Detective Textual): 5 mecánicas con análisis de textos IMPLEMENTADO
  • Module 3 (Científico Pensamiento Crítico): 5 mecánicas con evaluación IMPLEMENTADO
  • Module 4 (Creador Digital): 5 mecánicas con producción multimedia ⚠️ BACKLOG
  • Module 5 (Video Carta): 3 mecánicas con producción creativa ⚠️ BACKLOG

Nota: Módulos 4 y 5 están en backlog (ver sección "Módulos en Backlog" más abajo)

Correcciones Aplicadas

v2.3.7 - Validación y Seeds Completos (2025-11-11) 🆕 DB-111

Estado: Validación exhaustiva + 100% seeds PROD

Validación y Corrección de Documentación (FASE 1.7)

Problema: Discrepancias entre documentación y DDL físico

Correcciones aplicadas:

  1. DATABASE_INVENTORY.yml - 7 propiedades corregidas

    • content_management: tables: 6 → 8
    • content_management: functions: 3 → 0 (no existe directorio)
    • content_management: triggers: 2 → 3
    • content_management: indexes: 4 → 2
    • content_management: rls_policies: 2 → 1
    • Agregada lista explícita de 8 tablas
  2. CONTENT_MANAGEMENT_TRACEABILITY.yml - Trazabilidad completa

    • Eliminadas 3 "tablas fantasma" (no existían físicamente)
    • Agregadas 3 tablas no documentadas:
      • content_authors.sql (12 columnas, 5 índices)
      • content_categories.sql (jerárquica, self-referential)
      • media_metadata.sql
    • 8 tablas completas documentadas con todos sus atributos

Resultado: 100% sincronización DDL ↔ Documentación

Seeds PROD Completos (FASE 1.8)

Problema: 9 seeds PROD (27%) no ejecutándose en create-database.sh

Correcciones aplicadas:

  1. Seed Legacy Identificado:

    • 03-profiles.sql (v1.0) movido a _deprecated/
    • Reemplazado por 04-profiles-complete.sql (v2.0, 26 perfiles)
  2. 8 Seeds Agregados a create-database.sh:

    • audit_logging/01-default-config.sql
    • system_configuration/04-rate_limits.sql
    • content_management/01-default-templates.sql
    • social_features/01-schools.sql
    • social_features/02-classrooms.sql
    • social_features/03-classroom-members.sql
    • progress_tracking/01-module_progress.sql
    • lti_integration/01-lti_consumers.sql

Resultado:

  • Seeds ejecutados: 24 → 32 (100% de válidos)
  • 10 schemas con 100% cobertura
  • Orden de dependencias validado

Documentación: Ver orchestration/database/DB-111/ para reportes completos


v2.3.5 - Seeds Gamification UTF-8 + UUIDs Fixed (2025-11-11) 🆕

Estado: DB-100 completado

Problemas Corregidos:

1. Encoding UTF-8 (P0):

  • seeds/prod/gamification_system/07-ml_coins_transactions.sql - Convertido a UTF-8
  • seeds/prod/gamification_system/08-user_achievements.sql - Convertido a UTF-8
  • seeds/prod/gamification_system/09-comodines_inventory.sql - Convertido a UTF-8
  • Problema resuelto: Caracteres especiales (ó, ñ, á, é, í) corruptos → UTF-8 válido
  • Resultado: 0 errores de encoding en ejecución

2. UUIDs Inválidos (P0):

  • 5 UUIDs inválidos reemplazados con válidos
  • UUIDs corregidos: Caracteres no-hexadecimales (g, h, i) reemplazados
  • Archivos: 08-user_achievements.sql (5 UUIDs), 09-comodines_inventory.sql (5 UUIDs)
  • Resultado: 0 errores de UUID en ejecución

3. Validación Completa:

  • create-database.sh ejecuta 100% sin errores de encoding/UUIDs
  • 16/16 fases completadas
  • Seeds gamification técnicamente correctos (sin errores de sintaxis)

Documentación:

  • 📄 Ver orchestration/database/DB-100/ para detalles completos
  • 📄 Ver orchestration/TRAZA-TAREAS-DATABASE.md (DB-098, DB-099, DB-100)

v2.3.2 - Seeds Production-Ready + Modelo JSONB Puro (2025-11-11)

Estado: Fase 1-2 completadas (DB-095, DB-096)

Fase 1: Correcciones P0 - Seeds Production-Ready

1. Expansión Module 5 (CORR-001):

  • seeds/prod/educational_content/06-exercises-module5.sql
  • Cambio: 97 líneas → 835 líneas (+861%)
  • Contenido agregado:
    • 3 templates completos (Diario, Científico, Carta)
    • 5 prompts detallados por ejercicio
    • 4 rúbricas de evaluación con criterios y pesos
    • JSONB estructura completa para producción creativa

2. Migración Seeds DEV → PROD (CORR-002):

  • Creados 5 archivos nuevos de exercises:
    • 02-exercises-module1.sql (6 mecánicas)
    • 03-exercises-module2.sql (5 mecánicas)
    • 04-exercises-module3.sql (6 mecánicas)
    • 05-exercises-module4.sql (5 mecánicas)
    • 06-exercises-module5.sql (5 mecánicas)
  • Total: 27 ejercicios listos para producción
  • Incremento: 10 ejercicios → 27 ejercicios (+170%)
  • Completitud: 36% → 100% (+64 puntos)

3. Eliminación Modelo Dual (CORR-003):

  • Removidas tablas legacy assignment_answers y assignment_resources
  • Consolidado en modelo JSONB puro
  • Decisión arquitectónica: Mantener flexibilidad JSONB sin normalización
  • Resultado: Reducción de 16 → 14 tablas en educational_content

Fase 2: Actualización de Inventarios

4. DATABASE_INVENTORY.yml actualizado (CORR-004):

  • seeds_produccion: 31 → 33 archivos
  • educational_content.tables: 16 → 14 (eliminadas 2 legacy)
  • Métricas actualizadas al 2025-11-11

5. SEEDS_INVENTORY.yml creado (CORR-005):

  • Archivo NUEVO: 650+ líneas
  • 67 seeds documentados (DEV + PROD)
  • Metadata completa: líneas, registros, dependencias
  • Grupos lógicos por schema y propósito

Documentación:

  • 📄 Ver orchestration/TRAZA-CORRECCIONES.md para detalles completos
  • 📄 Ver orchestration/TRAZA-TAREAS-DATABASE.md (DB-095, DB-096)
  • 📄 Ver orchestration/04-inventarios/database/SEEDS_INVENTORY.yml

📦 Módulos en Backlog (Fase 4)

Fecha: 2025-11-19 (DB-126) Estado: BACKLOG - Evaluación manual/IA requerida

Los siguientes módulos están definidos en la estructura de datos pero marcados como BACKLOG (Fase 4) por requerir evaluación manual o con IA:

Módulo 4: Lectura Digital (5 ejercicios) ⚠️ BACKLOG

  • verificador_fake_news - Verificador de noticias falsas
  • infografia_interactiva - Creación de infografía interactiva
  • quiz_tiktok - Quiz estilo TikTok
  • navegacion_hipertextual - Navegación hipertextual
  • analisis_memes - Análisis de memes educativos

Razón: Requieren validación con IA (análisis de imágenes, verificación de fuentes, análisis multimodal)

Módulo 5: Producción Lectora (3 ejercicios) ⚠️ BACKLOG

  • diario_multimedia - Diario interactivo multimedia
  • comic_digital - Resumen visual progresivo
  • video_carta - Cápsula del tiempo digital

Razón: Requieren rúbricas de evaluación creativa y revisión humana/IA

Estado de Implementación

  • Tipos definidos en ENUM exercise_type (compatibilidad futura)
  • Seeds disponibles en _backlog/ (no se cargan por defecto)
  • Validadores SQL: NO implementados (intencionado)
  • No auto-evaluables: auto_gradable = false

Roadmap: Ver docs/04-fase-backlog/ para plan de implementación (P1: Validadores parciales, P2: Revisión manual, P3: IA multimodal)


v2.3.1 - Carga Limpia Exitosa (2025-11-11)

Dependencia Circular Resuelta (DEP-001)

Problema: profiles.school_id FK creaba dependencia circular con schools tabla.

Solución aplicada:

  • Comentada constraint en ddl/schemas/auth_management/tables/03-profiles.sql
  • Creado FK diferido en ddl/schemas/auth_management/fk-constraints/01-profiles-school-fk.sql
  • Agregada Fase 9.5 en create-database.sh para ejecutar FK constraints diferidos

Resultado: Script ahora ejecuta limpiamente en BD nueva sin errores.

Seeds de Producción Corregidos (v2.0)

Problemas identificados:

  • Uso de STRING en lugar de UUID (3 archivos)
  • Columnas faltantes o con nombres incorrectos (5 archivos)
  • Uso de NOW() en lugar de gamilit.now_mexico() (todos)

Archivos reescritos (100% alineados con DDL):

  1. seeds/prod/auth_management/01-tenants.sql - v2.0

    • Convertido STRING → UUID
    • Agregada columna slug (NOT NULL requerida)
    • Agregadas 7 columnas faltantes
  2. seeds/prod/auth_management/02-auth_providers.sql - v2.0

    • Convertido STRING → ENUM auth_provider
    • Estructura alineada con DDL completo
  3. seeds/prod/educational_content/01-modules.sql - v2.0

    • Convertido STRING → UUID (5 módulos)
    • Agregadas columnas del schema completo
  4. seeds/prod/system_configuration/01-system_settings.sql - v2.0

    • Corregidos nombres: keysetting_key, etc.
    • 7 configuraciones esenciales
  5. seeds/prod/system_configuration/02-feature_flags.sql - v2.0

    • Corregidos nombres: keyfeature_key, etc.
    • 6 feature flags básicos

Ver detalles: REPORTE-CORRECCIONES-CARGA-LIMPIA-2025-11-11.md


Guía de Uso de Scripts (DB-111) NUEVO

Variables de Ambiente Requeridas

# Variable principal (REQUERIDA)
export DATABASE_URL="postgresql://user:password@host:5432/dbname"

# Ejemplo desarrollo local
export DATABASE_URL="postgresql://gamilit_user:gamilit_password@localhost:5432/gamilit_db"

# Ejemplo producción
export DATABASE_URL="postgresql://prod_user:secure_pass@prod-host:5432/gamilit_prod"

Workflow Recomendado

1. Primera Instalación (Base de Datos Nueva)

# 1. Configurar variable de ambiente
export DATABASE_URL="postgresql://user:pass@localhost:5432/gamilit_db"

# 2. Crear base de datos (si no existe)
createdb gamilit_db

# 3. Ejecutar script de creación
cd apps/database
./create-database.sh

Resultado esperado:

  • 16 fases DDL ejecutadas
  • 32 seeds PROD cargados
  • 0 errores
  • Tiempo: ~30-60 segundos

2. Desarrollo/Testing (Recreación Frecuente)

# Un solo comando que hace todo
export DATABASE_URL="postgresql://user:pass@localhost:5432/gamilit_db"
cd apps/database
./drop-and-recreate-database.sh

Resultado esperado:

  • Base de datos eliminada y recreada
  • DDL completo ejecutado
  • Seeds cargados
  • Tiempo: ~30-60 segundos

3. Validación Post-Carga

# Verificar conteos de objetos
psql "$DATABASE_URL" -c "SELECT COUNT(*) FROM pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema');"

# Verificar seeds cargados
psql "$DATABASE_URL" -c "SELECT COUNT(*) FROM auth_management.profiles;"
psql "$DATABASE_URL" -c "SELECT COUNT(*) FROM educational_content.modules;"

Resultado esperado:

  • ~99 tablas
  • 26 perfiles
  • 5 módulos

Orden de Ejecución de Seeds (Importante)

Los seeds se ejecutan en orden de dependencias:

1. audit_logging (sin dependencias)
2. system_configuration (sin dependencias)
3. auth_management/tenants
4. auth_management/auth_providers
5. auth/users
6. auth_management/profiles (depende de users)
7. content_management (depende de users, tenants)
8. social_features (depende de users, profiles)
9. educational_content (depende de tenants)
10. progress_tracking (depende de educational_content, users)
11. lti_integration (depende de system_configuration)
12. gamification_system (depende de users)

⚠️ No ejecutar seeds individualmente fuera de orden

Verificación de Integridad

# Verificar que todos los schemas existen
psql "$DATABASE_URL" << EOF
SELECT nspname FROM pg_namespace
WHERE nspname IN (
  'auth', 'auth_management', 'content_management',
  'educational_content', 'gamification_system', 'progress_tracking',
  'social_features', 'audit_logging', 'system_configuration',
  'lti_integration', 'admin_dashboard', 'storage', 'gamilit'
) ORDER BY nspname;
EOF

Resultado esperado: 13 schemas listados

Script de Validación Exhaustiva

Para validar la integridad completa de la base de datos (útil después de migraciones o cambios):

# Ejecutar validación exhaustiva
cd apps/database
python3 scripts/validate_integrity.py

Características del script:

  • Valida que todas las Foreign Keys apunten a tablas existentes
  • Verifica que todos los ENUMs usados en tablas estén definidos
  • Detecta funciones con referencias a tablas inexistentes
  • Valida que triggers llamen a funciones válidas
  • Identifica ENUMs duplicados en diferentes schemas
  • Reporta problemas por severidad (CRÍTICO, ALTO, MEDIO, BAJO)

Uso recomendado:

  • Después de aplicar migraciones
  • Antes de despliegues a producción
  • Para diagnóstico de problemas de integridad referencial

Ubicación: apps/database/scripts/validate_integrity.py

Troubleshooting

Error: "password authentication failed"

# Verificar que DATABASE_URL es correcta
echo $DATABASE_URL

# Verificar que PostgreSQL acepta la autenticación
psql -h localhost -U gamilit_user -d postgres -c "SELECT 1;"

# Si falla, revisar pg_hba.conf
# Debe tener: host all all 127.0.0.1/32 md5

Error: "database already exists"

# Opción 1: Usar drop-and-recreate-database.sh
./drop-and-recreate-database.sh

# Opción 2: Drop manual + create
psql -h localhost -U postgres -c "DROP DATABASE IF EXISTS gamilit_db;"
./create-database.sh

Error: "psql: command not found"

# Ubuntu/Debian
sudo apt-get install postgresql-client

# macOS
brew install postgresql

Error: "connection refused"

# Verificar PostgreSQL está corriendo
sudo systemctl status postgresql  # Linux
brew services list                # macOS

# Verificar DATABASE_URL
echo $DATABASE_URL

Ver logs de creación

Cada ejecución de create-database.sh genera un log:

cat apps/database/create-database-YYYYMMDD_HHMMSS.log

Mantenimiento

  • Backups: Los scripts de backup están en orchestration/06-respaldos/
  • Validaciones: Scripts de validación en scripts/inventory/
  • Correcciones: Scripts de corrección en orchestration/scripts-correccion/database/

Soporte

Para problemas o preguntas:

  1. Revisar este README y los logs
  2. Consultar documentación en docs/90-transversal/inventarios-database/
  3. Revisar scripts específicos en scripts/README.md

Historial de Cambios Recientes

2025-11-24 - Correcciones Críticas + Documentación

Funciones Corregidas:

  • initialize_user_stats() - 5 bug fixes críticos (ver CHANGELOG.md)
    • BUG FIX #1: Agregada inicialización de module_progress (CRÍTICO)
    • BUG FIX #2: Corrección de errores de clave duplicada en user_ranks
    • BUG FIX #3: Comentada función no implementada
    • Documentación de FKs clarificada

Documentación Creada:

  • docs/database/CHANGELOG.md - Historial de cambios de BD
  • ddl/schemas/gamilit/functions/README.md - Documentación de 16 funciones
  • README.md actualizado - Flujo de registro de usuario documentado

Validación:

  • Carga limpia exitosa (34 segundos)
  • Tests de integración: 100% pasados
  • Documentación 100% sincronizada con código

2025-11-11 - Validación Completa + Seeds 100% v2.3.7 - DB-111

Ver secciones anteriores para detalles de DB-111, DB-100, DB-099, etc.


Última actualización: 2025-11-24 (Correcciones Críticas + Documentación Completa) Versión del proyecto: 2.5.2