keepercheky

📊 Progreso de Desarrollo - KeeperCheky

Última actualización: 25 de Octubre de 2025

✅ Completado

Sprint 0: Infraestructura y Configuración

Sprint 1: Clientes de Servicios Externos ✨ COMPLETADO

Archivos Creados en Sprint 1

internal/service/clients/
├── client.go           # Interfaces y constantes comunes
├── radarr.go          # Cliente de Radarr (354 líneas)
├── sonarr.go          # Cliente de Sonarr (345 líneas)
├── jellyfin.go        # Cliente de Jellyfin (282 líneas)
└── jellyseerr.go      # Cliente de Jellyseerr (252 líneas)

internal/models/
├── tag.go             # Modelo Tag
├── playback.go        # Modelo PlaybackInfo
└── request.go         # Modelo Request

🚧 En Progreso

Nada actualmente

📋 Pendiente

Sprint 2: Servicio de Cleanup

Sprint 3: Sistema de Programación

Sprint 4: Repositorios y Persistencia

Sprint 5: API REST Completa

Sprint 6: Interfaz de Usuario

Sprint 7: Features Avanzados

📦 Dependencias Actuales

github.com/gofiber/fiber/v2 v2.52.9
github.com/gofiber/template/html/v2 v2.1.2
github.com/go-resty/resty/v2 v2.16.2       // ✨ Nuevo
github.com/google/uuid v1.6.0
github.com/robfig/cron/v3 v3.0.1
github.com/spf13/viper v1.19.0
go.uber.org/zap v1.27.0
gorm.io/driver/sqlite v1.5.6
gorm.io/gorm v1.25.12
golang.org/x/crypto v0.35.0                // ✨ Actualizado
golang.org/x/net v0.38.0                   // ✨ Actualizado
golang.org/x/sys v0.28.0

🎯 Próximos Pasos

  1. Implementar CleanupService (Sprint 2)
    • Crear servicio con inyección de dependencias de clientes
    • Implementar estrategias de limpieza
    • Añadir tests unitarios para cada estrategia
  2. Crear FilesystemService
    • Manejo seguro de archivos y symlinks
    • Validación de paths
    • Tests con filesystem temporal
  3. 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

🔐 Seguridad

📝 Notas

Decisiones de Diseño

  1. Retry con Backoff Exponencial: Todos los clientes implementan retry automático con backoff exponencial (1s, 2s, 4s) para manejar fallos temporales de red.

  2. Context Propagation: Todos los métodos aceptan context.Context para permitir cancelación y timeouts desde el caller.

  3. Logging Estructurado: Uso consistente de Zap con campos estructurados para mejor observabilidad.

  4. Interfaces Separadas: MediaClient, StreamingClient y RequestClient separados por responsabilidad (diferentes tipos de servicios).

  5. 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

  1. Go 1.25 Compatibility: Air v1.63+ requiere Go 1.25. Importante mantener versiones consistentes.

  2. Fiber Updates: Los PRs de Dependabot son valiosos - Fiber v2.52.9 incluía un fix de seguridad importante.

  3. Docker Compose Watch: Excelente para desarrollo, pero requiere configuración cuidadosa para evitar conflictos con bind mounts.

  4. API Differences: Radarr/Sonarr usan X-Api-Key, Jellyfin usa X-Emby-Token - importante documentar estas diferencias.


Mantenido por: GitHub Copilot
Repositorio: https://github.com/carcheky/keepercheky
Branch: develop