143 lines
3.3 KiB
Go
143 lines
3.3 KiB
Go
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"log"
|
|
"strings"
|
|
|
|
_ "modernc.org/sqlite"
|
|
)
|
|
|
|
func database() *sql.DB {
|
|
db, err := sql.Open("sqlite", "./app.db")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Seed default menu items if empty
|
|
row := db.QueryRow("SELECT COUNT(*) FROM menu_items")
|
|
var count int
|
|
_ = row.Scan(&count)
|
|
if count == 0 {
|
|
log.Println("Seeding default menu_items…")
|
|
defaults := []struct {
|
|
category string
|
|
name string
|
|
}{
|
|
{"soup", "Erőleves"},
|
|
{"soup", "Dörgicsei Csibeleves"},
|
|
{"soup", "Újházi Tyúkhúsleves"},
|
|
{"soup", "Jókai Bableves"},
|
|
{"soup", "Tárkonyos Raguleves"},
|
|
{"soup", "Frankfurti Leves"},
|
|
{"soup", "Tavaszi Zöldségleves"},
|
|
{"soup", "Fokhagyma Krémleves"},
|
|
|
|
{"main", "Babragus Csülök"},
|
|
{"main", "Rántott Csirkemell"},
|
|
{"main", "Rántott Gomba és Rántott Camembert"},
|
|
{"main", "Cordon Bleu"},
|
|
{"main", "Cigánypecsenye Kakastaréjjal"},
|
|
{"main", "Mozzarellás-Paradicsomos Csirkemell Roston"},
|
|
{"main", "Kemencés Fokhagymás Csülökszeletek"},
|
|
{"main", "Holstein Szelet"},
|
|
{"main", "Jalapeños Sajtgolyók"},
|
|
{"main", "Cornflakes Bundában Sült Csirkemell"},
|
|
{"main", "Baconköntösben Pirított Csirkemáj"},
|
|
|
|
{"side", "Friss Saláta Kapros Joghurtos Öntettel"},
|
|
{"side", "Párolt Rizs"},
|
|
{"side", "Fűszeres Steakburgonya"},
|
|
{"side", "Grill Zöldség"},
|
|
{"side", "Lilahagymás Kukoricasaláta"},
|
|
}
|
|
|
|
for _, d := range defaults {
|
|
_, err := db.Exec("INSERT INTO menu_items (category, name) VALUES (?, ?)", d.category, d.name)
|
|
if err != nil {
|
|
log.Println("Error seeding menu item:", err)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Create users table
|
|
_, err = db.Exec(`
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
username TEXT NOT NULL UNIQUE,
|
|
password TEXT NOT NULL,
|
|
role INTEGER NOT NULL DEFAULT 2
|
|
)
|
|
`)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Create settings table
|
|
_, err = db.Exec(`
|
|
CREATE TABLE IF NOT EXISTS settings (
|
|
key TEXT PRIMARY KEY,
|
|
value TEXT NOT NULL
|
|
)
|
|
`)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Seed default finalize_time if missing
|
|
_, err = db.Exec(`INSERT OR IGNORE INTO settings (key, value) VALUES ('finalize_time', '10:30')`)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
_, err = db.Exec(`
|
|
CREATE TABLE IF NOT EXISTS menu_items (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
category TEXT NOT NULL,
|
|
name TEXT NOT NULL
|
|
)
|
|
`)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Create selections table (latest choice per user)
|
|
_, err = db.Exec(`
|
|
CREATE TABLE IF NOT EXISTS selections (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
user_id INTEGER NOT NULL,
|
|
main TEXT NOT NULL,
|
|
side TEXT NOT NULL,
|
|
soup TEXT,
|
|
created_at TEXT NOT NULL,
|
|
FOREIGN KEY (user_id) REFERENCES users(id)
|
|
)
|
|
`)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Create orders table (all placed orders for history + realtime updates)
|
|
_, err = db.Exec(`
|
|
CREATE TABLE IF NOT EXISTS orders (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
username TEXT NOT NULL,
|
|
soup TEXT,
|
|
main TEXT NOT NULL,
|
|
side TEXT NOT NULL,
|
|
created_at TEXT NOT NULL
|
|
)
|
|
`)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
// Add status column if it doesn't exist
|
|
_, err = db.Exec(`ALTER TABLE orders ADD COLUMN status TEXT NOT NULL DEFAULT 'active'`)
|
|
if err != nil && !strings.Contains(err.Error(), "duplicate column name") {
|
|
log.Fatal(err)
|
|
}
|
|
|
|
return db
|
|
}
|