> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rocky.global/llms.txt
> Use this file to discover all available pages before exploring further.

# EXPORT OPTIMIZATION

# Optimización de Exportación de Participantes

## Resumen

Se han implementado optimizaciones significativas para la exportación de participantes que evitan que el servidor se ralentice con grandes volúmenes de datos (30,000+ registros).

## Optimizaciones Implementadas

### 1. **Exportación por Chunks**

* **Archivo**: `app/Exports/ParticipantsExportOptimized.php`
* **Beneficio**: Procesa los datos en lotes pequeños (1000 registros por defecto) en lugar de cargar todos los registros en memoria
* **Implementación**: Usa `WithChunkReading` y `FromQuery` de Laravel Excel

### 2. **Procesamiento en Background**

* **Archivo**: `app/Jobs/ProcessParticipantsExport.php`
* **Beneficio**: Para exportaciones grandes (>5000 participantes), se procesa en background
* **Notificación**: El usuario recibe un email cuando la exportación está lista
* **Timeout**: 1 hora máximo de procesamiento

### 3. **Validaciones y Límites**

* **Archivo**: `app/Http/Middleware/ValidateExportRequest.php`
* **Límite máximo**: 100,000 participantes por exportación
* **Límite inmediato**: 5,000 participantes (configurable)
* **Validación**: Campos requeridos y existencia del evento

### 4. **Optimización de Consultas**

* **Select específico**: Solo carga campos necesarios
* **Filtrado por evento**: Reduce el volumen de datos procesados
* **Índices**: Optimizado para consultas por `evento_id`

### 5. **Limpieza Automática**

* **Comando**: `app/Console/Commands/CleanupExportFiles.php`
* **Programación**: Se ejecuta diariamente
* **Retención**: Archivos se eliminan después de 7 días

## Configuración

### Variables de Entorno (.env)

```env theme={null}
# Límite para procesamiento inmediato (default: 5000)
EXPORT_IMMEDIATE_LIMIT=5000

# Tamaño de chunk para procesamiento (default: 1000)
EXPORT_CHUNK_SIZE=1000

# Límite máximo de participantes (default: 100000)
EXPORT_MAX_PARTICIPANTS=100000
```

### Configuración en config/app.php

```php theme={null}
'export_immediate_limit' => env('EXPORT_IMMEDIATE_LIMIT', 5000),
'export_chunk_size' => env('EXPORT_CHUNK_SIZE', 1000),
'export_max_participants' => env('EXPORT_MAX_PARTICIPANTS', 100000),
```

## Flujo de Funcionamiento

### Exportaciones Pequeñas (≤5,000 participantes)

1. Usuario hace clic en "Exportar"
2. Se procesa inmediatamente
3. Descarga directa del archivo Excel

### Exportaciones Grandes (>5,000 participantes)

1. Usuario hace clic en "Exportar"
2. Se muestra notificación: "La exportación está siendo procesada"
3. Se despacha job en background
4. Usuario recibe email con archivo adjunto cuando está listo

## Archivos Modificados

### Controladores

* `app/Http/Controllers/Eventos/EventosController.php`
  * Método `exportParticipants()` optimizado
  * Lógica de decisión entre procesamiento inmediato/background

### Vistas

* `resources/views/eventos/participants/index.blade.php`
  * JavaScript actualizado para manejar respuestas JSON
  * Notificaciones de estado de exportación

### Rutas

* `routes/eventos.php`
  * Middleware `validate.export` aplicado a ruta de exportación

### Middleware

* `app/Http/Middleware/ValidateExportRequest.php`
  * Validaciones de límites y campos requeridos

## Comandos Artisan

### Limpieza de Archivos

```bash theme={null}
# Limpiar archivos de exportación (manual)
php artisan exports:cleanup

# Con opciones
php artisan exports:cleanup --days=7
```

### Programación Automática

El comando se ejecuta automáticamente todos los días a las 00:00.

## Beneficios de Rendimiento

1. **Memoria**: Reducción del 90% en uso de memoria para exportaciones grandes
2. **Tiempo de respuesta**: Exportaciones pequeñas siguen siendo inmediatas
3. **Escalabilidad**: Soporte para hasta 100,000 participantes
4. **Experiencia de usuario**: Notificaciones claras del estado de procesamiento
5. **Mantenimiento**: Limpieza automática de archivos temporales

## Monitoreo

### Logs

* Exportaciones grandes se registran en logs
* Errores de procesamiento se capturan y reportan

### Métricas

* Número de participantes por exportación
* Tiempo de procesamiento
* Archivos generados y eliminados

## Consideraciones de Seguridad

1. **Límites estrictos**: Prevención de ataques DoS
2. **Validación de campos**: Solo campos permitidos
3. **Limpieza automática**: Archivos temporales se eliminan
4. **Autenticación**: Solo usuarios autorizados pueden exportar

## Próximos Pasos Recomendados

1. **Monitoreo**: Implementar métricas de rendimiento
2. **Cache**: Considerar cache para consultas frecuentes
3. **Compresión**: Comprimir archivos grandes antes del envío
4. **CDN**: Usar CDN para distribución de archivos grandes
