From 4830fbc870c77a0a5e0b15ac6774d46d8d922022 Mon Sep 17 00:00:00 2001 From: bronku Date: Sat, 22 Mar 2025 08:49:46 +0100 Subject: [PATCH] Move handler code to router package and rename types --- main.go | 18 +++++++++--------- handler.go => router/handler.go | 25 +++++++++++++++++++------ 2 files changed, 28 insertions(+), 15 deletions(-) rename handler.go => router/handler.go (83%) diff --git a/main.go b/main.go index 46b7ab4..a7852dc 100644 --- a/main.go +++ b/main.go @@ -1,35 +1,35 @@ package main import ( - "html/template" "log" "net/http" "github.com/Bronku/iroon/auth" "github.com/Bronku/iroon/middleware" - "github.com/Bronku/iroon/store" + "github.com/Bronku/iroon/router" ) func main() { var err error - var h handler + var h router.Router var a auth.Authenticator - defer h.close() + defer h.Close() - h.tmpl, err = template.ParseFiles("index.html", "order.html") + err = h.LoadTemplates() if err != nil { log.Fatal("can't parse templates: ", err) } - h.s, err = store.OpenStore("./foo.db") + err = h.OenStore() if err != nil { log.Fatal("can't open the databse", err) } a = auth.New() - http.HandleFunc("GET /order/", middleware.Logger(a.Authenticate(h.form))) - http.HandleFunc("GET /", middleware.Logger(a.Authenticate(h.index))) - http.HandleFunc("POST /", middleware.Logger(a.Authenticate(h.addOrder))) + // #todo: make handler functions private, and create a servemux in router + http.HandleFunc("GET /order/", middleware.Logger(a.Authenticate(h.Form))) + http.HandleFunc("GET /", middleware.Logger(a.Authenticate(h.Index))) + http.HandleFunc("POST /", middleware.Logger(a.Authenticate(h.AddOrder))) http.ListenAndServe(":8080", nil) } diff --git a/handler.go b/router/handler.go similarity index 83% rename from handler.go rename to router/handler.go index eb518bf..c072d57 100644 --- a/handler.go +++ b/router/handler.go @@ -1,4 +1,4 @@ -package main +package router import ( "fmt" @@ -11,18 +11,31 @@ import ( "github.com/Bronku/iroon/store" ) -type handler struct { +type Router struct { tmpl *template.Template s *store.Store } -func (h *handler) close() { +func (h *Router) Close() { if h.s != nil { h.s.Close() } } -func (h *handler) form(w http.ResponseWriter, r *http.Request) { +func (h *Router) OenStore() error { + var err error + h.s, err = store.OpenStore("./foo.db") + return err +} + +// #todo embed templates, and load them in init function +func (h *Router) LoadTemplates() error { + var err error + h.tmpl, err = template.ParseFiles("index.html", "order.html") + return err +} + +func (h *Router) Form(w http.ResponseWriter, r *http.Request) { url := strings.Split(r.URL.String(), "/") o := store.Order{ ID: -1, @@ -55,7 +68,7 @@ func (h *handler) form(w http.ResponseWriter, r *http.Request) { } } -func (h *handler) addOrder(w http.ResponseWriter, r *http.Request) { +func (h *Router) AddOrder(w http.ResponseWriter, r *http.Request) { err := r.ParseForm() if err != nil { fmt.Println("can't parse the form") @@ -126,7 +139,7 @@ func (h *handler) addOrder(w http.ResponseWriter, r *http.Request) { w.Write([]byte("accepted back")) } -func (h *handler) index(w http.ResponseWriter, r *http.Request) { +func (h *Router) Index(w http.ResponseWriter, r *http.Request) { w.Header().Set("content-type", "text/html") orders, err := h.s.GetOrders() if err != nil {