diff options
Diffstat (limited to 'internal/server')
| -rw-r--r-- | internal/server/handlers/handlers.go | 25 | ||||
| -rw-r--r-- | internal/server/handlers/pages.go | 24 | ||||
| -rw-r--r-- | internal/server/server.go | 36 | ||||
| -rw-r--r-- | internal/server/server_test.go | 22 |
4 files changed, 79 insertions, 28 deletions
diff --git a/internal/server/handlers/handlers.go b/internal/server/handlers/handlers.go new file mode 100644 index 0000000..958ca30 --- /dev/null +++ b/internal/server/handlers/handlers.go @@ -0,0 +1,25 @@ +package handlers + +import ( + "html/template" + "net/http" + + "codeberg.org/mihna123/openstore/internal/config" + "codeberg.org/mihna123/openstore/internal/web" +) + +type Handler struct { + tmpl *template.Template + cfg *config.Config +} + +func Routes(conf *config.Config) *http.ServeMux { + handler := Handler{ + tmpl: template.Must(template.ParseFS(web.Files, "templates/*.html")), + cfg: conf, + } + mux := http.NewServeMux() + mux.HandleFunc("GET /{$}", handler.home) + + return mux +} diff --git a/internal/server/handlers/pages.go b/internal/server/handlers/pages.go new file mode 100644 index 0000000..8c5bfb5 --- /dev/null +++ b/internal/server/handlers/pages.go @@ -0,0 +1,24 @@ +package handlers + +import ( + "log/slog" + "net/http" + + "codeberg.org/mihna123/openstore/internal/config" +) + +type Page struct { + Lang string + Instance config.Instance + Data any +} + +func (h *Handler) home(w http.ResponseWriter, r *http.Request) { + page := Page{Lang: "en", Instance: h.cfg.Instance} + err := h.tmpl.ExecuteTemplate(w, "index.html", page) + + if err != nil { + slog.Error("render template", "err", err.Error()) + return + } +} diff --git a/internal/server/server.go b/internal/server/server.go index a444958..a2f2d45 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -5,55 +5,39 @@ import ( "net" "time" - "html/template" "net/http" - "codeberg.org/mihna123/openstore/internal/web" + "codeberg.org/mihna123/openstore/internal/config" + "codeberg.org/mihna123/openstore/internal/server/handlers" ) -type Config struct { - Name string -} - type Server struct { - config *Config - tmpl *template.Template + config *config.Config mux *http.ServeMux } -func (s *Server) routes() { - s.mux.HandleFunc("GET /{$}", func(w http.ResponseWriter, r *http.Request) { - err := s.tmpl.ExecuteTemplate(w, "index.html", s.config) - - if err != nil { - slog.Error("render template", "err", err.Error()) - return - } - }) -} - -func (s *Server) Serve(addr string) error { +func (s *Server) Serve() error { httpSrv := &http.Server{ Handler: logRequests(s.mux), ReadHeaderTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, } - ln, err := net.Listen("tcp", addr) + ln, err := net.Listen("tcp", s.config.Serve.Addr) if err != nil { return err } - slog.Info("listening", "name", s.config.Name, "addr", addr) + slog.Info("listening", "name", s.config.Instance.Name, "addr", s.config.Serve.Addr) return httpSrv.Serve(ln) } -func New(c *Config) *Server { +func New(c *config.Config) *Server { + mux := handlers.Routes(c) s := &Server{ config: c, - mux: http.NewServeMux(), - tmpl: template.Must(template.ParseFS(web.Files, "templates/*.html")), + mux: mux, } - s.routes() + return s } diff --git a/internal/server/server_test.go b/internal/server/server_test.go index 7e6a748..aea434f 100644 --- a/internal/server/server_test.go +++ b/internal/server/server_test.go @@ -7,6 +7,8 @@ import ( "os" "strings" "testing" + + "codeberg.org/mihna123/openstore/internal/config" ) func TestMain(m *testing.M) { @@ -14,9 +16,23 @@ func TestMain(m *testing.M) { os.Exit(m.Run()) } +func newTestConfig(t *testing.T) *config.Config { + t.Helper() + return &config.Config{ + Serve: config.Serve{ + Addr: ":3000", + }, + Instance: config.Instance{ + Name: "TestStore", + ContactEmail: "test@email.com", + BaseURL: "https://example.com", + }, + } +} + func newTestServer(t *testing.T) *Server { t.Helper() - return New(&Config{Name: "test"}) + return New(newTestConfig(t)) } func TestRoutes(t *testing.T) { @@ -47,7 +63,9 @@ func TestRoutes(t *testing.T) { } func TestIndexRendersTemplate(t *testing.T) { - s := New(&Config{Name: "testname123"}) + cfg := newTestConfig(t) + cfg.Instance.Name = "testname123" + s := New(cfg) rec := httptest.NewRecorder() s.mux.ServeHTTP(rec, httptest.NewRequest(http.MethodGet, "/", nil)) |
