Cleanup: Finalize template context integration and remove legacy code

- Replaced legacy TemplateContext calls with structured TemplateData usage
- Removed unused variables and redundant storage calls in notifications handler
- Ensured consistent use of BuildTemplateData across user-facing handlers
- Resolved all compile-time errors from refactor
- Ready for runtime testing and further layout integration
This commit is contained in:
2025-04-01 21:20:05 +01:00
parent 03b1e095ce
commit 5ea780fcab
11 changed files with 35 additions and 45 deletions

View File

@@ -24,7 +24,7 @@ func Login(w http.ResponseWriter, r *http.Request) {
"templates/account/login.html",
))
context := helpers.TemplateContext(w, r)
context := helpers.TemplateContext(w, r, models.TemplateData{})
context["csrfField"] = csrf.TemplateField(r)
err := tmpl.ExecuteTemplate(w, "layout", context)

View File

@@ -20,7 +20,7 @@ type AdminLogEntry struct {
func AdminAccessLogHandler(db *sql.DB) http.HandlerFunc {
return middleware.Auth(true)(func(w http.ResponseWriter, r *http.Request) {
context := helpers.TemplateContext(w, r)
context := helpers.TemplateContext(w, r, models.TemplateData{})
rows, err := db.Query(`
SELECT accessed_at, user_id, path, ip, user_agent
@@ -56,7 +56,7 @@ func AdminAccessLogHandler(db *sql.DB) http.HandlerFunc {
func AuditLogHandler(db *sql.DB) http.HandlerFunc {
return middleware.Auth(true)(func(w http.ResponseWriter, r *http.Request) {
context := helpers.TemplateContext(w, r)
context := helpers.TemplateContext(w, r, models.TemplateData{})
rows, err := db.Query(`
SELECT timestamp, user_id, action, ip, user_agent

View File

@@ -20,7 +20,7 @@ func AdminDashboardHandler(db *sql.DB) http.HandlerFunc {
// TODO: check is_admin from users table here
context := helpers.TemplateContext(w, r)
context := helpers.TemplateContext(w, r, models.TemplateData{})
// Total ticket stats
var total, winners int

View File

@@ -12,7 +12,7 @@ import (
func NewDrawHandler(db *sql.DB) http.HandlerFunc {
return helpers.AuthMiddleware(func(w http.ResponseWriter, r *http.Request) {
context := helpers.TemplateContext(w, r)
context := helpers.TemplateContext(w, r, models.TemplateData{})
if r.Method == http.MethodPost {
game := r.FormValue("game_type")
@@ -75,7 +75,7 @@ func DeleteDrawHandler(db *sql.DB) http.HandlerFunc {
func ListDrawsHandler(db *sql.DB) http.HandlerFunc {
return helpers.AuthMiddleware(func(w http.ResponseWriter, r *http.Request) {
context := helpers.TemplateContext(w, r)
context := helpers.TemplateContext(w, r, models.TemplateData{})
draws := []models.DrawSummary{}
rows, err := db.Query(`

View File

@@ -10,12 +10,13 @@ import (
"strconv"
"synlotto-website/helpers"
"synlotto-website/models"
services "synlotto-website/services/tickets"
)
func AdminTriggersHandler(db *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
context := helpers.TemplateContext(w, r)
context := helpers.TemplateContext(w, r, models.TemplateData{})
// Inject flash message if available
if flash := r.URL.Query().Get("flash"); flash != "" {

View File

@@ -7,6 +7,7 @@ import (
"net/http"
"strconv"
"synlotto-website/helpers"
"synlotto-website/models"
)
func AddPrizesHandler(db *sql.DB) http.HandlerFunc {
@@ -16,7 +17,7 @@ func AddPrizesHandler(db *sql.DB) http.HandlerFunc {
"templates/layout.html",
"templates/admin/draws/prizes/add_prizes.html",
))
tmpl.ExecuteTemplate(w, "layout", helpers.TemplateContext(w, r))
tmpl.ExecuteTemplate(w, "layout", helpers.TemplateContext(w, r, models.TemplateData{}))
return
}
@@ -50,7 +51,7 @@ func ModifyPrizesHandler(db *sql.DB) http.HandlerFunc {
"templates/layout.html",
"templates/admin/draws/prizes/modify_prizes.html",
))
tmpl.ExecuteTemplate(w, "layout", helpers.TemplateContext(w, r))
tmpl.ExecuteTemplate(w, "layout", helpers.TemplateContext(w, r, models.TemplateData{}))
return
}

View File

@@ -14,7 +14,7 @@ func NewDraw(db *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
log.Println("➡️ New draw form opened")
context := BuildTemplateContext(db, w, r)
context := helpers.TemplateContext(w, r, models.TemplateData{})
context["Page"] = "new_draw"
context["Data"] = nil

View File

@@ -46,7 +46,8 @@ func Home(db *sql.DB) http.HandlerFunc {
results = append(results, res)
}
context := BuildTemplateContext(db, w, r)
data := BuildTemplateData(db, w, r)
context := helpers.TemplateContext(w, r, data)
context["Data"] = results
tmpl := template.Must(template.New("").Funcs(helpers.TemplateFuncs()).ParseFiles(

View File

@@ -1,44 +1,29 @@
package handlers
import (
"database/sql"
"net/http"
"text/template"
"synlotto-website/helpers"
"synlotto-website/models"
"synlotto-website/storage"
)
func NotificationsHandler(w http.ResponseWriter, r *http.Request) {
session, _ := helpers.GetSession(w, r)
func NotificationsHandler(db *sql.DB) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
data := BuildTemplateData(db, w, r)
context := helpers.TemplateContext(w, r, data)
var user *models.User
switch v := session.Values["user_id"].(type) {
case int:
user = models.GetUserByID(v)
case int64:
user = models.GetUserByID(int(v))
}
tmpl := template.Must(template.New("notifications.html").
Funcs(helpers.TemplateFuncs()).
ParseFiles(
"templates/layout.html",
"templates/topbar.html",
"templates/notifications/index.html",
))
var (
isAdmin bool
notificationCount int
notifications []models.Notification
)
if user != nil {
isAdmin = user.IsAdmin
notificationCount = storage.GetNotificationCount(user.Id)
notifications = storage.GetRecentNotifications(user.Id, 15)
}
tmpl := template.Must(template.New("notifications.html").
Funcs(helpers.TemplateFuncs()).
ParseFiles("templates/notifications.html"))
context := helpers.TemplateContext(w, r, user, isAdmin, notificationCount, notifications)
if err := tmpl.Execute(w, context); err != nil {
http.Error(w, "Template rendering error", http.StatusInternalServerError)
err := tmpl.ExecuteTemplate(w, "layout", context)
if err != nil {
http.Error(w, "Error rendering notifications page", http.StatusInternalServerError)
}
}
}

View File

@@ -40,7 +40,7 @@ func AddTicket(db *sql.DB) http.HandlerFunc {
}
}
context := helpers.TemplateContext(w, r)
context := helpers.TemplateContext(w, r, models.TemplateData{})
context["csrfField"] = csrf.TemplateField(r)
context["DrawDates"] = drawDates
@@ -359,7 +359,7 @@ func GetMyTickets(db *sql.DB) http.HandlerFunc {
tickets = append(tickets, t)
}
context := helpers.TemplateContext(w, r)
context := helpers.TemplateContext(w, r, models.TemplateData{})
context["Tickets"] = tickets
tmpl := template.Must(template.New("").Funcs(helpers.TemplateFuncs()).ParseFiles(

View File

@@ -4,10 +4,12 @@ package helpers
import (
"html/template"
"net/http"
"synlotto-website/models"
)
func Render403(w http.ResponseWriter, r *http.Request) {
context := TemplateContext(w, r)
context := TemplateContext(w, r, models.TemplateData{})
tmpl := template.Must(template.New("").Funcs(TemplateFuncs()).ParseFiles(
"templates/layout.html",
"templates/error/403.html",