package routes import ( "log/slog" "net/http" "git.codemonkeysoftware.net/b/peachy-go/desktop/components" "git.codemonkeysoftware.net/b/peachy-go/desktop/pages" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" "github.com/go-chi/httplog/v2" ) /* Create a new chi router, configure it and return it. */ func NewChiRouter() *chi.Mux { r := chi.NewRouter() // Useful middleware, see : https://pkg.go.dev/github.com/go-chi/httplog/v2@v2.1.1#NewLogger logger := httplog.NewLogger("app-logger", httplog.Options{ // All log LogLevel: slog.LevelInfo, Concise: true, }) // Use the logger and recoverer middleware. r.Use(httplog.RequestLogger(logger)) r.Use(middleware.Recoverer) /* // ULTRA IMPORTANT : This middleware is used to prevent caching of the pages. // Sometimes, HX requests may be cached by the browser, which may cause unexpected behavior. r.Use(func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Cache-Control", "no-store") next.ServeHTTP(w, r) }) }) */ // Serve static files. r.Handle("/static/*", http.StripPrefix("/static/", http.FileServer(http.Dir("static")))) // Home page r.Get("/", func(w http.ResponseWriter, r *http.Request) { // Render home page HXRender(w, r, pages.HomePage) // 200 OK status w.WriteHeader(http.StatusOK) }) // Hello page r.Get("/hello", func(w http.ResponseWriter, r *http.Request) { // Render hello HXRender(w, r, components.HelloWorld) // 200 OK status w.WriteHeader(http.StatusOK) }) // Listen to port 3000. go http.ListenAndServe(":9245", r) return r }