Files
guz.one/router.go

44 lines
1.1 KiB
Go

package main
import (
"log/slog"
"net/http"
"code.capytal.cc/loreddev/smalltrip"
"code.capytal.cc/loreddev/smalltrip/middleware"
"code.capytal.cc/loreddev/smalltrip/multiplexer"
"code.capytal.cc/loreddev/smalltrip/problem"
"code.capytal.cc/loreddev/x/xtemplate"
)
type router struct {
assets http.Handler
templates xtemplate.Templater
logger *slog.Logger
}
func (ctrl *router) ServeHTTP(w http.ResponseWriter, r *http.Request) {
mux := multiplexer.New()
mux = multiplexer.WithPatternRules(mux,
multiplexer.EnsureMethod(),
multiplexer.EnsureStrictEnd(),
multiplexer.EnsureTrailingSlash(),
)
router := smalltrip.NewRouter(smalltrip.WithMultiplexer(mux), smalltrip.WithLogger(ctrl.logger))
router.Use(problem.Middleware(problem.DefaultHandler))
router.Use(middleware.Logger(ctrl.logger))
router.Handle("GET /assets/{file...}", ctrl.assets)
router.HandleFunc("GET /{$}", ctrl.landing)
router.ServeHTTP(w, r)
}
func (ctrl *router) landing(w http.ResponseWriter, r *http.Request) {
if err := ctrl.templates.ExecuteTemplate(w, "landing", nil); err != nil {
problem.NewInternalServerError(err).ServeHTTP(w, r)
}
}