Files
sprintpadawan/lib/db.go
T
2026-04-24 00:00:19 -06:00

107 lines
2.2 KiB
Go

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)
}
}