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) }