Move handler code to router package and rename types

This commit is contained in:
bronku 2025-03-22 08:49:46 +01:00
parent a70d5a8548
commit 4830fbc870
2 changed files with 28 additions and 15 deletions

18
main.go
View file

@ -1,35 +1,35 @@
package main package main
import ( import (
"html/template"
"log" "log"
"net/http" "net/http"
"github.com/Bronku/iroon/auth" "github.com/Bronku/iroon/auth"
"github.com/Bronku/iroon/middleware" "github.com/Bronku/iroon/middleware"
"github.com/Bronku/iroon/store" "github.com/Bronku/iroon/router"
) )
func main() { func main() {
var err error var err error
var h handler var h router.Router
var a auth.Authenticator 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 { if err != nil {
log.Fatal("can't parse templates: ", err) log.Fatal("can't parse templates: ", err)
} }
h.s, err = store.OpenStore("./foo.db") err = h.OenStore()
if err != nil { if err != nil {
log.Fatal("can't open the databse", err) log.Fatal("can't open the databse", err)
} }
a = auth.New() a = auth.New()
http.HandleFunc("GET /order/", middleware.Logger(a.Authenticate(h.form))) // #todo: make handler functions private, and create a servemux in router
http.HandleFunc("GET /", middleware.Logger(a.Authenticate(h.index))) http.HandleFunc("GET /order/", middleware.Logger(a.Authenticate(h.Form)))
http.HandleFunc("POST /", middleware.Logger(a.Authenticate(h.addOrder))) http.HandleFunc("GET /", middleware.Logger(a.Authenticate(h.Index)))
http.HandleFunc("POST /", middleware.Logger(a.Authenticate(h.AddOrder)))
http.ListenAndServe(":8080", nil) http.ListenAndServe(":8080", nil)
} }

View file

@ -1,4 +1,4 @@
package main package router
import ( import (
"fmt" "fmt"
@ -11,18 +11,31 @@ import (
"github.com/Bronku/iroon/store" "github.com/Bronku/iroon/store"
) )
type handler struct { type Router struct {
tmpl *template.Template tmpl *template.Template
s *store.Store s *store.Store
} }
func (h *handler) close() { func (h *Router) Close() {
if h.s != nil { if h.s != nil {
h.s.Close() 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(), "/") url := strings.Split(r.URL.String(), "/")
o := store.Order{ o := store.Order{
ID: -1, 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() err := r.ParseForm()
if err != nil { if err != nil {
fmt.Println("can't parse the form") 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 <a href='/'>back</a>")) w.Write([]byte("accepted <a href='/'>back</a>"))
} }
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") w.Header().Set("content-type", "text/html")
orders, err := h.s.GetOrders() orders, err := h.s.GetOrders()
if err != nil { if err != nil {