# US-CONT-004: Versionamiento de Contenido ## Información Básica | Campo | Valor | |-------|-------| | **ID** | US-CONT-004 | | **Épica** | EXT-006 - Gestión de Contenido | | **Título** | Sistema de Control de Versiones y Audit Trail | | **Prioridad** | Media (P2) | | **Story Points** | 5 SP | | **Estado** | NOT STARTED | | **Fase** | Mes 3 (Extensiones Primera Ola) | | **Presupuesto** | $2,900 MXN | --- ## Historia de Usuario **Como** profesor o administrador **Quiero** historial completo de cambios en módulos y actividades con rollback, comparación y audit trail **Para** recuperar contenido eliminado, rastrear cambios y cumplir con auditorías --- ## Valor de Negocio ### Impacto - **Seguridad**: Recuperar contenido eliminado accidentalmente - **Transparencia**: Auditoría completa de cambios - **Colaboración**: Ver quién cambió qué y cuándo - **Compliance**: Cumplir requisitos regulatorios ### Métricas de Éxito - >90% recuperaciones exitosas de versiones - 0 pérdidas de contenido irreversibles - Tiempo de rollback <2 minutos - >85% satisfacción con trazabilidad --- ## Criterios de Aceptación ### CA-01: Historial de Cambios - Registrar cada guardado como nueva versión - Metadata de versión: - Timestamp exacto - Usuario que modificó - Descripción del cambio (opcional) - Diff summary (caracteres cambiados) - Límite de versiones: últimas 50 (configurable) - Compresión de versiones antiguas - Auto-purge de versiones >1 año (opcional) ### CA-02: Versionamiento Automático - Cada guardado crea versión automáticamente - Versionamiento granular: por módulo, por actividad - No requiere acción manual del usuario - Snapshot completo del contenido - Referencia a archivos multimedia (no duplicar) ### CA-03: Rollback a Versiones Anteriores - Lista de versiones en sidebar - Preview de versión antes de restaurar - Botón "Restaurar esta versión" - Confirmación antes de rollback - Crear nueva versión al restaurar (no sobrescribir) - Rollback parcial (solo secciones específicas) ### CA-04: Comparación de Versiones (Diff View) - Vista side-by-side de dos versiones - Highlighting de cambios: - Texto agregado (verde) - Texto eliminado (rojo) - Texto modificado (amarillo) - Comparación línea por línea - Jump to next/previous change - Exportar diff como PDF - Aceptar/rechazar cambios individuales (merge) ### CA-05: Etiquetado de Versiones - Etiquetar versiones importantes (v1.0, v2.0) - Nombres descriptivos ("Antes de revisión", "Versión final") - Filtrar por tags - Versiones etiquetadas no se purgan automáticamente - Comparar con versión etiquetada ### CA-06: Audit Trail **Registrar todos los eventos:** - Creación de contenido - Modificaciones (con diff) - Eliminaciones - Restauraciones - Cambios de permisos - Publicación/despublicación **Información capturada:** - Usuario (nombre, email, rol) - IP address - Timestamp exacto - Acción realizada - Before/after values - User agent (browser) ### CA-07: Papelera de Reciclaje - Contenido eliminado va a papelera (no se borra) - Retención: 30 días en papelera - Restaurar desde papelera con un click - Eliminar permanentemente (requiere confirmación) - Vaciar papelera automáticamente después de 30 días - Admin puede ver papelera de todos los usuarios ### CA-08: Merge de Cambios - Detectar conflictos si dos usuarios editan simultáneamente - Vista de conflictos con opciones: - Mantener mi versión - Aceptar su versión - Merge manual (editar) - Estrategias de merge: - Last write wins (default) - Manual resolution - Auto-merge si no hay conflictos - Notificar a usuarios sobre conflictos ### CA-09: Versionamiento de Archivos Multimedia - Versionar archivos en biblioteca (US-CONT-003) - Reemplazar imagen mantiene historial - Rollback a versión anterior de archivo - Comparación visual de imágenes (side-by-side) - Metadata de versión (tamaño, dimensiones) ### CA-10: Exportación de Historial - Exportar audit log como CSV/Excel - Filtrar por usuario, fecha, tipo de acción - Reportes de actividad: - "Cambios en último mes" - "Modificaciones por usuario" - Estadísticas: - Total de versiones - Frecuencia de cambios - Usuarios más activos ### CA-11: Notificaciones de Cambios - Notificar a stakeholders cuando contenido cambia - Suscribirse a módulos específicos - Digest diario/semanal de cambios - RSS feed de cambios (opcional) - Webhooks para integraciones externas ### CA-12: Performance y Storage - Almacenar solo diffs (no snapshots completos) - Compresión de versiones antiguas - Lazy loading de historial (últimas 10 primero) - Índices en tablas de versiones - Particionamiento por fecha - Archive a cold storage después de 6 meses ### CA-13: Permisos y Seguridad **Control de acceso:** - Solo autor puede ver historial de sus borradores - Admin puede ver todo el historial - Profesores ven historial de su contenido - Estudiantes NO ven historial (solo versión publicada) **Audit de auditoría:** - Log de quién accede al audit trail - Prevenir modificación de logs - Inmutabilidad de registros históricos - Encriptación de datos sensibles ### CA-14: Interfaz de Usuario - Timeline visual de versiones (gráfico) - Filtros: Por usuario, por fecha, por tipo - Búsqueda en historial - Badges de versiones importantes - Indicador de "Sin guardar" en editor - Última modificación mostrada (ej: "Editado hace 5 min por Juan") ### CA-15: Integración con Sistema - Versionamiento transparente (no afecta flujo normal) - API para versiones: ```typescript GET /api/content/:id/versions GET /api/content/:id/versions/:versionId POST /api/content/:id/restore/:versionId GET /api/content/:id/diff?from=v1&to=v2 ``` - Hooks en sistema de guardado - Compatible con US-CONT-001 (editor) --- ## Especificaciones Técnicas ### Database Schema ```sql CREATE TABLE content_versions ( id UUID PRIMARY KEY, content_id UUID REFERENCES content(id), version_number INTEGER, content_snapshot JSONB, -- full snapshot or diff changes_summary TEXT, user_id UUID REFERENCES users(id), tag VARCHAR(100), created_at TIMESTAMP, is_deleted BOOLEAN DEFAULT FALSE ); CREATE INDEX idx_versions_content ON content_versions(content_id); CREATE INDEX idx_versions_created ON content_versions(created_at); CREATE TABLE audit_trail ( id UUID PRIMARY KEY, entity_type VARCHAR(50), -- 'module', 'activity', etc. entity_id UUID, action VARCHAR(50), -- 'create', 'update', 'delete', 'restore' user_id UUID REFERENCES users(id), ip_address VARCHAR(45), user_agent TEXT, before_state JSONB, after_state JSONB, timestamp TIMESTAMP ); CREATE INDEX idx_audit_entity ON audit_trail(entity_type, entity_id); CREATE INDEX idx_audit_timestamp ON audit_trail(timestamp); CREATE INDEX idx_audit_user ON audit_trail(user_id); ``` ### Frontend Components ``` src/features/versioning/ ├── components/ │ ├── VersionHistory.tsx │ ├── VersionTimeline.tsx │ ├── DiffViewer.tsx │ ├── RestoreModal.tsx │ ├── AuditLog.tsx │ └── RecycleBin.tsx └── hooks/ ├── useVersions.ts └── useAuditTrail.ts ``` ### Technology Stack ``` Backend: - PostgreSQL JSONB para snapshots - diff-match-patch para generar diffs - compression (zlib) para versiones antiguas Frontend: - react-diff-viewer para comparación - react-timeline para visualización - moment.js para timestamps ``` --- ## Diferenciación con Alcance Inicial ### Alcance Inicial (EAI) - Sin versionamiento - Guardado sobrescribe - Sin recuperación de contenido eliminado - Sin audit trail ### Esta Historia (EXT-006) - **Historial completo** de cambios - **Rollback** a cualquier versión - **Comparación** visual de versiones - **Papelera** de reciclaje - **Audit trail** completo - **Merge** de conflictos - **Etiquetado** de versiones - Esto es **control de versiones tipo Git** --- ## Dependencias ### Depende de - **US-CONT-001**: Editor (integración) - **US-CONT-002**: Ejercicios (versionamiento) - **US-CONT-003**: Multimedia (versionamiento de archivos) --- ## Definición de Terminado (DoD) - [ ] Sistema de versionamiento automático - [ ] Historial de versiones UI - [ ] Rollback funcional - [ ] Diff viewer side-by-side - [ ] Etiquetado de versiones - [ ] Audit trail completo - [ ] Papelera de reciclaje - [ ] Merge de conflictos - [ ] Exportación de historial - [ ] Notificaciones de cambios - [ ] API de versiones - [ ] Performance optimizada (diffs) - [ ] Tests >80% coverage - [ ] Documentación - [ ] Video tutorial --- ## Estimación Detallada (5 SP) | Tarea | Horas | |-------|-------| | Diseño de schema | 4h | | Sistema de versionamiento | 10h | | Historial UI | 8h | | Rollback | 6h | | Diff viewer | 10h | | Papelera | 6h | | Audit trail | 8h | | Merge conflicts | 8h | | Backend API | 8h | | Testing | 8h | | Documentación | 4h | | **TOTAL** | **80h** | **Presupuesto**: $2,900 MXN **Duración**: 2 días --- ## Tags #ext-006 #versionamiento #audit-trail #rollback #historial #diff #git-like #mes-3 --- **Creado**: 2025-11-02 **Autor**: Sistema de Migración - Subagente EXT 4-6 **Origen**: EP010/HU-EP010-03-content-management.md **Compliance**: PF-001 (XXX líneas)