Crear servicio con inyección de dependencias de clientes
Implementar estrategias de limpieza
Añadir tests unitarios para cada estrategia
Crear FilesystemService
Manejo seguro de archivos y symlinks
Validación de paths
Tests con filesystem temporal
Integrar clientes con repositorios
Sincronización de media desde servicios externos
Actualización de base de datos
Gestión de conflictos
📈 Métricas del Proyecto
Líneas de código Go: ~2,500 (estimado)
Archivos fuente: 35+
Tests: 0 (pendiente)
Cobertura de tests: 0% (pendiente)
Tiempo de desarrollo: ~5 días
Imagen Docker: ~25MB (objetivo)
Uso de RAM: ~50MB (objetivo)
🔐 Seguridad
✅ Fix de seguridad en Fiber v2.52.9 (GHSA-hg3g-gphw-5hhm BodyParser)
✅ golang.org/x/crypto actualizado con fixes de SSH
✅ golang.org/x/net actualizado con mejoras HTTP/2
⏳ Pendiente: Validación de inputs de usuario
⏳ Pendiente: Rate limiting en API
⏳ Pendiente: Sanitización de file paths
📝 Notas
Decisiones de Diseño
Retry con Backoff Exponencial: Todos los clientes implementan retry automático con backoff exponencial (1s, 2s, 4s) para manejar fallos temporales de red.
Context Propagation: Todos los métodos aceptan context.Context para permitir cancelación y timeouts desde el caller.
Logging Estructurado: Uso consistente de Zap con campos estructurados para mejor observabilidad.
Interfaces Separadas: MediaClient, StreamingClient y RequestClient separados por responsabilidad (diferentes tipos de servicios).
Conversión a Modelo Interno: Cada cliente convierte sus estructuras específicas al modelo Media interno para desacoplar la lógica de negocio de las APIs externas.
Lecciones Aprendidas
Go 1.25 Compatibility: Air v1.63+ requiere Go 1.25. Importante mantener versiones consistentes.
Fiber Updates: Los PRs de Dependabot son valiosos - Fiber v2.52.9 incluía un fix de seguridad importante.
Docker Compose Watch: Excelente para desarrollo, pero requiere configuración cuidadosa para evitar conflictos con bind mounts.
API Differences: Radarr/Sonarr usan X-Api-Key, Jellyfin usa X-Emby-Token - importante documentar estas diferencias.