- Update SearchMediaItems handler to use SearchService - Add autocomplete detection for field value queries (author=value, genre=value, etc.) - Add handleFieldValuesSearch method for dropdown population - Add sort parameter extraction with default "title ASC" - Remove deprecated ListMediaItemsFiltered handler - Remove deprecated /api/media-items/filtered route registration - Update frontend.go to use SearchMediaItemsUnified instead of ListMediaItemsFiltered - Fix parameter passing (empty filters use Valid:true with empty values, not Valid:false) - Add SearchQuery, IsExactSearch, SearchPattern parameters for query parsing Handler is now a thin wrapper that extracts params and delegates to service layer.
66 lines
3.1 KiB
Go
66 lines
3.1 KiB
Go
package router
|
|
|
|
import (
|
|
"bookhoard/internal/handlers"
|
|
)
|
|
|
|
func registerMediaRoutes(cfg *Config) {
|
|
e := cfg.Echo
|
|
|
|
// JWT middleware for protected routes
|
|
jwtMiddleware := createJWTMiddleware(cfg)
|
|
protected := e.Group("/api", jwtMiddleware)
|
|
admin := protected.Group("", handlers.AdminMiddleware)
|
|
|
|
// Media item routes (all authenticated users)
|
|
protected.GET("/media-items", cfg.MediaHandler.ListMediaItems)
|
|
protected.GET("/media-items/:id", cfg.MediaHandler.GetMediaItem)
|
|
|
|
// Media rating routes (all authenticated users)
|
|
protected.POST("/media-items/:id/rating", cfg.MediaHandler.CreateMediaRating)
|
|
protected.GET("/media-items/:id/rating", cfg.MediaHandler.GetMediaRating)
|
|
protected.PUT("/media-items/:id/rating", cfg.MediaHandler.UpdateMediaRating)
|
|
protected.DELETE("/media-items/:id/rating", cfg.MediaHandler.DeleteMediaRating)
|
|
|
|
// Legacy progress routes (all authenticated users)
|
|
protected.GET("/media-items/:id/progress", cfg.MediaHandler.GetMediaReadingProgress)
|
|
protected.PUT("/media-items/:id/progress", cfg.MediaHandler.UpdateMediaReadingProgress)
|
|
protected.DELETE("/media-items/:id/progress", cfg.MediaHandler.DeleteMediaReadingProgress)
|
|
|
|
// Notes routes (all authenticated users)
|
|
protected.GET("/media-items/:id/notes", cfg.MediaHandler.GetMediaNotes)
|
|
protected.POST("/media-items/:id/notes", cfg.MediaHandler.CreateMediaNote)
|
|
protected.GET("/media-items/:id/notes/:noteId", cfg.MediaHandler.GetMediaNote)
|
|
protected.PUT("/media-items/:id/notes/:noteId", cfg.MediaHandler.UpdateMediaNote)
|
|
protected.DELETE("/media-items/:id/notes/:noteId", cfg.MediaHandler.DeleteMediaNote)
|
|
|
|
// Highlights routes (all authenticated users)
|
|
protected.GET("/media-items/:id/highlights", cfg.MediaHandler.GetMediaHighlights)
|
|
protected.POST("/media-items/:id/highlights", cfg.MediaHandler.CreateMediaHighlight)
|
|
protected.GET("/media-items/:id/highlights/:highlightId", cfg.MediaHandler.GetMediaHighlight)
|
|
protected.PUT("/media-items/:id/highlights/:highlightId", cfg.MediaHandler.UpdateMediaHighlight)
|
|
protected.DELETE("/media-items/:id/highlights/:highlightId", cfg.MediaHandler.DeleteMediaHighlight)
|
|
|
|
// Admin-only media routes
|
|
admin.POST("/media-items", cfg.MediaHandler.CreateMediaItem)
|
|
admin.PUT("/media-items/:id", cfg.MediaHandler.UpdateMediaItem)
|
|
admin.DELETE("/media-items/:id", cfg.MediaHandler.DeleteMediaItem)
|
|
|
|
// Shelf management (protected)
|
|
protected.POST("/devices/:id/shelves", cfg.MediaHandler.AddToShelf)
|
|
protected.GET("/devices/:id/shelves", cfg.MediaHandler.GetShelf)
|
|
protected.DELETE("/devices/:id/shelves", cfg.MediaHandler.RemoveFromShelf)
|
|
protected.DELETE("/devices/:id/shelves/clear", cfg.MediaHandler.ClearShelf)
|
|
|
|
// Bulk media operations (protected)
|
|
mediaItems := protected.Group("/media-items")
|
|
mediaItems.POST("/bulk-delete", cfg.MediaHandler.HandleBulkDelete)
|
|
mediaItems.POST("/bulk-update", cfg.MediaHandler.HandleBulkUpdate)
|
|
|
|
// File serving - authenticated (registered on Echo to avoid /api prefix)
|
|
// Create a group with JWT middleware for routes outside /api
|
|
authenticated := e.Group("", createJWTMiddleware(cfg))
|
|
// Note: Must be registered LAST as it's a wildcard route
|
|
authenticated.GET("/uploads/library-:id/*", cfg.MediaHandler.ServeFile)
|
|
}
|