package handlers // ToDo: move SQL into storage layer import ( "database/sql" "log" "net/http" templateHelpers "synlotto-website/internal/helpers/template" "synlotto-website/internal/models" ) func NewDrawHandler(db *sql.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { data := models.TemplateData{} ctx := templateHelpers.TemplateContext(w, r, data) if r.Method == http.MethodPost { game := r.FormValue("game_type") date := r.FormValue("draw_date") machine := r.FormValue("machine") ballset := r.FormValue("ball_set") _, err := db.Exec( `INSERT INTO results_thunderball (game_type, draw_date, machine, ball_set) VALUES (?, ?, ?, ?)`, game, date, machine, ballset, ) if err != nil { http.Error(w, "Failed to add draw", http.StatusInternalServerError) return } http.Redirect(w, r, "/admin/dashboard", http.StatusSeeOther) return } tmpl := templateHelpers.LoadTemplateFiles("new_draw", "web/templates/admin/draws/new_draw.html") _ = tmpl.ExecuteTemplate(w, "layout", ctx) } } func ModifyDrawHandler(db *sql.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { if r.Method == http.MethodPost { id := r.FormValue("id") _, err := db.Exec( `UPDATE results_thunderball SET game_type=?, draw_date=?, ball_set=?, machine=? WHERE id=?`, r.FormValue("game_type"), r.FormValue("draw_date"), r.FormValue("ball_set"), r.FormValue("machine"), id, ) if err != nil { http.Error(w, "Update failed", http.StatusInternalServerError) return } http.Redirect(w, r, "/admin/dashboard", http.StatusSeeOther) return } // For GET: load draw by ID if needed and render a form/template } } func DeleteDrawHandler(db *sql.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { if r.Method == http.MethodPost { id := r.FormValue("id") if _, err := db.Exec(`DELETE FROM results_thunderball WHERE id = ?`, id); err != nil { http.Error(w, "Delete failed", http.StatusInternalServerError) return } http.Redirect(w, r, "/admin/dashboard", http.StatusSeeOther) return } } } func ListDrawsHandler(db *sql.DB) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { data := models.TemplateData{} ctx := templateHelpers.TemplateContext(w, r, data) var draws []models.DrawSummary rows, err := db.Query(` SELECT r.id, r.game_type, r.draw_date, r.ball_set, r.machine, (SELECT COUNT(1) FROM prizes_thunderball p WHERE p.draw_date = r.draw_date) as prize_exists FROM results_thunderball r ORDER BY r.draw_date DESC `) if err != nil { http.Error(w, "Failed to query draws", http.StatusInternalServerError) return } defer rows.Close() for rows.Next() { var d models.DrawSummary var prizeFlag int if err := rows.Scan(&d.Id, &d.GameType, &d.DrawDate, &d.BallSet, &d.Machine, &prizeFlag); err != nil { log.Println("⚠️ Draw scan failed:", err) continue } d.PrizeSet = prizeFlag > 0 draws = append(draws, d) } ctx["Draws"] = draws tmpl := templateHelpers.LoadTemplateFiles("list.html", "web/templates/admin/draws/list.html") _ = tmpl.ExecuteTemplate(w, "layout", ctx) } }