package storage import ( "database/sql" "log" "strings" "synlotto-website/helpers" "synlotto-website/models" ) func InsertThunderballResult(db *sql.DB, res models.ThunderballResult) error { stmt := ` INSERT INTO results_thunderball ( draw_date, machine, ballset, ball1, ball2, ball3, ball4, ball5, thunderball ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);` _, err := db.Exec(stmt, res.DrawDate, res.Machine, res.BallSet, res.Ball1, res.Ball2, res.Ball3, res.Ball4, res.Ball5, res.Thunderball, ) if err != nil { if strings.Contains(err.Error(), "UNIQUE constraint failed") { log.Printf("⚠️ Draw for %s already exists. Skipping insert.\n", res.DrawDate) return nil } log.Println("❌ InsertThunderballResult error:", err) } return err } func InsertTicket(db *sql.DB, ticket models.Ticket) error { var bonus1Val interface{} var bonus2Val interface{} if ticket.Bonus1 != nil { bonus1Val = helpers.Nullable(*ticket.Bonus1) } else { bonus1Val = nil } if ticket.Bonus2 != nil { bonus2Val = helpers.Nullable(*ticket.Bonus2) } else { bonus2Val = nil } query := ` SELECT COUNT(*) FROM my_tickets WHERE game_type = ? AND draw_date = ? AND ball1 = ? AND ball2 = ? AND ball3 = ? AND ball4 = ? AND ball5 = ? AND bonus1 IS ? AND bonus2 IS ?;` var count int err := db.QueryRow(query, ticket.GameType, ticket.DrawDate, ticket.Ball1, ticket.Ball2, ticket.Ball3, ticket.Ball4, ticket.Ball5, bonus1Val, bonus2Val, ).Scan(&count) isDuplicate := count > 0 insert := ` INSERT INTO my_tickets ( game_type, draw_date, ball1, ball2, ball3, ball4, ball5, bonus1, bonus2, duplicate ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);` _, err = db.Exec(insert, ticket.GameType, ticket.DrawDate, ticket.Ball1, ticket.Ball2, ticket.Ball3, ticket.Ball4, ticket.Ball5, bonus1Val, bonus2Val, isDuplicate, ) if err != nil { log.Println("❌ Failed to insert ticket:", err) } else if isDuplicate { log.Println("⚠️ Duplicate ticket detected and flagged.") } return err }