28 lines
873 B
JavaScript
28 lines
873 B
JavaScript
const path = require('path');
|
|
const fs = require('fs');
|
|
const { DatabaseSync } = require('node:sqlite');
|
|
|
|
const dataDir = process.env.DATA_DIR || path.join(__dirname, '..', 'data');
|
|
fs.mkdirSync(dataDir, { recursive: true });
|
|
|
|
const db = new DatabaseSync(path.join(dataDir, 'leaderboard.db'));
|
|
db.exec('PRAGMA journal_mode = WAL;');
|
|
|
|
db.exec(`
|
|
CREATE TABLE IF NOT EXISTS players (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT UNIQUE NOT NULL COLLATE NOCASE,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS doses (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
player_id INTEGER NOT NULL REFERENCES players(id) ON DELETE CASCADE,
|
|
date TEXT NOT NULL,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_doses_player_date ON doses(player_id, date);
|
|
`);
|
|
|
|
module.exports = db;
|