codigo0/docs/FASE_2_ESTADO_ACTUAL.md

174 lines
5.7 KiB
Markdown

# FASE 2: BACKEND Y BASE DE DATOS - ESTADO ACTUAL
## ✅ Implementado
### Backend Express.js
- **Servidor** configurado en `backend/src/index.js`
- **Rutas API** completas:
- `/api/auth` - Autenticación JWT
- `/api/content` - CRUD de contenido
- `/api/drugs` - CRUD de fármacos
- `/api/media` - Gestión de recursos multimedia
- `/api/content-pack` - Generación y entrega de Content Pack
- `/api/scorm` - Generación de paquetes SCORM
- `/api/validation` - Sistema de validación de contenido
- `/api/stats` - Estadísticas
- **Middleware** de autenticación y permisos
- **CORS** configurado para múltiples orígenes
### Content Pack Generator
- **Clase `ContentPackGenerator`** en `backend/src/services/pack-generator.js`
- **Métodos implementados**:
- `generatePack()` - Genera el pack completo
- `loadPublishedContent()` - Carga desde `tes_content.content_items`
- `loadPublishedDrugs()` - Carga desde `tes_content.drugs`
- `loadMediaResources()` - Carga recursos multimedia asociados
- `calculateHash()` - Calcula SHA-256 del pack
- **Endpoint público**: `/api/content-pack/latest.json`
### Base de Datos
- **Migraciones**:
- `001_create_auth_schema.sql` - Schema `emerges_content` + tabla `users`
- `002_create_drugs_schema.sql` - Schema `tes_content` + tabla `drugs`
- **Configuración** en `backend/config/database.js`
- **Pool de conexiones** PostgreSQL configurado
### Modelos
- **Drug.js** - Modelo completo con validación y versionado
## ⚠️ Problemas Detectados
### 1. Inconsistencia de Schemas
- **Content Pack Generator** busca: `tes_content.content_items`
- **Migración raíz** (`database/migrations/001_create_schema.sql`) crea: `emerges_content.content_items`
- **Migración drugs** crea: `tes_content.drugs`
**Solución necesaria**:
- Verificar qué schema se está usando realmente
- Unificar a un solo schema (`tes_content` recomendado)
- O ajustar el Content Pack Generator para usar el schema correcto
### 2. Tabla `content_items` No Creada en Backend
- Las migraciones en `backend/database/migrations/` no crean `tes_content.content_items`
- Solo existe la migración en `database/migrations/001_create_schema.sql` que crea `emerges_content.content_items`
**Solución necesaria**:
- Crear migración en `backend/database/migrations/` para `tes_content.content_items`
- O migrar datos desde `emerges_content` a `tes_content`
- O ajustar Content Pack Generator para usar `emerges_content`
## 📋 Tareas Pendientes
### Alta Prioridad
1. **Resolver inconsistencia de schemas**
- Decidir: `tes_content` vs `emerges_content`
- Crear migración unificada
- Actualizar Content Pack Generator si es necesario
2. **Verificar conexión a BD**
- Probar conexión con `.env` configurado
- Verificar que las migraciones se ejecutaron
3. **Crear tabla `content_items` en schema correcto**
- Si usamos `tes_content`: crear migración `003_create_content_items.sql`
- Si usamos `emerges_content`: ajustar Content Pack Generator
4. **Migrar datos iniciales**
- Protocolos desde `src/data/procedures.ts`
- Fármacos (ya hay seed script)
- Guías si aplica
### Media Prioridad
5. **Probar Content Pack Generator**
- Generar pack manualmente
- Verificar formato JSON correcto
- Verificar que incluye protocolos, fármacos y guías
6. **Probar endpoint `/api/content-pack/latest.json`**
- Verificar que responde correctamente
- Verificar headers de cache
- Verificar formato JSON
7. **Integrar con Frontend**
- Verificar que `ExternalContentAdapter` carga el pack
- Probar fallback cuando backend no está disponible
- Verificar cache en localStorage
## 🎯 Plan de Acción Inmediato
### Paso 1: Resolver Schema
```sql
-- Opción A: Usar tes_content (recomendado)
-- Crear migración: backend/database/migrations/003_create_content_items.sql
CREATE SCHEMA IF NOT EXISTS tes_content;
-- Copiar estructura de emerges_content.content_items a tes_content.content_items
-- Opción B: Usar emerges_content
-- Actualizar pack-generator.js para usar emerges_content.content_items
```
### Paso 2: Verificar BD
```bash
cd backend
node -e "import('./config/database.js').then(m => m.testConnection())"
```
### Paso 3: Ejecutar Migraciones
```bash
# Verificar qué migraciones faltan
psql -U emerges_tes_user -d emerges_tes_db -c "\dn"
# Ejecutar migraciones pendientes
psql -U emerges_tes_user -d emerges_tes_db -f backend/database/migrations/003_create_content_items.sql
```
### Paso 4: Migrar Datos
```bash
cd backend
npm run seed:content # Si existe
# O usar scripts de migración
```
### Paso 5: Probar Content Pack
```bash
# Iniciar backend
npm start
# En otra terminal
curl http://localhost:3000/api/content-pack/latest.json | jq '.metadata'
```
## 📊 Estado de Integración
| Componente | Estado | Notas |
|------------|--------|-------|
| Backend Express | ✅ Completo | Todas las rutas implementadas |
| Content Pack Generator | ⚠️ Parcial | Funciona pero necesita schema correcto |
| Base de Datos | ⚠️ Parcial | Migraciones incompletas |
| Endpoint Content Pack | ✅ Implementado | `/api/content-pack/latest.json` |
| Frontend Integration | ⏳ Pendiente | ExternalContentAdapter listo pero no probado |
| Datos Iniciales | ⏳ Pendiente | Necesita migración desde `src/data/` |
## 🔧 Comandos Útiles
```bash
# Verificar conexión BD
cd backend && node -e "import('./config/database.js').then(m => m.testConnection())"
# Iniciar backend
cd backend && npm start
# Probar endpoint
curl http://localhost:3000/api/content-pack/latest.json
# Ver logs
cd backend && npm start 2>&1 | grep -i "content\|pack\|error"
```
---
**Última actualización**: 2025-01-07
**Estado**: ⚠️ En progreso - Necesita resolución de schema
**Prioridad**: Alta