113 lines
3.3 KiB
Go
113 lines
3.3 KiB
Go
package handlers
|
|
|
|
import (
|
|
"database/sql"
|
|
"html/template"
|
|
"log"
|
|
"net/http"
|
|
|
|
helpers "synlotto-website/helpers"
|
|
"synlotto-website/models"
|
|
)
|
|
|
|
func NewDrawHandler(db *sql.DB) http.HandlerFunc {
|
|
return helpers.AuthMiddleware(func(w http.ResponseWriter, r *http.Request) {
|
|
context := helpers.TemplateContext(w, r)
|
|
|
|
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 := template.Must(template.New("new_draw").Funcs(helpers.TemplateFuncs()).ParseFiles(
|
|
"templates/layout.html",
|
|
"templates/admin/draws/new_draw.html",
|
|
))
|
|
tmpl.ExecuteTemplate(w, "layout", context)
|
|
})
|
|
}
|
|
|
|
func ModifyDrawHandler(db *sql.DB) http.HandlerFunc {
|
|
return helpers.AuthMiddleware(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 (pseudo-code)
|
|
// id := r.URL.Query().Get("id")
|
|
// query DB, pass into context.Draw
|
|
})
|
|
}
|
|
|
|
func DeleteDrawHandler(db *sql.DB) http.HandlerFunc {
|
|
return helpers.AuthMiddleware(func(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method == http.MethodPost {
|
|
id := r.FormValue("id")
|
|
_, err := db.Exec(`DELETE FROM results_thunderball WHERE id = ?`, id)
|
|
if 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 helpers.AuthMiddleware(func(w http.ResponseWriter, r *http.Request) {
|
|
context := helpers.TemplateContext(w, r)
|
|
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)
|
|
}
|
|
|
|
context["Draws"] = draws
|
|
|
|
tmpl := template.Must(template.New("draw_list").Funcs(helpers.TemplateFuncs()).ParseFiles(
|
|
"templates/layout.html",
|
|
"templates/admin/draws/list.html",
|
|
))
|
|
tmpl.ExecuteTemplate(w, "layout", context)
|
|
})
|
|
}
|