Files
hidden-spectre-server/server/db.js
T

48 lines
1.6 KiB
JavaScript

import Database from "better-sqlite3";
import { fileURLToPath } from "url";
import path from "path";
import fs from "fs";
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const DATA_DIR = path.join(__dirname, "data");
fs.mkdirSync(DATA_DIR, { recursive: true });
const db = new Database(path.join(DATA_DIR, "spectre.db"));
db.pragma("journal_mode = WAL");
db.exec(`
CREATE TABLE IF NOT EXISTS admins (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
pw_hash TEXT NOT NULL,
created TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS ghosts (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
gif_file TEXT NOT NULL, -- filename under /uploads
rarity TEXT NOT NULL DEFAULT 'common', -- common | rare | legendary
scale REAL NOT NULL DEFAULT 1.0, -- billboard size multiplier
enabled INTEGER NOT NULL DEFAULT 1,
created TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS sets (
id INTEGER PRIMARY KEY AUTOINCREMENT,
code TEXT UNIQUE NOT NULL, -- the QR payload that unlocks this set
title TEXT NOT NULL,
enabled INTEGER NOT NULL DEFAULT 1,
created TEXT NOT NULL DEFAULT (datetime('now'))
);
-- which ghosts a given set can spawn (many-to-many)
CREATE TABLE IF NOT EXISTS set_ghosts (
set_id INTEGER NOT NULL REFERENCES sets(id) ON DELETE CASCADE,
ghost_id INTEGER NOT NULL REFERENCES ghosts(id) ON DELETE CASCADE,
PRIMARY KEY (set_id, ghost_id)
);
`);
export default db;