package lib import ( "database/sql" "log" _ "turso.tech/database/tursogo" ) var DB *sql.DB // init sqlite db — always creates app.db at project root (run from root) func InitDB() { var err error DB, err = sql.Open("turso", "app.db") if err != nil { log.Fatal(err) } // make users table userTable := ` CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, password_hash TEXT NOT NULL );` _, err = DB.Exec(userTable) if err != nil { log.Fatal(err) } // make sessions table sessionTable := ` CREATE TABLE IF NOT EXISTS sessions ( id TEXT PRIMARY KEY, user_id INTEGER NOT NULL, expires_at DATETIME NOT NULL, FOREIGN KEY(user_id) REFERENCES users(id) );` _, err = DB.Exec(sessionTable) if err != nil { log.Fatal(err) } // make rooms table roomTable := ` CREATE TABLE IF NOT EXISTS rooms ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, code TEXT UNIQUE NOT NULL, scale TEXT NOT NULL DEFAULT 'fibonacci', owner_id INTEGER NOT NULL, created_at DATETIME NOT NULL, active_story_id INTEGER, FOREIGN KEY(owner_id) REFERENCES users(id) );` _, err = DB.Exec(roomTable) if err != nil { log.Fatal(err) } // make room_members table memberTable := ` CREATE TABLE IF NOT EXISTS room_members ( room_id INTEGER NOT NULL, user_id INTEGER NOT NULL, joined_at DATETIME NOT NULL, PRIMARY KEY (room_id, user_id), FOREIGN KEY(room_id) REFERENCES rooms(id), FOREIGN KEY(user_id) REFERENCES users(id) );` _, err = DB.Exec(memberTable) if err != nil { log.Fatal(err) } // make stories table storyTable := ` CREATE TABLE IF NOT EXISTS stories ( id INTEGER PRIMARY KEY AUTOINCREMENT, room_id INTEGER NOT NULL, title TEXT NOT NULL, points INTEGER, voted INTEGER NOT NULL DEFAULT 0, FOREIGN KEY(room_id) REFERENCES rooms(id) );` _, err = DB.Exec(storyTable) if err != nil { log.Fatal(err) } // make votes table voteTable := ` CREATE TABLE IF NOT EXISTS votes ( story_id INTEGER NOT NULL, user_id INTEGER NOT NULL, value TEXT NOT NULL, PRIMARY KEY (story_id, user_id), FOREIGN KEY(story_id) REFERENCES stories(id), FOREIGN KEY(user_id) REFERENCES users(id) );` _, err = DB.Exec(voteTable) if err != nil { log.Fatal(err) } }