From 938e5eed53d25b0e7aec63219082858de479b437 Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Mon, 9 Feb 2026 20:10:30 -0500 Subject: [PATCH] feat(router): add system settings routes and handler wiring Router configuration updates: - Add SystemSettingsHandler to Config struct - Register GET /api/libraries/scan-settings (admin-only) - Register PUT /api/libraries/scan-settings (admin-only) - Wire SystemSettingsHandler in main.go These routes replace per-user scan settings endpoints with system-wide admin-only endpoints. --- internal/router/library.go | 4 ++++ internal/router/router.go | 43 +++++++++++++++++++------------------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/internal/router/library.go b/internal/router/library.go index 680cbef..bf056de 100644 --- a/internal/router/library.go +++ b/internal/router/library.go @@ -49,6 +49,10 @@ func registerLibraryRoutes(cfg *Config) { return cfg.MediaHandler.ListMediaItems(c) }) + // System scan settings (admin-only) + adminLibrary.GET("/scan-settings", cfg.SystemSettingsHandler.GetScanSettings) + adminLibrary.PUT("/scan-settings", cfg.SystemSettingsHandler.UpdateScanSettings) + // User library visibility control userLibrary := library.Group("/visibility") userLibrary.GET("", cfg.LibraryHandler.GetUserVisibleLibraries) diff --git a/internal/router/router.go b/internal/router/router.go index e0513a0..30b2b07 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -31,27 +31,28 @@ func (cv *CustomValidator) Validate(i interface{}) error { // Config holds all dependencies needed for route registration type Config struct { - Echo *echo.Echo - Queries *database.Queries - Cfg *config.Config - DBPool interface{} // pgxpool.Pool interface - AuthHandler *handlers.AuthHandler - LibraryHandler *handlers.LibraryHandler - DeviceHandler *handlers.DeviceHandler - MediaHandler *handlers.MediaHandler - SearchHandler *handlers.SearchHandler - MatchingHandler *handlers.MatchingHandler - KOReaderHandler *handlers.KOReaderHandler - WSHandler *handlers.WSHandler - ConflictHandler *handlers.ConflictHandler - AnalyticsHandler *handlers.AnalyticsHandler - QueueHandler *handlers.QueueHandler - CollectionHandler *handlers.CollectionHandler - OPDSHandler *handlers.OPDSHandler - ConnManager *sync.ConnectionManager - QueueProcessor *sync.SyncQueueProcessor - DeviceAuthMiddleware *middleware.DeviceAuthMiddleware - LoginTracker *ratelimit.LoginAttemptTracker + Echo *echo.Echo + Queries *database.Queries + Cfg *config.Config + DBPool interface{} // pgxpool.Pool interface + AuthHandler *handlers.AuthHandler + LibraryHandler *handlers.LibraryHandler + DeviceHandler *handlers.DeviceHandler + MediaHandler *handlers.MediaHandler + SearchHandler *handlers.SearchHandler + MatchingHandler *handlers.MatchingHandler + KOReaderHandler *handlers.KOReaderHandler + WSHandler *handlers.WSHandler + ConflictHandler *handlers.ConflictHandler + AnalyticsHandler *handlers.AnalyticsHandler + QueueHandler *handlers.QueueHandler + CollectionHandler *handlers.CollectionHandler + OPDSHandler *handlers.OPDSHandler + SystemSettingsHandler *handlers.SystemSettingsHandler + ConnManager *sync.ConnectionManager + QueueProcessor *sync.SyncQueueProcessor + DeviceAuthMiddleware *middleware.DeviceAuthMiddleware + LoginTracker *ratelimit.LoginAttemptTracker } // createJWTMiddleware creates a JWT middleware with proper user context setup