Files
book-comic-library/backend/cmd/webui/api/router.go
T

52 lines
1.4 KiB
Go

package api
import (
"net/http"
"github.com/gin-gonic/gin"
"booklib/cmd/webui/handlers"
"booklib/internal/config"
"booklib/internal/redispkg"
"booklib/internal/scanner"
"booklib/internal/store"
)
func NewRouter(cfg *config.Config, st *store.Store, rdb *redispkg.R, sc *scanner.Scanner) *gin.Engine {
gin.SetMode(gin.ReleaseMode)
h := handlers.New(cfg, st, rdb, sc)
r := gin.New()
if e := r.SetTrustedProxies(cfg.TrustedProxies); e != nil {
panic(e)
}
r.Use(gin.Recovery())
g := r.Group("/api")
g.GET("/healthz", func(c *gin.Context) { c.String(http.StatusOK, "ok") })
g.POST("/auth/login", h.Login)
p := g.Group("", h.AuthMw())
p.GET("/auth/me", h.Me)
users := p.Group("/users", h.AdminOnly())
users.GET("", h.ListUsers)
users.POST("", h.CreateUser)
users.DELETE("/:id", h.DeleteUser)
libs := p.Group("/libraries")
libs.GET("", h.ListLibraries)
libs.POST("", h.AdminOnly(), h.CreateLibrary)
libs.POST("/:id/scan", h.AdminOnly(), h.ScanLibrary)
libs.POST("/:id/upload", h.AdminOnly(), h.Upload)
p.GET("/books", h.ListBooks)
p.GET("/books/:id", h.GetBook)
p.DELETE("/books/:id", h.AdminOnly(), h.DeleteBook)
p.GET("/books/:id/cover", h.ServeCover)
p.GET("/books/:id/file", h.ServeFile)
p.GET("/books/:id/pages", h.PagesCount)
p.GET("/books/:id/pages/:n", h.Page)
p.PUT("/books/:id/progress", h.PutProgress)
p.GET("/progress", h.ListProgress)
return r
}