260 lines
6.3 KiB
Markdown
260 lines
6.3 KiB
Markdown
|
|
# 📋 RESUMEN EJECUTIVO - ARQUITECTURA SERVIDOR DE CONTENIDO
|
||
|
|
|
||
|
|
**Fecha:** 2025-01-06
|
||
|
|
**Versión:** 1.0.0
|
||
|
|
**Estado:** Diseño Completo - Listo para Implementación
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 DECISIÓN TÉCNICA
|
||
|
|
|
||
|
|
**❌ NO Supabase**
|
||
|
|
**❌ NO servicios externos**
|
||
|
|
**❌ NO CMS externo**
|
||
|
|
**✅ TODO en nuestro servidor**
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🏗️ ARQUITECTURA
|
||
|
|
|
||
|
|
```
|
||
|
|
SERVIDOR PROPIO (PostgreSQL + Node.js)
|
||
|
|
├── Base de Datos (PostgreSQL)
|
||
|
|
├── API REST (Solo lectura para app)
|
||
|
|
├── Panel Admin (React - Puerto 5174)
|
||
|
|
└── Generador Content Pack
|
||
|
|
│
|
||
|
|
│ (Content Pack JSON)
|
||
|
|
▼
|
||
|
|
APP PWA (Frontend)
|
||
|
|
├── Descarga pack al iniciar
|
||
|
|
├── Cache en IndexedDB
|
||
|
|
└── Funciona 100% offline
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📐 COMPONENTES PRINCIPALES
|
||
|
|
|
||
|
|
### 1. Base de Datos (PostgreSQL)
|
||
|
|
|
||
|
|
**Schema:** `tes_content`
|
||
|
|
|
||
|
|
**Tablas:**
|
||
|
|
- `content_items` - Protocolos, guías, manuales, fármacos, checklists
|
||
|
|
- `media_resources` - Imágenes y vídeos
|
||
|
|
- `content_resource_associations` - Asociaciones contenido ⇄ recursos
|
||
|
|
- `content_versions` - Historial de versiones
|
||
|
|
- `audit_logs` - Auditoría completa
|
||
|
|
- `users` - Usuarios del panel admin
|
||
|
|
|
||
|
|
**Archivo:** `docs/SERVER_DATABASE_SCHEMA.sql`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 2. API REST Pública (App)
|
||
|
|
|
||
|
|
**Endpoints (Solo Lectura):**
|
||
|
|
- `GET /api/health` - Estado del servidor
|
||
|
|
- `GET /api/content/pack/latest` - Pack más reciente
|
||
|
|
- `GET /api/content/pack/:version` - Pack específico
|
||
|
|
- `GET /api/content/protocol/:slug` - Protocolo individual
|
||
|
|
- `GET /api/content/guide/:slug` - Guía individual
|
||
|
|
- `GET /api/content/media/:id` - Recurso multimedia
|
||
|
|
|
||
|
|
**Características:**
|
||
|
|
- ✅ Sin autenticación (solo lectura)
|
||
|
|
- ✅ Rate limiting (100 req/min)
|
||
|
|
- ✅ CORS configurado
|
||
|
|
- ✅ Cache headers (ETag, Cache-Control)
|
||
|
|
|
||
|
|
**Archivo:** `docs/API_ENDPOINTS_ESPECIFICACION.md`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 3. API Admin (Panel)
|
||
|
|
|
||
|
|
**Endpoints (Con Autenticación):**
|
||
|
|
- `POST /api/admin/auth/login` - Login
|
||
|
|
- `GET /api/admin/content` - Listar contenido
|
||
|
|
- `POST /api/admin/content` - Crear contenido
|
||
|
|
- `PUT /api/admin/content/:id` - Actualizar
|
||
|
|
- `POST /api/admin/content/:id/publish` - Publicar
|
||
|
|
- `POST /api/admin/media/upload` - Upload recursos
|
||
|
|
- `POST /api/admin/pack/generate` - Generar pack
|
||
|
|
|
||
|
|
**Características:**
|
||
|
|
- ✅ Autenticación JWT
|
||
|
|
- ✅ RBAC (Roles y permisos)
|
||
|
|
- ✅ Rate limiting (50 req/min)
|
||
|
|
- ✅ Audit logging
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 4. Generador Content Pack
|
||
|
|
|
||
|
|
**Funcionalidad:**
|
||
|
|
- Lee contenido publicado desde PostgreSQL
|
||
|
|
- Genera JSON optimizado
|
||
|
|
- Calcula hash SHA-256
|
||
|
|
- Guarda en `/storage/packs/`
|
||
|
|
- Crea symlink `pack-latest.json`
|
||
|
|
|
||
|
|
**Archivo:** `docs/GENERADOR_CONTENT_PACK.md`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### 5. Panel Admin
|
||
|
|
|
||
|
|
**Funcionalidades:**
|
||
|
|
- Editor de protocolos (tabs: básico, pasos, checklist, recursos)
|
||
|
|
- Editor de guías (8 secciones Markdown)
|
||
|
|
- Gestor de recursos (upload, asociación)
|
||
|
|
- Generador de pack (UI)
|
||
|
|
- Dashboard de estado
|
||
|
|
|
||
|
|
**Ubicación:** `admin-panel/` (ya existe, extender)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📦 CONTENT PACK JSON
|
||
|
|
|
||
|
|
**Estructura:**
|
||
|
|
```json
|
||
|
|
{
|
||
|
|
"metadata": { version, hash, total_items, ... },
|
||
|
|
"content": { protocols, guides, manuals, drugs, checklists },
|
||
|
|
"media": { resources, associations },
|
||
|
|
"links": { protocol_to_guide, guide_to_protocol, ... }
|
||
|
|
}
|
||
|
|
```
|
||
|
|
|
||
|
|
**Características:**
|
||
|
|
- ✅ Solo contenido `published`
|
||
|
|
- ✅ Solo última versión
|
||
|
|
- ✅ Hash SHA-256 para verificación
|
||
|
|
- ✅ Optimizado para offline (< 10MB)
|
||
|
|
|
||
|
|
**Archivo:** `docs/CONTENT_PACK_SPEC.md` (ya existe, compatible)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🔄 FLUJO DE TRABAJO
|
||
|
|
|
||
|
|
1. **Editor crea contenido** → Panel Admin → Guarda en PostgreSQL
|
||
|
|
2. **Validador revisa** → Panel Admin → Status: 'approved'
|
||
|
|
3. **Admin publica** → Panel Admin → Status: 'published'
|
||
|
|
4. **Generar pack** → Panel Admin → Genera JSON desde PostgreSQL
|
||
|
|
5. **App consume** → Descarga pack → Cache offline → Funciona sin internet
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📁 ESTRUCTURA DE DIRECTORIOS
|
||
|
|
|
||
|
|
```
|
||
|
|
server/
|
||
|
|
├── config/
|
||
|
|
│ ├── database.js
|
||
|
|
│ └── storage.js
|
||
|
|
├── database/
|
||
|
|
│ └── migrations/
|
||
|
|
│ └── 001_create_schema.sql
|
||
|
|
├── src/
|
||
|
|
│ ├── api/
|
||
|
|
│ │ ├── public/ # Endpoints app
|
||
|
|
│ │ └── admin/ # Endpoints admin
|
||
|
|
│ ├── services/
|
||
|
|
│ │ └── pack-generator.js
|
||
|
|
│ └── middleware/
|
||
|
|
│ ├── auth.js
|
||
|
|
│ └── rbac.js
|
||
|
|
├── storage/
|
||
|
|
│ ├── media/
|
||
|
|
│ │ ├── images/
|
||
|
|
│ │ └── videos/
|
||
|
|
│ └── packs/
|
||
|
|
│ ├── pack-v1.0.0.json
|
||
|
|
│ └── pack-latest.json
|
||
|
|
└── index.js
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## ✅ CHECKLIST DE IMPLEMENTACIÓN
|
||
|
|
|
||
|
|
### Fase 1: Base de Datos (Semana 1-2)
|
||
|
|
- [ ] PostgreSQL instalado
|
||
|
|
- [ ] Schema `tes_content` creado
|
||
|
|
- [ ] Tablas creadas
|
||
|
|
- [ ] Índices creados
|
||
|
|
- [ ] Datos iniciales
|
||
|
|
|
||
|
|
### Fase 2: API Pública (Semana 3-4)
|
||
|
|
- [ ] Endpoints implementados
|
||
|
|
- [ ] Rate limiting
|
||
|
|
- [ ] CORS configurado
|
||
|
|
- [ ] Testing completo
|
||
|
|
|
||
|
|
### Fase 3: Generador Pack (Semana 5)
|
||
|
|
- [ ] Servicio implementado
|
||
|
|
- [ ] Generación funcionando
|
||
|
|
- [ ] Hash calculado
|
||
|
|
- [ ] Testing completo
|
||
|
|
|
||
|
|
### Fase 4: API Admin (Semana 6-7)
|
||
|
|
- [ ] Autenticación
|
||
|
|
- [ ] CRUD contenido
|
||
|
|
- [ ] Gestión recursos
|
||
|
|
- [ ] Generación pack
|
||
|
|
|
||
|
|
### Fase 5: Panel Admin (Semana 8-10)
|
||
|
|
- [ ] Editores funcionando
|
||
|
|
- [ ] Upload recursos
|
||
|
|
- [ ] Generación pack UI
|
||
|
|
- [ ] Dashboard
|
||
|
|
|
||
|
|
### Fase 6: Integración App (Semana 11-12)
|
||
|
|
- [ ] ContentAdapter
|
||
|
|
- [ ] Descarga pack
|
||
|
|
- [ ] Cache offline
|
||
|
|
- [ ] Fallback local
|
||
|
|
|
||
|
|
**Archivo:** `docs/CHECKLIST_IMPLEMENTACION_SERVIDOR.md`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🚫 RESTRICCIONES VERIFICADAS
|
||
|
|
|
||
|
|
- ✅ NO modifica `src/data/procedures.ts`
|
||
|
|
- ✅ NO modifica `src/data/drugs.ts`
|
||
|
|
- ✅ NO modifica rutas existentes
|
||
|
|
- ✅ NO modifica Service Worker
|
||
|
|
- ✅ NO modifica componentes existentes
|
||
|
|
- ✅ Todo en servidor propio
|
||
|
|
- ✅ Sin dependencias externas
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 📚 DOCUMENTACIÓN COMPLETA
|
||
|
|
|
||
|
|
1. **Arquitectura:** `docs/ARQUITECTURA_SERVIDOR_CONTENIDO.md`
|
||
|
|
2. **Schema BD:** `docs/SERVER_DATABASE_SCHEMA.sql`
|
||
|
|
3. **API Endpoints:** `docs/API_ENDPOINTS_ESPECIFICACION.md`
|
||
|
|
4. **Generador Pack:** `docs/GENERADOR_CONTENT_PACK.md`
|
||
|
|
5. **Checklist:** `docs/CHECKLIST_IMPLEMENTACION_SERVIDOR.md`
|
||
|
|
6. **Content Pack Spec:** `docs/CONTENT_PACK_SPEC.md` (ya existe)
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 🎯 PRÓXIMOS PASOS
|
||
|
|
|
||
|
|
1. **Revisar arquitectura** - Validar diseño
|
||
|
|
2. **Aprobar schema BD** - Validar estructura
|
||
|
|
3. **Iniciar Fase 1** - Base de datos
|
||
|
|
4. **Implementar progresivamente** - Seguir checklist
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**Estado:** ✅ Diseño Completo - Listo para Implementación
|
||
|
|
|