El backup adelgaza: los vídeos de Signage son opcionales (v1.72.0)
{“related”: [“entity—core—service—backup-service”, “entity—racks—endpoint—backup-full”, “entity—racks—endpoint—backup-full-start”, “entity—racks—endpoint—backup-full-download”, “entity—racks—service—run-full-backup”, “feature—racks—backup-restore-async-v156”, “feature—backup-restore—additive-restore-confirmation-v1-66-2”, “crearack-tech—admin—backup-restore”, “crearack—settings—backup-export-reports”, “crearack-tech—guides—seguridad-y-backups”, “feature—backup-restore—creacion-selectiva-v1-74-0”], “content”: ”## Valor para el usuario\n\nEl primer backup completo real pesó 250 MB, y casi todo eran los vídeos de la cartelería digital (Signage): 232 de los 250 MB. Desde esta versión, al pedir un backup manual, CreaRack pregunta cuántos vídeos hay y cuánto pesan, y deja elegir si van dentro o no — la opción recomendada es sin ellos. Los datos de cada vídeo (nombre, duración, en qué listas aparece) viajan siempre en el backup; solo el fichero pesado es opcional. El backup automático nocturno va siempre sin vídeos, porque vive en el mismo disco que los originales: incluirlos no protegía nada y multiplicaba el espacio ocupado con la retención de 7-30 días. Si restauras el backup en el mismo servidor (por ejemplo al mover contenido entre organizaciones), los vídeos se reconectan solos desde donde ya están en disco, sin haber viajado en el ZIP. Solo si un vídeo no aparece ni en el ZIP ni en el disco de origen, el elemento restaurado queda marcado como “no disponible” en vez de fingir que está bien.\n\n> Nota (21-08-2026, v1.74.0): el endpoint dedicado que alimentaba el diálogo de estimación, GET /api/racks/backup/full/estimate, se retiró — lo absorbió el árbol completo de [[feature—backup-restore—creacion-selectiva-v1-74-0]] (GET /api/racks/backup/full/inventory, campo domains.dsm.video_files/video_mb). El comportamiento de esta página (vídeos opcionales, recomendación “sin ellos”, reconexión en la misma instalación) sigue vigente; solo cambió el endpoint que sirve el dato.\n\n## Cómo usarla\n\n1. Ir a Backup completo (Admin) y pedir un backup manual.\n2. Si la organización tiene vídeos de Signage, el diálogo muestra la estimación: número de ficheros y MB. Hasta v1.73.x la servía un endpoint dedicado (GET /api/racks/backup/full/estimate); desde v1.74.0 el mismo dato viaja dentro del árbol completo (GET /api/racks/backup/full/inventory, ver [[feature—backup-restore—creacion-selectiva-v1-74-0]]).\n3. Elegir “Con vídeos” o “Sin vídeos” (recomendado); la elección se envía como include_signage_videos en el POST /api/racks/backup/full/start.\n4. El backup automático nocturno no pregunta nada: siempre se genera sin vídeos.\n5. Al restaurar, si el backup se aplica en la misma instalación y el vídeo original sigue en disco, se re-vincula solo; si no está en ningún sitio, el asset queda en estado error, visible en la lista de Signage.\n\n## Implementación\n\n- write_full_backup_zip() (racks/api/export/backup.py) gana el parámetro include_signage_videos (default True para el flujo Huey directo) y anota signage_videos_included en el manifest — ver [[entity—racks—endpoint—backup-full]].\n- Endpoint — retirado en v1.74.0; el conteo de vídeos ahora lo sirve GET /api/racks/backup/full/estimateGET /api/racks/backup/full/inventory dentro de domains.dsm, ver [[feature—backup-restore—creacion-selectiva-v1-74-0]].\n- POST /api/racks/backup/full/start (ver [[entity—racks—endpoint—backup-full-start]]) acepta ahora un body opcional {\"include_signage_videos\": bool} y lo pasa a la tarea Huey run_full_backup() (racks/tasks.py, ver [[entity—racks—service—run-full-backup]]).\n- signage_media_relpaths() (racks/api/export/backup_domains.py) filtra los ficheros y variantes transcodificadas de tipo video cuando include_videos=False; los thumbnails y metadatos siguen viajando siempre.\n- generate_backup() del backup nocturno (core/services/backup_service.py, ver [[entity—core—service—backup-service]]) llama a write_full_backup_zip fijando include_signage_videos=False sin exponer opción — vive en el mismo disco que los originales, así que incluir vídeos no añadía protección.\n- En el restore, _ensure_media_file() (racks/api/export/restore_domains.py) intenta copiar el fichero desde la ruta del org origen si vive en la MISMA instalación (mudanza entre organizaciones); si no lo encuentra ni en el ZIP ni en el disco origen, el MediaAsset se crea con status=\"error\" en vez de \"ready\".\n- Continúa la serie de refuerzo de backups de la task #236, construida sobre la base async de [[feature—racks—backup-restore-async-v156]] y emparentada con [[feature—backup-restore—additive-restore-confirmation-v1-66-2]].\n\n## Commits relacionados\n\n- c1930915 (2026-08-20) — feat(backups): los vídeos de Signage salen de la maleta salvo petición explícita (task #236, PR-3) — v1.72.0 (#399).\n\n## Véase también\n\n- [[entity—core—service—backup-service]]\n- [[entity—racks—endpoint—backup-full]]\n- [[entity—racks—endpoint—backup-full-start]]\n- [[entity—racks—endpoint—backup-full-download]]\n- [[entity—racks—service—run-full-backup]]\n- [[feature—racks—backup-restore-async-v156]]\n- [[feature—backup-restore—additive-restore-confirmation-v1-66-2]]\n- [[crearack-tech—admin—backup-restore]]\n- [[crearack—settings—backup-export-reports]]\n- [[crearack-tech—guides—seguridad-y-backups]]\n- [[feature—backup-restore—creacion-selectiva-v1-74-0]]\n”}