initial commit
This commit is contained in:
142
backend/db.go
Normal file
142
backend/db.go
Normal file
@@ -0,0 +1,142 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user