initial commit
This commit is contained in:
83
backend/database.js
Normal file
83
backend/database.js
Normal file
@@ -0,0 +1,83 @@
|
||||
const Database = require('better-sqlite3');
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
|
||||
const dbPath = process.env.DB_PATH || path.join(__dirname, 'data', 'jackbox.db');
|
||||
const dbDir = path.dirname(dbPath);
|
||||
|
||||
// Ensure data directory exists
|
||||
if (!fs.existsSync(dbDir)) {
|
||||
fs.mkdirSync(dbDir, { recursive: true });
|
||||
}
|
||||
|
||||
const db = new Database(dbPath);
|
||||
|
||||
// Enable foreign keys
|
||||
db.pragma('foreign_keys = ON');
|
||||
|
||||
// Create tables
|
||||
function initializeDatabase() {
|
||||
// Games table
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS games (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
pack_name TEXT NOT NULL,
|
||||
title TEXT NOT NULL,
|
||||
min_players INTEGER NOT NULL,
|
||||
max_players INTEGER NOT NULL,
|
||||
length_minutes INTEGER,
|
||||
has_audience INTEGER DEFAULT 0,
|
||||
family_friendly INTEGER DEFAULT 0,
|
||||
game_type TEXT,
|
||||
secondary_type TEXT,
|
||||
play_count INTEGER DEFAULT 0,
|
||||
popularity_score INTEGER DEFAULT 0,
|
||||
enabled INTEGER DEFAULT 1,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
`);
|
||||
|
||||
// Sessions table
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS sessions (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
closed_at DATETIME,
|
||||
is_active INTEGER DEFAULT 1,
|
||||
notes TEXT
|
||||
)
|
||||
`);
|
||||
|
||||
// Session games table
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS session_games (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
session_id INTEGER NOT NULL,
|
||||
game_id INTEGER NOT NULL,
|
||||
played_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
manually_added INTEGER DEFAULT 0,
|
||||
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (game_id) REFERENCES games(id) ON DELETE CASCADE
|
||||
)
|
||||
`);
|
||||
|
||||
// Chat logs table
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS chat_logs (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
session_id INTEGER NOT NULL,
|
||||
chatter_name TEXT NOT NULL,
|
||||
message TEXT NOT NULL,
|
||||
timestamp DATETIME NOT NULL,
|
||||
parsed_vote TEXT,
|
||||
FOREIGN KEY (session_id) REFERENCES sessions(id) ON DELETE CASCADE
|
||||
)
|
||||
`);
|
||||
|
||||
console.log('Database initialized successfully');
|
||||
}
|
||||
|
||||
initializeDatabase();
|
||||
|
||||
module.exports = db;
|
||||
|
||||
Reference in New Issue
Block a user