92 lines
2.0 KiB
Go
92 lines
2.0 KiB
Go
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.MyTicket) 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
|
|
}
|