From 4fe36ba0a54201b0850e06ef004fbd6944256a50 Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Sat, 25 Apr 2026 21:16:39 -0400 Subject: [PATCH] refactor(router): remove duplicate progress routes, add ProgressService to config - Remove GET /progress/:id and POST /progress/:id from progress routes. These were superseded by the media-item progress routes. Only GET /progress/:id/history remains. - Add ProgressService to router.Config so sync.go can inject it into KoboHandler via SetProgressService(). - Inject ProgressService into KoboHandler at route registration time rather than requiring a separate setup step. - Update comment from 'Legacy progress routes' to 'Progress routes'. --- internal/router/media.go | 2 +- internal/router/progress.go | 4 ---- internal/router/router.go | 1 + internal/router/sync.go | 1 + 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/internal/router/media.go b/internal/router/media.go index 8c1f4f3..e5ac414 100644 --- a/internal/router/media.go +++ b/internal/router/media.go @@ -22,7 +22,7 @@ func registerMediaRoutes(cfg *Config) { protected.PUT("/media-items/:id/rating", cfg.MediaHandler.UpdateMediaRating) protected.DELETE("/media-items/:id/rating", cfg.MediaHandler.DeleteMediaRating) - // Legacy progress routes (all authenticated users) + // Progress routes (all authenticated users) protected.GET("/media-items/:id/progress", cfg.MediaHandler.GetMediaReadingProgress) protected.PUT("/media-items/:id/progress", cfg.MediaHandler.UpdateMediaReadingProgress) protected.DELETE("/media-items/:id/progress", cfg.MediaHandler.DeleteMediaReadingProgress) diff --git a/internal/router/progress.go b/internal/router/progress.go index f36f4e6..8b2b923 100644 --- a/internal/router/progress.go +++ b/internal/router/progress.go @@ -7,12 +7,8 @@ import ( func registerProgressRoutes(cfg *Config, scannerHandler *handlers.Handler) { e := cfg.Echo - // JWT middleware for protected routes jwtMiddleware := createJWTMiddleware(cfg) protected := e.Group("/api", jwtMiddleware) - // Universal Progress routes - protected.GET("/progress/:id", scannerHandler.GetUniversalProgress) - protected.POST("/progress/:id", scannerHandler.UpdateUniversalProgress) protected.GET("/progress/:id/history", scannerHandler.GetProgressHistory) } diff --git a/internal/router/router.go b/internal/router/router.go index 47f84a9..cdbcc44 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -60,6 +60,7 @@ type Config struct { SystemSettingsHandler *handlers.SystemSettingsHandler ConnManager *sync.ConnectionManager QueueProcessor *sync.SyncQueueProcessor + ProgressService *sync.ProgressService DeviceAuthMiddleware *middleware.DeviceAuthMiddleware LoginTracker *ratelimit.LoginAttemptTracker ScannerHandler *handlers.Handler diff --git a/internal/router/sync.go b/internal/router/sync.go index da5c315..9559b96 100644 --- a/internal/router/sync.go +++ b/internal/router/sync.go @@ -32,6 +32,7 @@ func registerSyncRoutes(cfg *Config) { // Kobo devices use URL path: /api/sync/kobo/{token}/markup // API clients can use Authorization header: Authorization: Bearer {token} koboHandler := handlers.NewKoboHandler(cfg.Queries, cfg.ConnManager) + koboHandler.SetProgressService(cfg.ProgressService) koboSync := e.Group("/api/sync/kobo/:token") koboSync.POST("/markup", cfg.DeviceAuthMiddleware.Authenticate(koboHandler.Markup)) koboSync.POST("/bookmark", cfg.DeviceAuthMiddleware.Authenticate(koboHandler.Bookmark))