216 lines
5.5 KiB
Markdown
216 lines
5.5 KiB
Markdown
|
|
# 🔄 MIGRACIÓN DE CONTENIDO: APP → BACKEND
|
||
|
|
|
||
|
|
**Fecha:** 2025-01-06
|
||
|
|
**Problema:** El contenido real de la app no está en el backend
|
||
|
|
**Solución:** Script de migración
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ❓ ¿POR QUÉ NO VES EL CONTENIDO ACTUAL EN EL BACKEND?
|
||
|
|
|
||
|
|
### Situación Actual
|
||
|
|
|
||
|
|
**En la App (Frontend):**
|
||
|
|
- ✅ `src/data/procedures.ts` - **5 procedimientos** (RCP Adulto SVB, RCP Adulto SVA, RCP Pediátrico, OVACE, Shock Hemorrágico)
|
||
|
|
- ✅ `src/data/drugs.ts` - **6 fármacos** (Oxígeno, Adrenalina, Amiodarona, Atropina, Midazolam, Salbutamol)
|
||
|
|
|
||
|
|
**En el Backend:**
|
||
|
|
- ❌ Solo contenido de ejemplo (checklists de prueba)
|
||
|
|
- ❌ **NO tiene** los procedimientos reales
|
||
|
|
- ❌ **NO tiene** los fármacos reales
|
||
|
|
|
||
|
|
### Razón
|
||
|
|
|
||
|
|
El backend fue diseñado con un **schema nuevo** (`tes_content`) que es diferente a la estructura actual de la app. El contenido de la app vive en archivos TypeScript (`procedures.ts`, `drugs.ts`) y **nunca se migró** al backend.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✅ SOLUCIÓN: SCRIPT DE MIGRACIÓN
|
||
|
|
|
||
|
|
He creado un script que:
|
||
|
|
1. ✅ Lee el contenido de `src/data/procedures.ts` y `src/data/drugs.ts`
|
||
|
|
2. ✅ Lo transforma al formato del schema `tes_content`
|
||
|
|
3. ✅ Lo inserta en la base de datos PostgreSQL
|
||
|
|
4. ✅ Marca todo como `published` para que esté disponible
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚀 CÓMO EJECUTAR LA MIGRACIÓN
|
||
|
|
|
||
|
|
### Paso 1: Verificar que el schema existe
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd backend
|
||
|
|
node scripts/create-auth-tables.js
|
||
|
|
```
|
||
|
|
|
||
|
|
### Paso 2: Ejecutar el script de migración
|
||
|
|
|
||
|
|
```bash
|
||
|
|
cd backend
|
||
|
|
node scripts/migrate-app-content-v2.js
|
||
|
|
```
|
||
|
|
|
||
|
|
**Salida esperada:**
|
||
|
|
```
|
||
|
|
🔄 Iniciando migración de contenido de la app al backend...
|
||
|
|
|
||
|
|
✅ Conexión a base de datos establecida
|
||
|
|
|
||
|
|
✅ Usuario admin encontrado: [uuid]
|
||
|
|
|
||
|
|
📋 Cargando procedimientos...
|
||
|
|
Encontrados 5 procedimientos
|
||
|
|
|
||
|
|
💾 Migrando procedimientos a la base de datos...
|
||
|
|
✅ rcp-adulto-svb: RCP Adulto - Soporte Vital Básico
|
||
|
|
✅ rcp-adulto-sva: RCP Adulto - Soporte Vital Avanzado
|
||
|
|
✅ rcp-pediatrico: RCP Pediátrico - SVB
|
||
|
|
✅ obstruccion-via-aerea: Obstrucción de Vía Aérea - OVACE
|
||
|
|
✅ shock-hemorragico: Shock Hemorrágico
|
||
|
|
|
||
|
|
💊 Cargando fármacos...
|
||
|
|
Encontrados 6 fármacos
|
||
|
|
|
||
|
|
💾 Migrando fármacos a la base de datos...
|
||
|
|
✅ oxigeno: Oxígeno (O₂)
|
||
|
|
✅ adrenalina: Adrenalina (Epinefrina)
|
||
|
|
✅ amiodarona: Amiodarona
|
||
|
|
✅ atropina: Atropina
|
||
|
|
✅ midazolam: Midazolam
|
||
|
|
✅ salbutamol: Salbutamol
|
||
|
|
|
||
|
|
📊 Resumen de migración:
|
||
|
|
protocol: 5 total, 5 publicados
|
||
|
|
drug: 6 total, 6 publicados
|
||
|
|
|
||
|
|
✅ Migración completada exitosamente!
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔍 VERIFICAR QUE LA MIGRACIÓN FUNCIONÓ
|
||
|
|
|
||
|
|
### Opción 1: Consulta SQL directa
|
||
|
|
|
||
|
|
```sql
|
||
|
|
-- Ver procedimientos migrados
|
||
|
|
SELECT
|
||
|
|
slug,
|
||
|
|
title,
|
||
|
|
status,
|
||
|
|
priority,
|
||
|
|
clinical_context
|
||
|
|
FROM tes_content.content_items
|
||
|
|
WHERE type = 'protocol'
|
||
|
|
ORDER BY priority, title;
|
||
|
|
|
||
|
|
-- Ver fármacos migrados
|
||
|
|
SELECT
|
||
|
|
slug,
|
||
|
|
title,
|
||
|
|
status,
|
||
|
|
priority
|
||
|
|
FROM tes_content.content_items
|
||
|
|
WHERE type = 'drug'
|
||
|
|
ORDER BY title;
|
||
|
|
```
|
||
|
|
|
||
|
|
### Opción 2: Desde el Panel Admin
|
||
|
|
|
||
|
|
1. Accede al panel admin: `http://localhost:5174`
|
||
|
|
2. Ve a "Contenido" → "Protocolos"
|
||
|
|
3. Deberías ver los 5 procedimientos
|
||
|
|
4. Ve a "Contenido" → "Fármacos"
|
||
|
|
5. Deberías ver los 6 fármacos
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📊 CONTENIDO QUE SE MIGRA
|
||
|
|
|
||
|
|
### Procedimientos (5)
|
||
|
|
|
||
|
|
| Slug | Título | Prioridad | Contexto Clínico |
|
||
|
|
|------|--------|-----------|------------------|
|
||
|
|
| `rcp-adulto-svb` | RCP Adulto - Soporte Vital Básico | Crítica | RCP |
|
||
|
|
| `rcp-adulto-sva` | RCP Adulto - Soporte Vital Avanzado | Crítica | RCP |
|
||
|
|
| `rcp-pediatrico` | RCP Pediátrico - SVB | Crítica | RCP |
|
||
|
|
| `obstruccion-via-aerea` | Obstrucción de Vía Aérea - OVACE | Crítica | VIA_AEREA |
|
||
|
|
| `shock-hemorragico` | Shock Hemorrágico | Crítica | SHOCK |
|
||
|
|
|
||
|
|
### Fármacos (6)
|
||
|
|
|
||
|
|
| Slug | Nombre Genérico | Categoría |
|
||
|
|
|------|-----------------|-----------|
|
||
|
|
| `oxigeno` | Oxígeno (O₂) | Oxigenoterapia |
|
||
|
|
| `adrenalina` | Adrenalina (Epinefrina) | Cardiovascular |
|
||
|
|
| `amiodarona` | Amiodarona | Cardiovascular |
|
||
|
|
| `atropina` | Atropina | Cardiovascular |
|
||
|
|
| `midazolam` | Midazolam | Neurológico |
|
||
|
|
| `salbutamol` | Salbutamol | Respiratorio |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔄 RE-MIGRACIÓN (Si necesitas actualizar)
|
||
|
|
|
||
|
|
El script usa `ON CONFLICT (slug) DO UPDATE`, así que puedes ejecutarlo múltiples veces:
|
||
|
|
|
||
|
|
- ✅ Si el contenido ya existe, se **actualiza**
|
||
|
|
- ✅ Si no existe, se **crea**
|
||
|
|
- ✅ No duplica contenido
|
||
|
|
|
||
|
|
**Ejecutar de nuevo:**
|
||
|
|
```bash
|
||
|
|
cd backend
|
||
|
|
node scripts/migrate-app-content-v2.js
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ⚠️ NOTAS IMPORTANTES
|
||
|
|
|
||
|
|
1. **No modifica la app:** El script solo lee de `procedures.ts` y `drugs.ts`, no los modifica
|
||
|
|
2. **Estado inicial:** Todo se migra como `published` para que esté disponible inmediatamente
|
||
|
|
3. **Versión:** Todo se migra como versión `1.0.0`
|
||
|
|
4. **Admin requerido:** Necesitas tener un usuario admin creado (ejecuta `seed-admin.js` primero)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🐛 SOLUCIÓN DE PROBLEMAS
|
||
|
|
|
||
|
|
### Error: "No se encontró usuario admin"
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Crear usuario admin primero
|
||
|
|
cd backend
|
||
|
|
node scripts/seed-admin.js
|
||
|
|
```
|
||
|
|
|
||
|
|
### Error: "Schema tes_content no existe"
|
||
|
|
|
||
|
|
```bash
|
||
|
|
# Crear schema primero
|
||
|
|
cd backend
|
||
|
|
node scripts/create-auth-tables.js
|
||
|
|
```
|
||
|
|
|
||
|
|
### Error: "No se pudo importar directamente"
|
||
|
|
|
||
|
|
El script tiene un **fallback con datos hardcodeados**. Si no puede leer los archivos TypeScript, usará datos de ejemplo. Esto es normal si hay problemas con imports dinámicos.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📝 PRÓXIMOS PASOS
|
||
|
|
|
||
|
|
Después de migrar:
|
||
|
|
|
||
|
|
1. ✅ Verificar contenido en panel admin
|
||
|
|
2. ✅ Probar endpoints API: `GET /api/content/protocol/:slug`
|
||
|
|
3. ✅ Generar Content Pack: `POST /api/admin/pack/generate`
|
||
|
|
4. ✅ Integrar en app (FASE 2 del plan técnico)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Fin del Documento**
|
||
|
|
|