refactor(router): update routes and middleware for Echo v5

Update all router files to use Echo v5 APIs and type signatures.

Changes in router.go:
- Replace echomiddleware.Logger() with RequestLogger() (line 144)
- Update import from echo/v4 to echo/v5

Changes in frontend.go:
- Update frontend handler signatures to use *echo.Context
- Fix middleware registration for v5 compatibility

Changes in auth.go, library.go, scanner.go, sync.go, helpers.go:
- Update handler function signatures to *echo.Context
- Ensure consistent type usage across all route handlers

All routes now properly implement Echo v5's middleware and handler patterns.
This commit is contained in:
2026-03-06 14:00:17 -05:00
parent 0438ec4625
commit 784326e2c4
7 changed files with 45 additions and 44 deletions
+25 -25
View File
@@ -15,12 +15,12 @@ import (
"github.com/golang-jwt/jwt/v5"
"github.com/jackc/pgx/v5/pgtype"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v5"
"github.com/google/uuid"
)
func renderErrorPage(c echo.Context, message string, errorType string) error {
func renderErrorPage(c *echo.Context, message string, errorType string) error {
var buf bytes.Buffer
err := templates.ErrorPage(message, errorType).Render(c.Request().Context(), &buf)
if err != nil {
@@ -51,7 +51,7 @@ func registerFrontendRoutes(cfg *Config) {
// ============================================================================
// Public routes for login and registration pages
e.GET("/login", func(c echo.Context) error {
e.GET("/login", func(c *echo.Context) error {
var buf bytes.Buffer
sessionExpired := c.QueryParam("session") == "expired"
deleted := c.QueryParam("deleted") == "true"
@@ -62,7 +62,7 @@ func registerFrontendRoutes(cfg *Config) {
return c.HTML(http.StatusOK, buf.String())
})
e.GET("/register", func(c echo.Context) error {
e.GET("/register", func(c *echo.Context) error {
var buf bytes.Buffer
err := templates.Register().Render(c.Request().Context(), &buf)
if err != nil {
@@ -72,7 +72,7 @@ func registerFrontendRoutes(cfg *Config) {
})
// Root route - landing page with smart login detection
e.GET("/", func(c echo.Context) error {
e.GET("/", func(c *echo.Context) error {
var buf bytes.Buffer
var err error
@@ -117,7 +117,7 @@ func registerFrontendRoutes(cfg *Config) {
}
// Dashboard page
frontendProtected.GET("/dashboard", func(c echo.Context) error {
frontendProtected.GET("/dashboard", func(c *echo.Context) error {
user, err := getTemplateUserWithTheme(c, cfg)
if err != nil {
return renderErrorPage(c, "Error loading user", "user_load_error")
@@ -203,7 +203,7 @@ func registerFrontendRoutes(cfg *Config) {
})
// Collections page
frontendProtected.GET("/collections", func(c echo.Context) error {
frontendProtected.GET("/collections", func(c *echo.Context) error {
user, err := getTemplateUserWithTheme(c, cfg)
if err != nil {
return renderErrorPage(c, "Error loading user", "user_load_error")
@@ -239,7 +239,7 @@ func registerFrontendRoutes(cfg *Config) {
})
// Collection create modal
frontendProtected.GET("/collections/create-modal", func(c echo.Context) error {
frontendProtected.GET("/collections/create-modal", func(c *echo.Context) error {
var buf bytes.Buffer
err := templates.CollectionModal(templates.CollectionData{}).Render(c.Request().Context(), &buf)
if err != nil {
@@ -249,7 +249,7 @@ func registerFrontendRoutes(cfg *Config) {
})
// Collection edit modal
frontendProtected.GET("/collections/:id/edit-modal", func(c echo.Context) error {
frontendProtected.GET("/collections/:id/edit-modal", func(c *echo.Context) error {
// Parse collection ID
collectionID := c.Param("id")
collUUID, err := uuid.Parse(collectionID)
@@ -286,7 +286,7 @@ func registerFrontendRoutes(cfg *Config) {
})
// Restore system collection modal
frontendProtected.GET("/collections/restore-modal", func(c echo.Context) error {
frontendProtected.GET("/collections/restore-modal", func(c *echo.Context) error {
var buf bytes.Buffer
err := templates.RestoreSystemCollectionModal().Render(c.Request().Context(), &buf)
if err != nil {
@@ -296,7 +296,7 @@ func registerFrontendRoutes(cfg *Config) {
})
// Collection detail page (works for both system and user collections)
frontendProtected.GET("/collections/:id", func(c echo.Context) error {
frontendProtected.GET("/collections/:id", func(c *echo.Context) error {
user, err := getTemplateUserWithTheme(c, cfg)
if err != nil {
return renderErrorPage(c, "Error loading user", "user_load_error")
@@ -440,7 +440,7 @@ func registerFrontendRoutes(cfg *Config) {
})
// Custom Section Builder page
frontendProtected.GET("/custom-section", func(c echo.Context) error {
frontendProtected.GET("/custom-section", func(c *echo.Context) error {
user, err := getTemplateUserWithTheme(c, cfg)
if err != nil {
return renderErrorPage(c, "Error loading user", "user_load_error")
@@ -477,7 +477,7 @@ func registerFrontendRoutes(cfg *Config) {
})
// Progress page
frontendProtected.GET("/progress", func(c echo.Context) error {
frontendProtected.GET("/progress", func(c *echo.Context) error {
user, err := getTemplateUserWithTheme(c, cfg)
if err != nil {
return renderErrorPage(c, "Error loading user", "user_load_error")
@@ -502,7 +502,7 @@ func registerFrontendRoutes(cfg *Config) {
})
// Devices page
frontendProtected.GET("/devices", func(c echo.Context) error {
frontendProtected.GET("/devices", func(c *echo.Context) error {
user, err := getTemplateUserWithTheme(c, cfg)
if err != nil {
return renderErrorPage(c, "Error loading user", "user_load_error")
@@ -539,7 +539,7 @@ func registerFrontendRoutes(cfg *Config) {
})
// Conflicts page
frontendProtected.GET("/conflicts", func(c echo.Context) error {
frontendProtected.GET("/conflicts", func(c *echo.Context) error {
user, err := getTemplateUserWithTheme(c, cfg)
if err != nil {
return renderErrorPage(c, "Error loading user", "user_load_error")
@@ -567,7 +567,7 @@ func registerFrontendRoutes(cfg *Config) {
})
// Analytics page
frontendProtected.GET("/analytics", func(c echo.Context) error {
frontendProtected.GET("/analytics", func(c *echo.Context) error {
user, err := getTemplateUserWithTheme(c, cfg)
if err != nil {
return renderErrorPage(c, "Error loading user", "user_load_error")
@@ -581,7 +581,7 @@ func registerFrontendRoutes(cfg *Config) {
})
// Profile page (all users)
frontendProtected.GET("/profile", func(c echo.Context) error {
frontendProtected.GET("/profile", func(c *echo.Context) error {
user, err := getTemplateUserWithTheme(c, cfg)
if err != nil {
return renderErrorPage(c, "Error loading user", "user_load_error")
@@ -600,7 +600,7 @@ func registerFrontendRoutes(cfg *Config) {
// ============================================================================
// Admin routes
frontendProtected.GET("/admin", handlers.AdminMiddleware(func(c echo.Context) error {
frontendProtected.GET("/admin", handlers.AdminMiddleware(func(c *echo.Context) error {
user, err := getTemplateUserWithTheme(c, cfg)
if err != nil {
return renderErrorPage(c, "Error loading user", "user_load_error")
@@ -613,7 +613,7 @@ func registerFrontendRoutes(cfg *Config) {
return c.HTML(http.StatusOK, buf.String())
}))
frontendProtected.GET("/admin/", handlers.AdminMiddleware(func(c echo.Context) error {
frontendProtected.GET("/admin/", handlers.AdminMiddleware(func(c *echo.Context) error {
user, err := getTemplateUserWithTheme(c, cfg)
if err != nil {
return renderErrorPage(c, "Error loading user", "user_load_error")
@@ -626,7 +626,7 @@ func registerFrontendRoutes(cfg *Config) {
return c.HTML(http.StatusOK, buf.String())
}))
frontendProtected.GET("/admin/library", handlers.AdminMiddleware(func(c echo.Context) error {
frontendProtected.GET("/admin/library", handlers.AdminMiddleware(func(c *echo.Context) error {
user, err := getTemplateUserWithTheme(c, cfg)
if err != nil {
return renderErrorPage(c, "Error loading user", "user_load_error")
@@ -679,7 +679,7 @@ func registerFrontendRoutes(cfg *Config) {
}))
// Admin users page
frontendProtected.GET("/admin/users", handlers.AdminMiddleware(func(c echo.Context) error {
frontendProtected.GET("/admin/users", handlers.AdminMiddleware(func(c *echo.Context) error {
user, err := getTemplateUserWithTheme(c, cfg)
if err != nil {
return renderErrorPage(c, "Error loading user", "user_load_error")
@@ -723,7 +723,7 @@ func registerFrontendRoutes(cfg *Config) {
}))
// Admin: Get profile modal for editing user
frontendProtected.GET("/admin/users/:id/profile-modal", handlers.AdminMiddleware(func(c echo.Context) error {
frontendProtected.GET("/admin/users/:id/profile-modal", handlers.AdminMiddleware(func(c *echo.Context) error {
// Get target user ID from URL
targetUserID := c.Param("id")
parsedUUID, err := uuid.Parse(targetUserID)
@@ -763,7 +763,7 @@ func registerFrontendRoutes(cfg *Config) {
// ============================================================================
// Keep legacy routes under /api for existing API consumers
protected.GET("/devices-page", func(c echo.Context) error {
protected.GET("/devices-page", func(c *echo.Context) error {
user, err := getTemplateUserWithTheme(c, cfg)
if err != nil {
return renderErrorPage(c, "Error loading user", "user_load_error")
@@ -798,7 +798,7 @@ func registerFrontendRoutes(cfg *Config) {
return c.HTML(http.StatusOK, buf.String())
})
protected.GET("/conflicts-page", func(c echo.Context) error {
protected.GET("/conflicts-page", func(c *echo.Context) error {
user, err := getTemplateUserWithTheme(c, cfg)
if err != nil {
return renderErrorPage(c, "Error loading user", "user_load_error")
@@ -833,7 +833,7 @@ func registerFrontendRoutes(cfg *Config) {
// ============================================================================
// Health check
func (cfg *Config) GetHealth(c echo.Context) error {
func (cfg *Config) GetHealth(c *echo.Context) error {
ctx, cancel := context.WithTimeout(c.Request().Context(), 2*time.Second)
defer cancel()
if err := pingDB(cfg, ctx); err != nil {