# Solución: Aplicación de Configuraciones Globales a Proyectos ## Problema Identificado Cuando se agregaban nuevos proyectos al sistema, no se estaban asignando las configuraciones globales de backup definidas en `config.json`. Los proyectos solo recibían configuraciones básicas como `default_schedule` y `default_schedule_time`, pero faltaban configuraciones importantes como: - `retry_delay_hours`: Tiempo de espera antes de reintentar un backup fallido - `backup_timeout_minutes`: Tiempo máximo para completar un backup - `min_backup_interval_minutes`: Intervalo mínimo entre backups del mismo proyecto - `min_free_space_mb`: Espacio mínimo requerido antes de hacer backup - Todas las configuraciones de `backup_options` (compresión, algoritmo de hash, etc.) ## Cambios Realizados ### 1. Nuevo Método en ProjectDiscoveryService Se agregó el método `_apply_global_configurations()` en `src/services/project_discovery_service.py`: ```python def _apply_global_configurations(self, project_data: Dict[str, Any]) -> Dict[str, Any]: """Apply all global configurations to a new project""" global_settings = self.config.global_settings backup_options = self.config.backup_options # Apply global settings to schedule_config project_data["schedule_config"].update({ "retry_delay_hours": global_settings.get("retry_delay_hours", 1), "backup_timeout_minutes": global_settings.get("backup_timeout_minutes", 0), "min_backup_interval_minutes": global_settings.get("min_backup_interval_minutes", 10), "min_free_space_mb": global_settings.get("min_free_space_mb", 100), # ... configuraciones existentes }) # Apply backup options project_data["backup_options"] = { "compression_level": backup_options.get("compression_level", 6), "include_subdirectories": backup_options.get("include_subdirectories", True), # ... todas las opciones de backup } return project_data ``` ### 2. Modificación de Funciones de Creación de Proyectos Se actualizaron las funciones `_create_project_from_s7p()` y `_create_manual_project()` para aplicar las configuraciones globales: ```python # Apply global configurations project_data = self._apply_global_configurations(project_data) return Project(project_data) ``` ### 3. Actualización del Modelo Project Se expandió la clase `Project` en `src/models/project_model.py` para manejar las nuevas configuraciones: **En el constructor:** ```python # Configuraciones de backup (heredadas de configuración global) backup_options = project_data.get("backup_options", {}) self.compression_level = backup_options.get("compression_level", 6) self.include_subdirectories = backup_options.get("include_subdirectories", True) # ... todas las opciones de backup # Configuraciones adicionales del proyecto (heredadas de global_settings) self.retry_delay_hours = schedule_config.get("retry_delay_hours", 1) self.backup_timeout_minutes = schedule_config.get("backup_timeout_minutes", 0) # ... configuraciones adicionales ``` **En el método `to_dict()`:** ```python "schedule_config": { # ... configuraciones existentes "retry_delay_hours": self.retry_delay_hours, "backup_timeout_minutes": self.backup_timeout_minutes, "min_backup_interval_minutes": self.min_backup_interval_minutes, "min_free_space_mb": self.min_free_space_mb, }, "backup_options": { "compression_level": self.compression_level, "include_subdirectories": self.include_subdirectories, # ... todas las opciones de backup }, ``` ### 4. Actualización de Proyectos Existentes Se ejecutó un script para actualizar los 158 proyectos existentes con las configuraciones globales que faltaban, creando un backup de seguridad antes de la actualización. ## Configuraciones Globales Aplicadas ### Global Settings (en schedule_config) - `retry_delay_hours`: 1 hora por defecto - `backup_timeout_minutes`: 0 (sin límite) por defecto - `min_backup_interval_minutes`: 10 minutos por defecto - `min_free_space_mb`: 100 MB por defecto ### Backup Options - `compression_level`: 6 (balanceado) - `include_subdirectories`: true - `preserve_directory_structure`: true - `hash_algorithm`: "md5" - `hash_includes`: ["timestamp", "size"] - `backup_type`: "complete" - `process_priority`: "low" - `sequential_execution`: true - `filename_format`: "HH-MM-SS_projects.zip" - `date_format`: "YYYY-MM-DD" ## Verificación Se realizaron pruebas que confirmaron: 1. ✅ **Proyectos existentes actualizados**: Los 158 proyectos existentes ahora tienen todas las configuraciones globales 2. ✅ **Nuevos proyectos manuales**: Reciben automáticamente todas las configuraciones globales 3. ✅ **Nuevos proyectos S7P**: También reciben automáticamente todas las configuraciones globales ## Beneficios - **Consistencia**: Todos los proyectos ahora heredan las mismas configuraciones globales - **Mantenibilidad**: Cambios en configuraciones globales se aplican a futuros proyectos - **Flexibilidad**: Cada proyecto mantiene sus configuraciones individuales que pueden ser modificadas independientemente - **Retrocompatibilidad**: Los proyectos existentes mantienen sus configuraciones actuales mientras reciben las nuevas ## Archivos Modificados - `src/services/project_discovery_service.py`: Nuevo método `_apply_global_configurations()` - `src/models/project_model.py`: Expansión del modelo Project para manejar configuraciones adicionales - `projects.json`: Actualizado con configuraciones globales para todos los proyectos existentes - `projects.json.backup`: Backup de seguridad creado automáticamente