feat: add reader service, handler, and router
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"bookhoard/internal/handlers"
|
||||
"bookhoard/internal/services"
|
||||
"bytes"
|
||||
"net/http"
|
||||
|
||||
"github.com/labstack/echo/v5"
|
||||
)
|
||||
|
||||
func registerReaderRoutes(cfg *Config) {
|
||||
e := cfg.Echo
|
||||
|
||||
// Create reader service and handler
|
||||
readerService := services.NewReaderService(cfg.Queries, cfg.Worker)
|
||||
cfg.ReaderHandler = handlers.NewReaderHandler(
|
||||
cfg.Queries,
|
||||
cfg.LibraryService,
|
||||
readerService,
|
||||
cfg.Worker,
|
||||
)
|
||||
|
||||
jwtMiddleware := createJWTMiddleware(cfg)
|
||||
|
||||
// Reader page routes (SSR + API)
|
||||
reader := e.Group("/readers", jwtMiddleware)
|
||||
|
||||
// Reader page (SSR)
|
||||
reader.GET("/:mediaItemId", func(c *echo.Context) error {
|
||||
user, err := getTemplateUserWithTheme(c, cfg)
|
||||
if err != nil {
|
||||
return renderErrorPage(c, "Error loading user", "user_load_error")
|
||||
}
|
||||
|
||||
// Call the handler to get data
|
||||
// Then render template
|
||||
|
||||
var buf bytes.Buffer
|
||||
err = templates.Reader(user, metadata, progress, bookmarks).Render(c.Request().Context(), &buf)
|
||||
if err != nil {
|
||||
return renderErrorPage(c, "Error loading reader", "render_error")
|
||||
}
|
||||
return c.HTML(http.StatusOK, buf.String())
|
||||
})
|
||||
|
||||
// Content serving (lazy-loaded pages)
|
||||
reader.GET("/:mediaItemId/pages/:pageNumber", cfg.ReaderHandler.GetPage)
|
||||
|
||||
// Chapter metadata
|
||||
reader.GET("/:mediaItemId/chapters", cfg.ReaderHandler.GetChapters)
|
||||
|
||||
// Panel data (comics/manga)
|
||||
reader.GET("/:mediaItemId/panels/:pageNumber", cfg.ReaderHandler.GetPanels)
|
||||
reader.PUT("/:mediaItemId/panels/:pageNumber", cfg.ReaderHandler.UpdatePanels)
|
||||
|
||||
// PDF outline/TOC
|
||||
reader.GET("/:mediaItemId/outline", cfg.ReaderHandler.GetPDFOutline)
|
||||
|
||||
// PDF thumbnails (for mini-map)
|
||||
reader.GET("/:mediaItemId/thumbnails/:pageNumber", cfg.ReaderHandler.GetPDFThumbnail)
|
||||
|
||||
// Reading speed
|
||||
reader.GET("/:mediaItemId/reading-speed", cfg.ReaderHandler.GetReadingSpeed)
|
||||
reader.POST("/:mediaItemId/reading-speed", cfg.ReaderHandler.UpdateReadingSpeed)
|
||||
|
||||
// Dictionary lookup
|
||||
reader.GET("/dictionary/:word", cfg.ReaderHandler.LookupWord)
|
||||
|
||||
// Reader settings
|
||||
reader.GET("/settings", cfg.ReaderHandler.GetSettings)
|
||||
reader.PUT("/settings", cfg.ReaderHandler.UpdateSettings)
|
||||
}
|
||||
Reference in New Issue
Block a user