package router func registerAnalyticsRoutes(cfg *Config) { e := cfg.Echo // JWT middleware for protected routes jwtMiddleware := createJWTMiddleware(cfg) protected := e.Group("/api", jwtMiddleware) // Analytics routes (legacy shape; kept for existing API consumers — // the web UI moved to /stats) analytics := protected.Group("/analytics") analytics.GET("/reading-stats", cfg.AnalyticsHandler.GetReadingStats) analytics.GET("/device-usage", cfg.AnalyticsHandler.GetDeviceUsage) analytics.GET("/popular-books", cfg.AnalyticsHandler.GetPopularBooks) // Reading-statistics API (/stats page + dashboard widget + per-book // card). Same session seed, service-backed aggregates, user-timezone // bucketing. The legacy /analytics page redirects to /stats. stats := protected.Group("/stats") stats.GET("/summary", cfg.StatsHandler.Summary) stats.GET("/this-week", cfg.StatsHandler.ThisWeek) stats.GET("/books/:id", cfg.StatsHandler.BookStats) }