diff --git a/cmd/server/main.go b/cmd/server/main.go index b883a9a..9985d72 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -148,7 +148,25 @@ func main() { DeviceAuthMiddleware: deviceAuthMiddleware, LoginTracker: loginAttemptTracker, } - router.RegisterRoutes(routerConfig) + + // Register all routes and get ebook handler + ebookHandler := router.RegisterRoutes(routerConfig) + + // ======================================================================== + // BACKGROUND SERVICES - Restore auto-start functionality + // ======================================================================== + + // Start scheduler for auto-scanning + go ebookHandler.StartScheduler() + defer ebookHandler.StopScheduler() + + // Start watch mode for all libraries (background) + go func() { + time.Sleep(2 * time.Second) // Wait for server to be ready + if err := ebookHandler.StartWatchModeForAllLibraries(context.Background()); err != nil { + log.Printf("Warning: failed to start watch mode for libraries: %v", err) + } + }() // Public library types endpoint (no authentication required) e.GET("/api/libraries/types", libraryHandler.GetLibraryTypes) diff --git a/internal/router/router.go b/internal/router/router.go index c25b819..a86c167 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -83,7 +83,7 @@ func createJWTMiddleware(cfg *Config) echo.MiddlewareFunc { } // RegisterRoutes registers all application routes -func RegisterRoutes(cfg *Config) { +func RegisterRoutes(cfg *Config) *handlers.Handler { e := cfg.Echo // Set up validator @@ -111,7 +111,7 @@ func RegisterRoutes(cfg *Config) { // Register core application routes (collections, devices, media, etc.) - ONCE jwtMiddleware := createJWTMiddleware(cfg) protected := e.Group("/api", jwtMiddleware) - handlers.SetupRoutes(protected, cfg.Queries, cfg.ConnManager) + ebookHandler := handlers.SetupRoutes(protected, cfg.Queries, cfg.ConnManager) // Register route groups registerAuthRoutes(cfg, rateLimitMiddleware) @@ -126,4 +126,10 @@ func RegisterRoutes(cfg *Config) { registerWebSocketRoutes(cfg) registerFrontendRoutes(cfg) registerDocumentationRoutes(cfg) + + // Register scanner routes (admin only) + admin := protected.Group("", handlers.AdminMiddleware) + registerScannerRoutes(admin, ebookHandler) + + return ebookHandler }