From 46a03ebfda747c3d79b401a3bf9414616f6c6128 Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Sat, 7 Feb 2026 17:08:00 -0500 Subject: [PATCH] refactor(router): organize scanner routes into dedicated file Phase 4 of code organization plan Changes: - Create internal/router/scanner.go with registerScannerRoutes() - Move scanner route registration from handlers to router package - Update internal/router/router.go to call registerScannerRoutes - Remove inline scanner routes from internal/handlers/ebook.go Scanner routes now centralized in router/scanner.go: - POST /scanner/scan - Scan ebooks - POST /scanner/start - Start scanner - POST /scanner/stop - Stop scanner - GET /scanner/status/:jobId - Get scan status - POST /scanner/watch/start - Start watch mode - POST /scanner/watch/stop - Stop watch mode - GET /scanner/watch/status - Get watch mode status This improves code organization by separating route registration from handler logic, making the codebase easier to maintain and follows the established pattern of organizing routes by feature. --- internal/handlers/ebook.go | 11 +---------- internal/router/scanner.go | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 internal/router/scanner.go diff --git a/internal/handlers/ebook.go b/internal/handlers/ebook.go index 6e34453..8cc689e 100644 --- a/internal/handlers/ebook.go +++ b/internal/handlers/ebook.go @@ -142,16 +142,7 @@ func SetupRoutes(g *echo.Group, db *database.Queries, connManager *wsync.Connect admin.PUT("/media-items/:id", h.UpdateMediaItem) admin.DELETE("/media-items/:id", h.DeleteMediaItem) - // Scanner routes (admin only) - admin.POST("/scanner/scan", h.ScanEbooks) - admin.POST("/scanner/start", h.StartScanner) - admin.POST("/scanner/stop", h.StopScanner) - admin.GET("/scanner/status/:jobId", h.GetScanStatus) - - // Watch mode routes (admin only) - admin.POST("/scanner/watch/start", h.StartWatchMode) - admin.POST("/scanner/watch/stop", h.StopWatchMode) - admin.GET("/scanner/watch/status", h.GetWatchModeStatus) + // Scanner routes are registered in router/scanner.go return h } diff --git a/internal/router/scanner.go b/internal/router/scanner.go new file mode 100644 index 0000000..5344498 --- /dev/null +++ b/internal/router/scanner.go @@ -0,0 +1,20 @@ +package router + +import ( + "bookhoard/internal/handlers" + "github.com/labstack/echo/v4" +) + +// registerScannerRoutes registers all scanner-related endpoints +func registerScannerRoutes(admin *echo.Group, h *handlers.Handler) { + // Scanner routes (admin only) + admin.POST("/scanner/scan", h.ScanEbooks) + admin.POST("/scanner/start", h.StartScanner) + admin.POST("/scanner/stop", h.StopScanner) + admin.GET("/scanner/status/:jobId", h.GetScanStatus) + + // Watch mode routes (admin only) + admin.POST("/scanner/watch/start", h.StartWatchMode) + admin.POST("/scanner/watch/stop", h.StopWatchMode) + admin.GET("/scanner/watch/status", h.GetWatchModeStatus) +}