diff --git a/handlers/ticket_handler.go b/handlers/ticket_handler.go index fbb2794..db447cb 100644 --- a/handlers/ticket_handler.go +++ b/handlers/ticket_handler.go @@ -270,27 +270,32 @@ func GetMyTickets(db *sql.DB) http.HandlerFunc { return helpers.AuthMiddleware(func(w http.ResponseWriter, r *http.Request) { userID, ok := helpers.GetCurrentUserID(r) if !ok { + log.Println("🚫 Not logged in, redirecting") http.Redirect(w, r, "/login", http.StatusSeeOther) return } + log.Printf("πŸ‘€ Fetching tickets for user ID: %d\n", userID) + rows, err := db.Query(` SELECT id, game_type, draw_date, ball1, ball2, ball3, ball4, ball5, ball6, bonus1, bonus2, purchase_method, purchase_date, image_path FROM my_tickets - WHERE user_id = ? + WHERE userId = ? ORDER BY draw_date DESC, created_at DESC `, userID) + if err != nil { - log.Println("❌ Failed to load user tickets:", err) - http.Error(w, "Error loading tickets", http.StatusInternalServerError) + log.Println("❌ Query failed:", err) + http.Error(w, "Could not load tickets", http.StatusInternalServerError) return } defer rows.Close() var tickets []models.MyTicket + for rows.Next() { var t models.MyTicket err := rows.Scan( @@ -299,11 +304,15 @@ func GetMyTickets(db *sql.DB) http.HandlerFunc { &t.Bonus1, &t.Bonus2, &t.PurchaseMethod, &t.PurchaseDate, &t.ImagePath, ) - if err == nil { - tickets = append(tickets, t) + if err != nil { + log.Println("⚠️ Failed to scan ticket row:", err) + continue } + tickets = append(tickets, t) } + log.Printf("πŸ“„ Loaded %d tickets\n", len(tickets)) + context := helpers.TemplateContext(w, r) context["Tickets"] = tickets @@ -311,6 +320,11 @@ func GetMyTickets(db *sql.DB) http.HandlerFunc { "templates/layout.html", "templates/account/tickets/my_tickets.html", )) - tmpl.ExecuteTemplate(w, "layout", context) + + err = tmpl.ExecuteTemplate(w, "layout", context) + if err != nil { + log.Println("❌ Template error:", err) + http.Error(w, "Error rendering page", http.StatusInternalServerError) + } }) } diff --git a/helpers/template.go b/helpers/template.go index 81e2311..a6b2817 100644 --- a/helpers/template.go +++ b/helpers/template.go @@ -23,6 +23,12 @@ func TemplateFuncs() template.FuncMap { } return b }, + "intVal": func(p *int) int { + if p == nil { + return 0 + } + return *p + }, } } diff --git a/models/myticket.go b/models/myticket.go index 4f67040..455a730 100644 --- a/models/myticket.go +++ b/models/myticket.go @@ -1,15 +1,19 @@ package models type MyTicket struct { - Id int - GameType string - DrawDate string - Ball1 int - Ball2 int - Ball3 int - Ball4 int - Ball5 int - Bonus1 *int - Bonus2 *int - Duplicate bool + Id int + GameType string + DrawDate string + Ball1 int + Ball2 int + Ball3 int + Ball4 int + Ball5 int + Ball6 int + Bonus1 *int + Bonus2 *int + PurchaseMethod string + PurchaseDate string + ImagePath string + Duplicate bool } diff --git a/templates/account/tickets/my_tickets.html b/templates/account/tickets/my_tickets.html new file mode 100644 index 0000000..3e1d7ad --- /dev/null +++ b/templates/account/tickets/my_tickets.html @@ -0,0 +1,53 @@ +{{ define "content" }} ++ Add Ticket +

My Tickets

+ +{{ if eq (len .Tickets) 0 }} +

You haven’t logged any tickets yet.

+{{ else }} + + + + + + + + + + + + + + {{ range .Tickets }} + + + + + + + + + + {{ end }} + +
GameDraw DateNumbersBonusPurchasedViaImage
{{ .GameType }}{{ .DrawDate }} + {{ .Ball1 }} {{ .Ball2 }} {{ .Ball3 }} {{ .Ball4 }} {{ .Ball5 }} + {{ if ne .Ball6 0 }} {{ .Ball6 }} {{ end }} + + {{ if eq .GameType "Lotto" }} + – + {{ else if gt (intVal .Bonus2) 0 }} + {{ if gt (intVal .Bonus1) 0 }}{{ intVal .Bonus1 }}, {{ end }} + {{ intVal .Bonus2 }} + {{ else if gt (intVal .Bonus1) 0 }} + {{ intVal .Bonus1 }} + {{ else }} + – + {{ end }} + {{ .PurchaseDate }}{{ .PurchaseMethod }} + {{ if .ImagePath }} + View + {{ else }}–{{ end }} +
+{{ end }} +{{ end }}