package main import ( "database/sql" "log" "strings" _ "modernc.org/sqlite" ) // database // // Manage database connection to ./app.db // Handles CRUD 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 }