- 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>
9.3 KiB
Scripts de Base de Datos GAMILIT
Scripts para gestionar la base de datos gamilit_platform en ambientes dev y prod.
📦 Scripts Disponibles
1. init-database.sh - Inicialización Completa
Crea usuario + BD + DDL + seeds
# Modo interactivo
./init-database.sh
# Desarrollo
./init-database.sh --env dev
# Producción
./init-database.sh --env prod
# Con password personalizado
./init-database.sh --env dev --password "mi_password_seguro"
# Sin confirmación
./init-database.sh --env dev --force
¿Qué hace?
- ✅ Crea usuario
gamilit_user(si no existe) - ✅ Crea base de datos
gamilit_platform - ✅ Ejecuta todos los DDL (9 schemas, ~48 tablas)
- ✅ Carga 32 archivos de seeds (10,525 líneas SQL)
- ✅ Valida instalación
- ✅ Guarda credenciales en archivo
Resultado: Base de datos funcional al 100%
2. recreate-database.sh - Recreación Completa
Elimina usuario + BD, luego recrea todo
⚠️ DESTRUYE TODOS LOS DATOS Y ELIMINA USUARIO
# Modo interactivo
./recreate-database.sh
# Desarrollo
./recreate-database.sh --env dev
# Sin confirmación (peligroso)
./recreate-database.sh --env dev --force
¿Qué hace?
- ⚠️ Termina conexiones activas
- ⚠️ Elimina completamente la BD
gamilit_platform - ⚠️ Elimina el usuario
gamilit_user - ✅ Ejecuta
init-database.shpara recrear todo
Cuándo usar:
- Desarrollo y testing
- Resolver conflictos graves de migración
- Resetear COMPLETAMENTE el ambiente
- NO usar en producción con datos reales
3. reset-database.sh - Reset de BD (Mantiene Usuario)
Elimina solo la BD, mantiene el usuario
⚠️ Elimina datos pero NO el usuario
# Modo interactivo (pedirá password)
./reset-database.sh
# Desarrollo con password
./reset-database.sh --env dev --password "mi_password"
# Producción
./reset-database.sh --env prod --password "prod_pass"
# Sin confirmación
./reset-database.sh --env dev --password "pass" --force
¿Qué hace?
- ⚠️ Elimina la BD
gamilit_platform - ✅ Mantiene el usuario
gamilit_user - ✅ Recrea BD con DDL y seeds
Cuándo usar:
- Usuario ya existe con password conocido
- Resetear datos sin tocar configuración de usuario
- Ambientes donde el usuario tiene permisos específicos
- Cuando NO quieres regenerar password
🚀 Guía Rápida
Primera Instalación
cd /apps/database/scripts
# Crear todo desde cero
./init-database.sh --env dev
# Ver credenciales generadas
cat ../database-credentials-dev.txt
Resetear Durante Desarrollo
# Opción 1: Recrear TODO (incluyendo usuario)
./recreate-database.sh --env dev --force
# Opción 2: Solo resetear BD (mantener usuario)
./reset-database.sh --env dev --password "tu_password" --force
Producción
# Primera vez
./init-database.sh --env prod
# Reset (si es necesario, con precaución)
./reset-database.sh --env prod --password "prod_password"
📊 Comparación de Scripts
| Script | Elimina Usuario | Elimina BD | Crea Usuario | Crea BD | Requiere Password |
|---|---|---|---|---|---|
init-database.sh |
❌ | ⚠️ Si existe | ✅ Si no existe | ✅ | ❌ (genera automático) |
recreate-database.sh |
✅ | ✅ | ✅ | ✅ | ❌ (genera automático) |
reset-database.sh |
❌ | ✅ | ❌ | ✅ | ✅ (requerido) |
🎯 Casos de Uso
Caso 1: Primera Instalación en Servidor Nuevo
./init-database.sh --env prod
- No hay usuario ni BD
- Script crea todo desde cero
- Genera credenciales seguras
Caso 2: Desarrollo - Resetear con Cambios en DDL
./recreate-database.sh --env dev --force
- Elimina todo y recrea
- Útil cuando hay cambios estructurales
- No importa perder el usuario/password
Caso 3: Producción - Resetear Solo Datos
./reset-database.sh --env prod --password "password_conocido"
- Mantiene usuario con permisos configurados
- Solo resetea datos
- No regenera credenciales
Caso 4: Testing - Datos Limpios Cada Test
# En script de CI/CD
./recreate-database.sh --env dev --force
# O
./reset-database.sh --env dev --password "$DB_PASSWORD" --force
📁 Archivos Generados
Después de ejecutar los scripts:
database-credentials-{env}.txt
GAMILIT Platform - Database Credentials
Environment: dev
Generated: 2025-11-02
========================================
Host: localhost:5432
Database: gamilit_platform
User: gamilit_user
Password: AbCdEf123456...
Connection String:
postgresql://gamilit_user:AbCdEf123456...@localhost:5432/gamilit_platform
Ubicación: /apps/database/database-credentials-{env}.txt
⚙️ Variables de Entorno
Los scripts usan estas configuraciones:
DB_NAME="gamilit_platform" # Nombre fijo de la BD
DB_USER="gamilit_user" # Usuario fijo
DB_HOST="localhost" # Host por defecto
DB_PORT="5432" # Puerto por defecto
POSTGRES_USER="postgres" # Usuario admin de PostgreSQL
Para cambiar estos valores, edita los scripts.
🔧 Prerequisitos
Software Requerido
# PostgreSQL 14+
postgres --version
# psql client
psql --version
# openssl (para generar passwords)
openssl version
# Permisos: sudo para postgres O password del usuario postgres
sudo -u postgres psql -c "SELECT 1"
Estructura Requerida
Los scripts asumen esta estructura:
/apps/database/
├── ddl/
│ └── schemas/
│ ├── auth/tables/
│ ├── auth_management/tables/
│ ├── gamification_system/enums/
│ ├── gamification_system/tables/
│ └── ... (9 schemas total)
└── seeds/
└── dev/
├── auth/
├── auth_management/
├── gamification_system/
└── ... (9 schemas total, 32 archivos SQL)
🐛 Troubleshooting
Error: "No se puede conectar a PostgreSQL"
# Verificar que PostgreSQL esté corriendo
sudo systemctl status postgresql
sudo systemctl start postgresql
# Probar conexión
sudo -u postgres psql -c "SELECT 1"
Error: "Usuario gamilit_user no existe" (en reset-database.sh)
# Usar init-database.sh primero para crear el usuario
./init-database.sh --env dev
Error: "Password incorrecto" (en reset-database.sh)
# Ver password guardado
cat ../database-credentials-dev.txt
# O usar recreate-database.sh que no requiere password
./recreate-database.sh --env dev
Error: "Directorio DDL no encontrado"
# Verificar estructura
ls -la /apps/database/ddl/schemas/
ls -la /apps/database/seeds/dev/
# Asegurarse de estar en el directorio correcto
cd /path/to/gamilit/apps/database/scripts
pwd # Debe terminar en /apps/database/scripts
📊 Validación Post-Ejecución
Después de ejecutar cualquier script:
# Conectar a la BD (usa el password del archivo de credenciales)
PGPASSWORD='tu_password' psql -h localhost -U gamilit_user -d gamilit_platform
# Verificar schemas (debe mostrar 9)
\dn
# Contar tablas
SELECT schemaname, COUNT(*)
FROM pg_tables
WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
GROUP BY schemaname;
# Verificar datos
SELECT 'users', COUNT(*) FROM auth.users WHERE deleted_at IS NULL
UNION ALL SELECT 'modules', COUNT(*) FROM educational_content.modules
UNION ALL SELECT 'exercises', COUNT(*) FROM educational_content.exercises;
# Salir
\q
Valores esperados:
- Schemas: 9
- Tablas: ~48
- Usuarios: 5
- Módulos: 8
- Ejercicios: 27
🔒 Seguridad
Passwords Generados
Los scripts init-database.sh y recreate-database.sh generan passwords automáticamente:
openssl rand -base64 32 | tr -d "=+/" | cut -c1-32
- 32 caracteres alfanuméricos
- Sin caracteres especiales problemáticos
- Criptográficamente seguros
Archivos de Credenciales
- Permisos:
600(solo lectura por owner) - NO commitear a git
- Guardar en gestor de contraseñas seguro
📚 Más Información
- DDL Source:
/apps/database/ddl/ - Seeds Source:
/apps/database/seeds/dev/ - DB Docs:
/docs/03-desarrollo/base-de-datos/README.md
💡 Tips
Desarrollo Rápido
# Alias útiles (agregar a ~/.bashrc)
alias db-init='cd /apps/database/scripts && ./init-database.sh --env dev --force'
alias db-reset='cd /apps/database/scripts && ./recreate-database.sh --env dev --force'
alias db-connect='PGPASSWORD=$(grep DB_PASSWORD ../database-credentials-dev.txt | cut -d" " -f2) psql -h localhost -U gamilit_user -d gamilit_platform'
Automatización CI/CD
# En pipeline de CI/CD
cd /apps/database/scripts
# Setup limpio para cada test
./recreate-database.sh --env dev --force
# Ejecutar tests...
# Teardown (opcional)
sudo -u postgres psql -c "DROP DATABASE IF EXISTS gamilit_platform;"
Backup Antes de Reset
# Hacer backup antes de recrear
PGPASSWORD='password' pg_dump -h localhost -U gamilit_user gamilit_platform > backup.sql
# Recrear
./recreate-database.sh --env dev
# Si algo falla, restaurar
PGPASSWORD='password' psql -h localhost -U gamilit_user -d gamilit_platform < backup.sql
Versión: 1.0.0 Última actualización: 2025-11-02 Base de datos: gamilit_platform Schemas: 9 Tablas: ~48 Seeds: 32 archivos (10,525 líneas SQL)