more changes but unsure of state had to trash last set fof changes and try repair.
This commit is contained in:
230
storage/db.go
230
storage/db.go
@@ -13,222 +13,24 @@ func InitDB(filepath string) *sql.DB {
|
||||
log.Fatal("❌ Failed to open DB:", err)
|
||||
}
|
||||
|
||||
createThunderballResultsTable := `
|
||||
CREATE TABLE IF NOT EXISTS results_thunderball (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
draw_date TEXT NOT NULL UNIQUE,
|
||||
machine TEXT,
|
||||
ballset TEXT,
|
||||
ball1 INTEGER,
|
||||
ball2 INTEGER,
|
||||
ball3 INTEGER,
|
||||
ball4 INTEGER,
|
||||
ball5 INTEGER,
|
||||
thunderball INTEGER
|
||||
);`
|
||||
|
||||
if _, err := db.Exec(createThunderballResultsTable); err != nil {
|
||||
log.Fatal("❌ Failed to create Thunderball table:", err)
|
||||
schemas := []string{
|
||||
SchemaUsers,
|
||||
SchemaThunderballResults,
|
||||
SchemaThunderballPrizes,
|
||||
SchemaLottoResults,
|
||||
SchemaMyTickets,
|
||||
SchemaUsersMessages,
|
||||
SchemaUsersNotifications,
|
||||
SchemaAuditLog,
|
||||
SchemaLogTicketMatching,
|
||||
SchemaAdminAccessLog,
|
||||
SchemaNewAuditLog,
|
||||
}
|
||||
|
||||
createThunderballPrizeTable := `
|
||||
CREATE TABLE IF NOT EXISTS prizes_thunderball (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
draw_id INTEGER NOT NULL,
|
||||
draw_date TEXT,
|
||||
prize1 TEXT,
|
||||
prize1_winners INTEGER,
|
||||
prize1_per_winner INTEGER,
|
||||
prize1_fund INTEGER,
|
||||
prize2 TEXT,
|
||||
prize2_winners INTEGER,
|
||||
prize2_per_winner INTEGER,
|
||||
prize2_fund INTEGER,
|
||||
prize3 TEXT,
|
||||
prize3_winners INTEGER,
|
||||
prize3_per_winner INTEGER,
|
||||
prize3_fund INTEGER,
|
||||
prize4 TEXT,
|
||||
prize4_winners INTEGER,
|
||||
prize4_per_winner INTEGER,
|
||||
prize4_fund INTEGER,
|
||||
prize5 TEXT,
|
||||
prize5_winners INTEGER,
|
||||
prize5_per_winner INTEGER,
|
||||
prize5_fund INTEGER,
|
||||
prize6 TEXT,
|
||||
prize6_winners INTEGER,
|
||||
prize6_per_winner INTEGER,
|
||||
prize6_fund INTEGER,
|
||||
prize7 TEXT,
|
||||
prize7_winners INTEGER,
|
||||
prize7_per_winner INTEGER,
|
||||
prize7_fund INTEGER,
|
||||
prize8 TEXT,
|
||||
prize8_winners INTEGER,
|
||||
prize8_per_winner INTEGER,
|
||||
prize8_fund INTEGER,
|
||||
prize9 TEXT,
|
||||
prize9_winners INTEGER,
|
||||
prize9_per_winner INTEGER,
|
||||
prize9_fund INTEGER,
|
||||
total_winners INTEGER,
|
||||
total_prize_fund INTEGER,
|
||||
FOREIGN KEY (draw_date) REFERENCES results_thunderball(draw_date)
|
||||
);`
|
||||
|
||||
_, err = db.Exec(createThunderballPrizeTable)
|
||||
if err != nil {
|
||||
log.Fatal("❌ Failed to create Thunderball prize table:", err)
|
||||
}
|
||||
|
||||
createLottoResultsTable := `
|
||||
CREATE TABLE IF NOT EXISTS results_lotto (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
draw_date TEXT NOT NULL UNIQUE,
|
||||
machine TEXT,
|
||||
ballset TEXT,
|
||||
ball1 INTEGER,
|
||||
ball2 INTEGER,
|
||||
ball3 INTEGER,
|
||||
ball4 INTEGER,
|
||||
ball5 INTEGER,
|
||||
ball6 INTEGER,
|
||||
bonusball INTEGER
|
||||
);`
|
||||
|
||||
if _, err := db.Exec(createLottoResultsTable); err != nil {
|
||||
log.Fatal("❌ Failed to create Thunderball table:", err)
|
||||
}
|
||||
|
||||
createMyTicketsTable := `
|
||||
CREATE TABLE IF NOT EXISTS my_tickets (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
userId INTEGER NOT NULL,
|
||||
game_type TEXT NOT NULL,
|
||||
draw_date TEXT NOT NULL,
|
||||
ball1 INTEGER,
|
||||
ball2 INTEGER,
|
||||
ball3 INTEGER,
|
||||
ball4 INTEGER,
|
||||
ball5 INTEGER,
|
||||
ball6 INTEGER,
|
||||
bonus1 INTEGER,
|
||||
bonus2 INTEGER,
|
||||
duplicate BOOLEAN DEFAULT 0,
|
||||
purchase_date TEXT,
|
||||
purchase_method TEXT,
|
||||
image_path TEXT,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
matched_main INTEGER,
|
||||
matched_bonus INTEGER,
|
||||
prize_tier TEXT,
|
||||
is_winner BOOLEAN,
|
||||
prize_amount INTEGER,
|
||||
prize_label TEXT,
|
||||
FOREIGN KEY (userId) REFERENCES users(id)
|
||||
);`
|
||||
|
||||
if _, err := db.Exec(createMyTicketsTable); err != nil {
|
||||
log.Fatal("❌ Failed to create MyTickets table:", err)
|
||||
}
|
||||
|
||||
createUsersTable := `
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
username TEXT NOT NULL UNIQUE,
|
||||
password_hash TEXT NOT NULL,
|
||||
is_admin BOOLEAN
|
||||
);`
|
||||
|
||||
if _, err := db.Exec(createUsersTable); err != nil {
|
||||
log.Fatal("❌ Failed to create Users table:", err)
|
||||
}
|
||||
|
||||
createUsersMessageTable := `
|
||||
CREATE TABLE IF NOT EXISTS users_messages (
|
||||
Id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL REFERENCES users(id),
|
||||
title TEXT NOT NULL,
|
||||
message TEXT,
|
||||
is_read BOOLEAN DEFAULT FALSE,
|
||||
type VARCHAR(50),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);`
|
||||
|
||||
if _, err := db.Exec(createUsersMessageTable); err != nil {
|
||||
log.Fatal("❌ Failed to create Users messages table:", err)
|
||||
}
|
||||
|
||||
createUsersNotificationTable := `
|
||||
CREATE TABLE IF NOT EXISTS users_notification (
|
||||
Id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER NOT NULL REFERENCES users(id),
|
||||
sender_name VARCHAR(100),
|
||||
subject TEXT,
|
||||
body TEXT,
|
||||
is_read BOOLEAN DEFAULT FALSE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
);`
|
||||
|
||||
if _, err := db.Exec(createUsersNotificationTable); err != nil {
|
||||
log.Fatal("❌ Failed to create Users notification table:", err)
|
||||
}
|
||||
|
||||
createAuditLogTable := `
|
||||
CREATE TABLE IF NOT EXISTS auditlog (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
username TEXT,
|
||||
success INTEGER,
|
||||
timestamp TEXT
|
||||
);`
|
||||
|
||||
if _, err := db.Exec(createAuditLogTable); err != nil {
|
||||
log.Fatal("❌ Failed to create Users table:", err)
|
||||
}
|
||||
|
||||
createLogTicketMatchingTable := `
|
||||
CREATE TABLE IF NOT EXISTS log_ticket_matching (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
triggered_by TEXT,
|
||||
run_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
tickets_matched INTEGER,
|
||||
winners_found INTEGER,
|
||||
notes TEXT
|
||||
);`
|
||||
|
||||
if _, err := db.Exec(createLogTicketMatchingTable); err != nil {
|
||||
log.Fatal("❌ Failed to create ticket matching log table:", err)
|
||||
}
|
||||
|
||||
createAdminAccessLogTable := `
|
||||
CREATE TABLE IF NOT EXISTS admin_access_log (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER,
|
||||
accessed_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
path TEXT,
|
||||
ip TEXT,
|
||||
user_agent TEXT
|
||||
);`
|
||||
|
||||
if _, err := db.Exec(createAdminAccessLogTable); err != nil {
|
||||
log.Fatal("❌ Failed to create admin access log table:", err)
|
||||
}
|
||||
|
||||
createNewAuditLogTable := `
|
||||
CREATE TABLE IF NOT EXISTS audit_log (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER,
|
||||
username TEXT,
|
||||
action TEXT,
|
||||
path TEXT,
|
||||
ip TEXT,
|
||||
user_agent TEXT,
|
||||
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);`
|
||||
|
||||
if _, err := db.Exec(createNewAuditLogTable); err != nil {
|
||||
log.Fatal("❌ Failed to create admin access log table:", err)
|
||||
for _, stmt := range schemas {
|
||||
if _, err := db.Exec(stmt); err != nil {
|
||||
log.Fatalf("❌ Failed to apply schema: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
return db
|
||||
|
||||
Reference in New Issue
Block a user