From 869fb9691f877116d5b15a92de006d0daf4d70e5 Mon Sep 17 00:00:00 2001 From: René 'Necoro' Neumann Date: Thu, 17 Oct 2024 00:27:08 +0200 Subject: Restructure and change to chi as muxing framework --- pages/page.go | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 pages/page.go (limited to 'pages/page.go') diff --git a/pages/page.go b/pages/page.go new file mode 100644 index 0000000..25c2331 --- /dev/null +++ b/pages/page.go @@ -0,0 +1,58 @@ +package pages + +import ( + "context" + "gosten/model" + "gosten/templ" + "log" + "net/http" + + "github.com/go-chi/chi/v5" +) + +var Q *model.Queries + +func Connect(tx model.DBTX) { + Q = model.New(tx) +} + +type Page interface { + http.Handler +} + +type dataFunc func(r *http.Request, uid int32) any + +type simplePage struct { + dataFn dataFunc + template string +} + +func (p simplePage) ServeHTTP(w http.ResponseWriter, r *http.Request) { + input := p.dataFn(r, userId(r)) + p.showTemplate(w, input) +} + +func simpleByQuery[T any](tpl string, query func(ctx context.Context, id int32) (T, error)) Page { + dataFn := func(r *http.Request, uid int32) any { + d, _ := query(r.Context(), uid) + return d + } + return simple(tpl, dataFn) +} + +func simple(tpl string, dataFn dataFunc) Page { + p := simplePage{dataFn, tpl} + r := chi.NewRouter() + r.Get("/", p.ServeHTTP) + return r +} + +func showTemplate(w http.ResponseWriter, tpl string, data any) { + if err := templ.Lookup(tpl).Execute(w, data); err != nil { + log.Panicf("Executing '%s' with %+v: %v", tpl, data, err) + } +} + +func (p simplePage) showTemplate(w http.ResponseWriter, data any) { + showTemplate(w, p.template, data) +} -- cgit v1.2.3-70-g09d2