Files
balance2/bingo/server/db.mjs
T
2026-10-30 17:20:47 +01:00

31 lines
1.3 KiB
JavaScript

// Общая часть для сервера и утилит: открыть базу, создать таблицы, правила подсчёта линий.
import { DatabaseSync } from 'node:sqlite';
import { readFileSync } from 'node:fs';
export const LINE_BONUS = 5;
// Диагонали карточки 4×4: 01-06-11-16 и 04-07-10-13.
const DIAGONALS = [[1, 6, 11, 16], [4, 7, 10, 13]];
// Собранные линии — по одной строке на каждую: ряды, столбцы и диагонали.
export const LINES_SQL = `
SELECT device, week, 'row' AS kind FROM marks
GROUP BY device, week, (cell - 1) / 4 HAVING COUNT(*) = 4
UNION ALL
SELECT device, week, 'col' AS kind FROM marks
GROUP BY device, week, (cell - 1) % 4 HAVING COUNT(*) = 4
UNION ALL
SELECT device, week, 'diag' AS kind FROM marks WHERE cell IN (${DIAGONALS[0].join(', ')})
GROUP BY device, week HAVING COUNT(*) = 4
UNION ALL
SELECT device, week, 'diag' AS kind FROM marks WHERE cell IN (${DIAGONALS[1].join(', ')})
GROUP BY device, week HAVING COUNT(*) = 4`;
const SCHEMA = readFileSync(new URL('../schema.sql', import.meta.url), 'utf8');
export function openDb(file) {
const db = new DatabaseSync(file);
db.exec('PRAGMA journal_mode = WAL; PRAGMA synchronous = NORMAL; PRAGMA busy_timeout = 5000;');
db.exec(SCHEMA);
return db;
}