From ac1f6e9399d3a9486bdedb6bf4143d06c43f7cce Mon Sep 17 00:00:00 2001 From: H3ALY Date: Fri, 24 Oct 2025 13:15:12 +0100 Subject: [PATCH] refactor(template): delegate handler-level RenderError to helpers package - Moved core RenderError logic to internal/helpers/template/error.go - Added thin wrapper method in internal/handlers/template/error.go - Simplified function signature (no config args, uses InitSiteMeta) - Preserved architecture: handlers own HTTP layer, helpers supply logic --- internal/handlers/template/error.go | 46 +++-------------------------- internal/helpers/template/error.go | 38 ++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 42 deletions(-) create mode 100644 internal/helpers/template/error.go diff --git a/internal/handlers/template/error.go b/internal/handlers/template/error.go index d58b643..b516c86 100644 --- a/internal/handlers/template/error.go +++ b/internal/handlers/template/error.go @@ -13,51 +13,13 @@ package handlers //Handlers Own an HTTP concern — e.g. routes, rendering responses, returning templates or JSON. Injected dependencies (cfg, db, etc.). Should use helpers, not vice versa. import ( - "fmt" - "log" "net/http" - "os" templateHelpers "synlotto-website/internal/helpers/template" - - "synlotto-website/internal/models" ) -func RenderError( - w http.ResponseWriter, - r *http.Request, - statusCode int, - siteName string, - copyrightYearStart int, -) { - log.Printf("⚙️ RenderError called with status: %d", statusCode) - - context := templateHelpers.TemplateContext( - w, r, - models.TemplateData{}, - siteName, - copyrightYearStart, - ) - - pagePath := fmt.Sprintf("templates/error/%d.html", statusCode) - log.Printf("📄 Checking for template file: %s", pagePath) - - if _, err := os.Stat(pagePath); err != nil { - log.Printf("🚫 Template file missing: %s", err) - http.Error(w, http.StatusText(statusCode), statusCode) - return - } - - log.Println("✅ Template file found, loading...") - - tmpl := templateHelpers.LoadTemplateFiles(fmt.Sprintf("%d.html", statusCode), pagePath) - - w.WriteHeader(statusCode) - if err := tmpl.ExecuteTemplate(w, "layout", context); err != nil { - log.Printf("❌ Failed to render error page layout: %v", err) - http.Error(w, http.StatusText(statusCode), statusCode) - return - } - - log.Println("✅ Successfully rendered error page") // ToDo: log these to db +// RenderError delegates to the helper's RenderError, ensuring handlers remain +// the entry point for rendering HTTP responses. +func (h *Handler) RenderError(w http.ResponseWriter, r *http.Request, statusCode int) { + templateHelpers.RenderError(w, r, statusCode) } diff --git a/internal/helpers/template/error.go b/internal/helpers/template/error.go new file mode 100644 index 0000000..9e9f6dd --- /dev/null +++ b/internal/helpers/template/error.go @@ -0,0 +1,38 @@ +package helpers + +import ( + "fmt" + "log" + "net/http" + "os" + + "synlotto-website/internal/models" +) + +// RenderError renders an HTML error page (e.g., 404.html, 500.html). +// It uses TemplateContext which reads site meta from InitSiteMeta(). +func RenderError(w http.ResponseWriter, r *http.Request, statusCode int) { + log.Printf("⚙️ RenderError called with status: %d", statusCode) + + ctx := TemplateContext(w, r, models.TemplateData{}) + + pagePath := fmt.Sprintf("templates/error/%d.html", statusCode) + log.Printf("📄 Checking for template file: %s", pagePath) + + if _, err := os.Stat(pagePath); err != nil { + log.Printf("🚫 Template file missing: %s", err) + http.Error(w, http.StatusText(statusCode), statusCode) + return + } + + tmpl := LoadTemplateFiles(fmt.Sprintf("%d.html", statusCode), pagePath) + + w.WriteHeader(statusCode) + if err := tmpl.ExecuteTemplate(w, "layout", ctx); err != nil { + log.Printf("❌ Failed to render error page layout: %v", err) + http.Error(w, http.StatusText(statusCode), statusCode) + return + } + + log.Println("✅ Successfully rendered error page") +}