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

51 lines
1.3 KiB
Go

package api
import (
"net/http"
"github.com/gin-gonic/gin"
"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)
a := &api{cfg: cfg, st: st, rdb: rdb, sc: 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", a.login)
p := g.Group("", a.authMw())
p.GET("/auth/me", a.me)
users := p.Group("/users", a.adminOnly())
users.GET("", a.listUsers)
users.POST("", a.createUser)
users.DELETE("/:id", a.deleteUser)
libs := p.Group("/libraries")
libs.GET("", a.listLibraries)
libs.POST("", a.adminOnly(), a.createLibrary)
libs.POST("/:id/scan", a.adminOnly(), a.scanLibrary)
libs.POST("/:id/upload", a.adminOnly(), a.upload)
p.GET("/books", a.listBooks)
p.GET("/books/:id", a.getBook)
p.DELETE("/books/:id", a.adminOnly(), a.deleteBook)
p.GET("/books/:id/cover", a.serveCover)
p.GET("/books/:id/file", a.serveFile)
p.GET("/books/:id/pages", a.pagesCount)
p.GET("/books/:id/pages/:n", a.page)
p.PUT("/books/:id/progress", a.putProgress)
p.GET("/progress", a.listProgress)
return r
}