# ✅ CHECKLIST DE IMPLEMENTACIÓN - SERVIDOR DE CONTENIDO **Versión:** 1.0.0 **Fecha:** 2025-01-06 **Estado:** Pendiente de Implementación --- ## 📋 FASES DE IMPLEMENTACIÓN ### FASE 1: Base de Datos (Semana 1-2) #### 1.1 Configuración PostgreSQL - [ ] Instalar PostgreSQL en servidor - [ ] Crear base de datos `emerges_tes` - [ ] Crear usuario con permisos - [ ] Configurar conexión en `config/database.js` #### 1.2 Schema y Tablas - [ ] Ejecutar `docs/SERVER_DATABASE_SCHEMA.sql` - [ ] Verificar schema `tes_content` creado - [ ] Verificar todas las tablas creadas - [ ] Verificar ENUMs creados - [ ] Verificar índices creados - [ ] Verificar triggers funcionando - [ ] Verificar vistas creadas #### 1.3 Datos Iniciales - [ ] Crear usuario administrador - [ ] Migrar contenido inicial (opcional) - [ ] Verificar datos en BD **Archivos:** - `docs/SERVER_DATABASE_SCHEMA.sql` - `backend/config/database.js` --- ### FASE 2: API Pública (Semana 3-4) #### 2.1 Endpoint Health - [ ] `GET /api/health` implementado - [ ] Verifica conexión BD - [ ] Retorna versión pack latest - [ ] Testing completo #### 2.2 Endpoint Content Pack - [ ] `GET /api/content/pack/latest` implementado - [ ] `GET /api/content/pack/:version` implementado - [ ] Soporte `If-None-Match` (304 Not Modified) - [ ] Headers `ETag` y `Cache-Control` - [ ] Testing completo #### 2.3 Endpoints Individuales - [ ] `GET /api/content/protocol/:slug` implementado - [ ] `GET /api/content/guide/:slug` implementado - [ ] Incluye recursos asociados - [ ] Incluye relaciones - [ ] Testing completo #### 2.4 Endpoint Media - [ ] `GET /api/content/media/:id` implementado - [ ] Soporte descarga directa - [ ] Testing completo #### 2.5 Middleware - [ ] CORS configurado (solo dominios permitidos) - [ ] Rate limiting (100 req/min) - [ ] Error handling global - [ ] Logging de requests **Archivos:** - `server/src/api/public/health.js` - `server/src/api/public/content-pack.js` - `server/src/api/public/content.js` - `server/src/middleware/cors.js` - `server/src/middleware/rate-limit.js` --- ### FASE 3: Generador Content Pack (Semana 5) #### 3.1 Servicio Pack Generator - [ ] `pack-generator.js` implementado - [ ] `loadPublishedContent()` funcionando - [ ] `loadMediaResources()` funcionando - [ ] `calculateLinks()` funcionando - [ ] `calculateHash()` funcionando - [ ] `savePack()` funcionando - [ ] `updateLatestSymlink()` funcionando #### 3.2 Testing - [ ] Generar pack de prueba - [ ] Verificar JSON válido - [ ] Verificar hash correcto - [ ] Verificar symlink - [ ] Verificar tamaño razonable **Archivos:** - `server/src/services/pack-generator.js` - `server/storage/packs/` (directorio) --- ### FASE 4: API Admin (Semana 6-7) #### 4.1 Autenticación - [ ] `POST /api/admin/auth/login` implementado - [ ] `GET /api/admin/auth/me` implementado - [ ] JWT funcionando - [ ] Middleware de autenticación - [ ] Testing completo #### 4.2 Endpoints Contenido - [ ] `GET /api/admin/content` (lista con filtros) - [ ] `GET /api/admin/content/:id` (detalle) - [ ] `POST /api/admin/content` (crear) - [ ] `PUT /api/admin/content/:id` (actualizar) - [ ] `DELETE /api/admin/content/:id` (soft delete) - [ ] `POST /api/admin/content/:id/publish` (publicar) - [ ] `POST /api/admin/content/:id/validate` (validar) - [ ] Testing completo #### 4.3 Endpoints Recursos - [ ] `GET /api/admin/media` (lista) - [ ] `POST /api/admin/media/upload` (upload) - [ ] `PUT /api/admin/media/:id` (actualizar) - [ ] `DELETE /api/admin/media/:id` (eliminar) - [ ] `POST /api/admin/media/:id/associate` (asociar) - [ ] Testing completo #### 4.4 Endpoint Pack - [ ] `POST /api/admin/pack/generate` implementado - [ ] `GET /api/admin/pack/versions` implementado - [ ] Testing completo #### 4.5 Middleware Admin - [ ] RBAC implementado - [ ] Rate limiting (50 req/min) - [ ] Audit logging - [ ] Validación de permisos **Archivos:** - `server/src/api/admin/auth.js` - `server/src/api/admin/content.js` - `server/src/api/admin/media.js` - `server/src/api/admin/pack.js` - `server/src/middleware/auth.js` - `server/src/middleware/rbac.js` --- ### FASE 5: Panel Admin (Semana 8-10) #### 5.1 Autenticación UI - [ ] Página de login - [ ] Manejo de token JWT - [ ] Logout - [ ] Protección de rutas #### 5.2 Editor de Contenido - [ ] Editor de protocolos (tabs: básico, pasos, checklist, recursos) - [ ] Editor de guías (8 secciones Markdown) - [ ] Editor de manual - [ ] Editor de fármacos - [ ] Preview "Modo TES" - [ ] Guardado en servidor #### 5.3 Gestor de Recursos - [ ] Lista de recursos con filtros - [ ] Upload de imágenes/vídeos - [ ] Edición de metadatos - [ ] Asociación a contenido - [ ] Visualización de recursos sin asociar #### 5.4 Generador de Pack - [ ] UI para generar pack - [ ] Selección de versión - [ ] Indicador de progreso - [ ] Descarga de pack generado - [ ] Lista de versiones anteriores #### 5.5 Dashboard - [ ] Estadísticas de contenido - [ ] Contenido pendiente de validación - [ ] Recursos sin asociar - [ ] Actividad reciente **Archivos:** - `admin-panel/src/pages/` (ya existe, extender) --- ### FASE 6: Integración App (Semana 11-12) #### 6.1 Content Adapter - [ ] `ContentAdapter` interface definida - [ ] `PackContentAdapter` implementado - [ ] `LocalContentAdapter` (fallback) implementado - [ ] `ContentAdapterFactory` implementado - [ ] Testing completo #### 6.2 Descarga de Pack - [ ] Service Worker descarga pack al iniciar - [ ] Cache en IndexedDB - [ ] Verificación de hash - [ ] Actualización automática - [ ] Fallback a procedures.ts si no hay pack #### 6.3 Integración en App - [ ] Hooks actualizados (useProtocol, useDrug) - [ ] Componentes consumen desde adapter - [ ] Enlaces bidireccionales funcionando - [ ] Testing offline completo **Archivos:** - `src/services/content-pack.ts` (extender) - `src/hooks/useContentPack.ts` (extender) - `src/workers/content-pack-worker.ts` (nuevo) --- ## 🧪 TESTING ### Testing Unitario - [ ] Servicios (pack-generator, content-service) - [ ] Endpoints API (públicos y admin) - [ ] Validaciones - [ ] Cálculo de hash ### Testing Integración - [ ] Flujo completo: crear → validar → publicar → generar pack - [ ] Descarga de pack en app - [ ] Cache offline - [ ] Fallback a local ### Testing de Carga - [ ] API pública (100 req/min) - [ ] API admin (50 req/min) - [ ] Generación de pack (tiempo < 30s) --- ## 📊 MÉTRICAS DE ÉXITO ### Fase 1 (Base de Datos) - ✅ Schema creado sin errores - ✅ Todas las tablas funcionando - ✅ Índices optimizados - ✅ Datos iniciales cargados ### Fase 2 (API Pública) - ✅ Todos los endpoints funcionando - ✅ Rate limiting activo - ✅ CORS configurado - ✅ Respuestas < 200ms ### Fase 3 (Generador Pack) - ✅ Pack generado correctamente - ✅ Hash calculado correctamente - ✅ JSON válido y optimizado - ✅ Tiempo de generación < 30s ### Fase 4 (API Admin) - ✅ Autenticación funcionando - ✅ RBAC funcionando - ✅ CRUD completo - ✅ Audit logging activo ### Fase 5 (Panel Admin) - ✅ Login funcionando - ✅ Editores funcionando - ✅ Upload de recursos funcionando - ✅ Generación de pack desde UI ### Fase 6 (Integración App) - ✅ App descarga pack correctamente - ✅ Cache offline funcionando - ✅ Fallback a local funcionando - ✅ Sin modificar código existente --- ## 🚫 RESTRICCIONES VERIFICADAS - [ ] NO se modificó `src/data/procedures.ts` - [ ] NO se modificó `src/data/drugs.ts` - [ ] NO se modificaron rutas existentes - [ ] NO se modificó Service Worker - [ ] NO se modificaron componentes existentes - [ ] Todo funciona offline-first - [ ] Sin dependencias externas (Supabase, etc.) --- ## 📝 NOTAS DE IMPLEMENTACIÓN **Validador:** _________________ **Fecha:** _________________ **Resultado:** ☐ Aprobado ☐ Pendiente ☐ Rechazado **Comentarios:** ``` [Espacio para comentarios] ``` --- **Fin del Checklist**