- Configure workspace Git repository with comprehensive .gitignore - Add Odoo as submodule for ERP reference code - Include documentation: SETUP.md, GIT-STRUCTURE.md - Add gitignore templates for projects (backend, frontend, database) - Structure supports independent repos per project/subproject level Workspace includes: - core/ - Reusable patterns, modules, orchestration system - projects/ - Active projects (erp-suite, gamilit, trading-platform, etc.) - knowledge-base/ - Reference code and patterns (includes Odoo submodule) - devtools/ - Development tools and templates - customers/ - Client implementations template 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
413 lines
11 KiB
Markdown
413 lines
11 KiB
Markdown
# Guía: Crear Base de Datos Gamilit
|
|
|
|
**Fecha**: 2025-11-08
|
|
**Versión**: 1.0
|
|
**Estado**: ✅ Listo para usar
|
|
|
|
---
|
|
|
|
## Descripción
|
|
|
|
Este directorio contiene todos los archivos DDL (Data Definition Language) necesarios para crear la base de datos completa de Gamilit desde cero.
|
|
|
|
---
|
|
|
|
## Estructura de Archivos
|
|
|
|
```
|
|
apps/database/
|
|
├── create-database.sh ← Script maestro de creación
|
|
├── 00-prerequisites.sql ← Schemas y ENUMs base
|
|
├── ddl/
|
|
│ └── schemas/
|
|
│ ├── auth/ ← Autenticación Supabase
|
|
│ ├── auth_management/ ← Gestión de usuarios
|
|
│ ├── educational_content/← Contenido educativo
|
|
│ ├── gamification_system/← Sistema de gamificación
|
|
│ ├── progress_tracking/ ← Seguimiento de progreso
|
|
│ ├── social_features/ ← Características sociales
|
|
│ ├── content_management/ ← Gestión de contenido
|
|
│ ├── audit_logging/ ← Auditoría y logs
|
|
│ ├── system_configuration/← Configuración
|
|
│ ├── admin_dashboard/ ← Dashboard administrativo
|
|
│ ├── gamilit/ ← Funciones compartidas
|
|
│ └── storage/ ← Storage Supabase
|
|
└── migrations/ ← Migraciones de BD
|
|
```
|
|
|
|
---
|
|
|
|
## Requisitos Previos
|
|
|
|
### 1. PostgreSQL 14 o superior
|
|
|
|
```bash
|
|
# Verificar versión instalada
|
|
psql --version
|
|
```
|
|
|
|
### 2. Base de datos creada
|
|
|
|
```bash
|
|
# Opción A: Crear base de datos local
|
|
createdb gamilit
|
|
|
|
# Opción B: Usar Supabase
|
|
# (crear proyecto en https://supabase.com)
|
|
```
|
|
|
|
### 3. Variable DATABASE_URL configurada
|
|
|
|
```bash
|
|
# Formato para PostgreSQL local
|
|
export DATABASE_URL="postgresql://usuario:password@localhost:5432/gamilit"
|
|
|
|
# Formato para Supabase
|
|
export DATABASE_URL="postgresql://postgres:[YOUR-PASSWORD]@db.[YOUR-PROJECT-REF].supabase.co:5432/postgres"
|
|
```
|
|
|
|
---
|
|
|
|
## Método 1: Script Automático (Recomendado)
|
|
|
|
### Opción A: Usando variable de entorno
|
|
|
|
```bash
|
|
# 1. Configurar DATABASE_URL
|
|
export DATABASE_URL="postgresql://usuario:password@localhost:5432/gamilit"
|
|
|
|
# 2. Ejecutar script
|
|
cd apps/database
|
|
./create-database.sh
|
|
```
|
|
|
|
### Opción B: Pasando URL como argumento
|
|
|
|
```bash
|
|
cd apps/database
|
|
./create-database.sh "postgresql://usuario:password@localhost:5432/gamilit"
|
|
```
|
|
|
|
### Salida Esperada
|
|
|
|
```
|
|
============================================================================
|
|
INICIO: Creación de Base de Datos Gamilit
|
|
============================================================================
|
|
DATABASE_URL: postgresql://localhost:5432/gamilit
|
|
DDL_DIR: /path/to/ddl
|
|
LOG_FILE: /path/to/create-database-20251108_143022.log
|
|
|
|
✅ Conexión exitosa a la base de datos
|
|
|
|
============================================================================
|
|
FASE 1: PREREQUISITES - Schemas y ENUMs
|
|
============================================================================
|
|
✅ Completado: Crear schemas y ENUMs base
|
|
✅ FASE 1 completada
|
|
|
|
============================================================================
|
|
FASE 2: FUNCIONES COMPARTIDAS
|
|
============================================================================
|
|
✅ Completado: Funciones compartidas (gamilit schema) (13 archivos)
|
|
✅ FASE 2 completada
|
|
|
|
... (continúa con todas las fases)
|
|
|
|
============================================================================
|
|
RESUMEN FINAL
|
|
============================================================================
|
|
Objetos creados:
|
|
- Schemas: 13
|
|
- Tablas: 63
|
|
- ENUMs: 35
|
|
- Funciones: 80
|
|
- Triggers: 45
|
|
|
|
✅ BASE DE DATOS CREADA EXITOSAMENTE
|
|
============================================================================
|
|
|
|
Log completo disponible en: create-database-20251108_143022.log
|
|
```
|
|
|
|
---
|
|
|
|
## Método 2: Paso a Paso Manual
|
|
|
|
### 1. Ejecutar prerequisites
|
|
|
|
```bash
|
|
psql "$DATABASE_URL" -f ddl/00-prerequisites.sql
|
|
```
|
|
|
|
### 2. Ejecutar esquemas en orden
|
|
|
|
```bash
|
|
# Funciones compartidas
|
|
psql "$DATABASE_URL" -f ddl/schemas/gamilit/functions/*.sql
|
|
|
|
# Auth (Supabase)
|
|
psql "$DATABASE_URL" -f ddl/schemas/auth/enums/*.sql
|
|
psql "$DATABASE_URL" -f ddl/schemas/auth/tables/*.sql
|
|
|
|
# Auth Management
|
|
psql "$DATABASE_URL" -f ddl/schemas/auth_management/tables/*.sql
|
|
psql "$DATABASE_URL" -f ddl/schemas/auth_management/triggers/*.sql
|
|
psql "$DATABASE_URL" -f ddl/schemas/auth_management/rls-policies/*.sql
|
|
|
|
# Educational Content
|
|
psql "$DATABASE_URL" -f ddl/schemas/educational_content/tables/*.sql
|
|
psql "$DATABASE_URL" -f ddl/schemas/educational_content/functions/*.sql
|
|
psql "$DATABASE_URL" -f ddl/schemas/educational_content/triggers/*.sql
|
|
|
|
# ... (continuar con otros schemas)
|
|
```
|
|
|
|
---
|
|
|
|
## Método 3: Aplicar Migraciones (Base de Datos Existente)
|
|
|
|
Si ya tienes una base de datos con el schema `public` legacy y quieres migrar a la nueva arquitectura:
|
|
|
|
### 1. Migrar ENUMs de public a schemas correctos
|
|
|
|
```bash
|
|
cd migrations
|
|
|
|
# P1: Alta Prioridad
|
|
psql "$DATABASE_URL" -f 2025-11-08-migrate-auth-provider-enum.sql
|
|
psql "$DATABASE_URL" -f 2025-11-08-migrate-notification-enums.sql
|
|
|
|
# P2: Media Prioridad
|
|
psql "$DATABASE_URL" -f 2025-11-08-migrate-difficulty-level-enum.sql
|
|
psql "$DATABASE_URL" -f 2025-11-08-migrate-content-management-enums.sql
|
|
psql "$DATABASE_URL" -f 2025-11-08-migrate-setting-type-enum.sql
|
|
|
|
# P3: Baja Prioridad (si aplica)
|
|
# ... migraciones adicionales
|
|
```
|
|
|
|
### 2. Aplicar otras migraciones
|
|
|
|
```bash
|
|
psql "$DATABASE_URL" -f 2025-11-08-add-fk-profiles-school.sql
|
|
```
|
|
|
|
---
|
|
|
|
## Orden de Ejecución (Fases)
|
|
|
|
El script `create-database.sh` ejecuta los archivos DDL en este orden:
|
|
|
|
| Fase | Schema | Componentes | Archivos |
|
|
|------|--------|-------------|----------|
|
|
| 1 | prerequisites | Schemas + ENUMs | 1 |
|
|
| 2 | gamilit | Funciones comunes | ~13 |
|
|
| 3 | auth | Tables + Enums | ~5 |
|
|
| 4 | storage | Enums | ~1 |
|
|
| 5 | auth_management | Tables + Functions + Triggers + RLS | ~25 |
|
|
| 6 | educational_content | Tables + Functions + Triggers + RLS | ~50 |
|
|
| 7 | gamification_system | Tables + Functions + Triggers + Views + RLS | ~55 |
|
|
| 8 | progress_tracking | Tables + Functions + Triggers + Views + RLS | ~25 |
|
|
| 9 | social_features | Tables + Functions + Triggers + RLS | ~20 |
|
|
| 10 | content_management | Tables + Triggers + RLS | ~10 |
|
|
| 11 | audit_logging | Tables + Functions + Triggers + RLS | ~15 |
|
|
| 12 | system_configuration | Tables + Triggers + RLS | ~3 |
|
|
| 13 | admin_dashboard | Views | ~1 |
|
|
|
|
**Total**: ~225 archivos DDL
|
|
|
|
---
|
|
|
|
## Verificación Post-Creación
|
|
|
|
### 1. Verificar schemas creados
|
|
|
|
```sql
|
|
SELECT schema_name
|
|
FROM information_schema.schemata
|
|
WHERE schema_name NOT IN ('pg_catalog', 'information_schema', 'pg_toast')
|
|
ORDER BY schema_name;
|
|
```
|
|
|
|
**Resultado esperado**: 13 schemas
|
|
|
|
### 2. Verificar tablas creadas
|
|
|
|
```sql
|
|
SELECT
|
|
table_schema,
|
|
COUNT(*) as table_count
|
|
FROM information_schema.tables
|
|
WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
|
|
GROUP BY table_schema
|
|
ORDER BY table_schema;
|
|
```
|
|
|
|
**Resultado esperado**: ~63 tablas distribuidas en los schemas
|
|
|
|
### 3. Verificar ENUMs creados
|
|
|
|
```sql
|
|
SELECT
|
|
n.nspname as schema,
|
|
t.typname as enum_name,
|
|
COUNT(e.enumlabel) as value_count
|
|
FROM pg_type t
|
|
JOIN pg_namespace n ON t.typnamespace = n.oid
|
|
LEFT JOIN pg_enum e ON t.oid = e.enumtypid
|
|
WHERE t.typcategory = 'E'
|
|
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
|
|
GROUP BY n.nspname, t.typname
|
|
ORDER BY n.nspname, t.typname;
|
|
```
|
|
|
|
**Resultado esperado**: 35 ENUMs distribuidos en los schemas
|
|
|
|
### 4. Verificar funciones creadas
|
|
|
|
```sql
|
|
SELECT
|
|
n.nspname as schema,
|
|
COUNT(*) as function_count
|
|
FROM pg_proc p
|
|
JOIN pg_namespace n ON p.pronamespace = n.oid
|
|
WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
|
|
GROUP BY n.nspname
|
|
ORDER BY n.nspname;
|
|
```
|
|
|
|
**Resultado esperado**: ~80 funciones distribuidas en los schemas
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Error: "psql: command not found"
|
|
|
|
```bash
|
|
# Ubuntu/Debian
|
|
sudo apt-get install postgresql-client
|
|
|
|
# macOS
|
|
brew install postgresql
|
|
|
|
# Windows
|
|
# Descargar desde https://www.postgresql.org/download/windows/
|
|
```
|
|
|
|
### Error: "connection refused"
|
|
|
|
```bash
|
|
# Verificar que PostgreSQL esté corriendo
|
|
sudo systemctl status postgresql # Linux
|
|
brew services list # macOS
|
|
|
|
# Verificar la URL de conexión
|
|
echo $DATABASE_URL
|
|
```
|
|
|
|
### Error: "permission denied"
|
|
|
|
```bash
|
|
# Asegurarse de tener permisos de superusuario
|
|
psql "$DATABASE_URL" -c "SELECT current_user, current_database();"
|
|
|
|
# Si es necesario, conectarse como superusuario
|
|
export DATABASE_URL="postgresql://postgres:password@localhost:5432/gamilit"
|
|
```
|
|
|
|
### Error: "duplicate key value violates unique constraint"
|
|
|
|
```bash
|
|
# La base de datos ya tiene datos
|
|
# Opción 1: Borrar y recrear
|
|
dropdb gamilit && createdb gamilit
|
|
|
|
# Opción 2: Usar migraciones en lugar de create-database.sh
|
|
cd migrations
|
|
psql "$DATABASE_URL" -f [migration-file].sql
|
|
```
|
|
|
|
### Error en fase específica
|
|
|
|
```bash
|
|
# Revisar el log generado
|
|
cat apps/database/create-database-YYYYMMDD_HHMMSS.log
|
|
|
|
# Ejecutar manualmente la fase que falló
|
|
psql "$DATABASE_URL" -f ddl/schemas/[schema]/[type]/[file].sql
|
|
```
|
|
|
|
---
|
|
|
|
## Logs y Depuración
|
|
|
|
### Ubicación de logs
|
|
|
|
Cada ejecución de `create-database.sh` genera un log con timestamp:
|
|
|
|
```
|
|
apps/database/create-database-20251108_143022.log
|
|
```
|
|
|
|
### Contenido del log
|
|
|
|
- Timestamp de cada operación
|
|
- Archivos ejecutados
|
|
- Errores de PostgreSQL
|
|
- Warnings y notices
|
|
- Resumen de objetos creados
|
|
|
|
### Ver log en tiempo real
|
|
|
|
```bash
|
|
tail -f create-database-*.log
|
|
```
|
|
|
|
---
|
|
|
|
## Siguientes Pasos
|
|
|
|
Después de crear la base de datos:
|
|
|
|
1. **Verificar integridad**: Ejecutar queries de verificación
|
|
2. **Aplicar datos semilla** (si existen): `psql "$DATABASE_URL" -f seed-data.sql`
|
|
3. **Configurar backend**: Actualizar `.env` con DATABASE_URL
|
|
4. **Ejecutar migraciones**: Si hay migraciones pendientes
|
|
5. **Testing**: Ejecutar tests de integración del backend
|
|
|
|
---
|
|
|
|
## Scripts Relacionados
|
|
|
|
- `create-database.sh` - Script maestro de creación
|
|
- `migrations/*.sql` - Migraciones individuales
|
|
- `seed-data.sql` - Datos iniciales (si existe)
|
|
- `backup-database.sh` - Backup de base de datos (si existe)
|
|
- `reset-database.sh` - Resetear base de datos (si existe)
|
|
|
|
---
|
|
|
|
## Documentación Adicional
|
|
|
|
- `REPORTE-COMPLETITUD-DDL-2025-11-08.md` - Inventario completo de archivos DDL
|
|
- `PLAN-MIGRACION-ENUMS-PUBLIC-SCHEMA.md` - Plan de migración de ENUMs
|
|
- `REPORTE-MIGRACION-ENUMS-2025-11-08.md` - Reporte de migración de ENUMs
|
|
- `docs/02-especificaciones-tecnicas/arquitectura-base-datos/` - Documentación técnica
|
|
|
|
---
|
|
|
|
## Contacto y Soporte
|
|
|
|
Para problemas o preguntas:
|
|
1. Revisar este README y los logs
|
|
2. Consultar documentación en `docs/`
|
|
3. Crear issue en el repositorio del proyecto
|
|
|
|
---
|
|
|
|
**Documento creado**: 2025-11-08
|
|
**Última actualización**: 2025-11-08
|
|
**Versión del script**: 1.0
|