import sqlite3 from 'sqlite3' import { open } from 'sqlite' import { mkdir, access } from 'node:fs/promises'; let db; const FILE_DIRS = [ '/db', '/db/pfp' ] async function newDir(dir) { await access(newDir) .then(() => {}) .catch(async () => await mkdir(dir, { recursive: true })); } async function initFolders() { for (var i = 0; i < FILE_DIRS.length; i++) { await newDir( `${process.cwd()}/${FILE_DIRS[i]}`); } } async function initDb() { if (db) return db; await initFolders(); db = await open({ filename: `${process.cwd()}/db/main.db`, driver: sqlite3.Database }); await db.run('CREATE TABLE IF NOT EXISTS user ( \ username TEXT, \ roles INTEGER, \ nickname TEXT \ )'); await db.run('CREATE TABLE IF NOT EXISTS tile ( \ username CHAR(64), \ x INTEGER, \ y INTEGER \ )'); await db.run('CREATE TABLE IF NOT EXISTS block ( \ status INTEGER, \ x INTEGER, \ y INTEGER \ )'); await db.run('CREATE TABLE IF NOT EXISTS player ( \ username CHAR(64), \ score INTEGER, \ out INTEGER, \ color CHAR(64) \ )'); let blocks = await db.all('SELECT * FROM block'); if (!blocks || blocks.length == 0) { await db.run('INSERT INTO block (status, x, y) VALUES (0,0,0)'); await db.run('INSERT INTO block (status, x, y) VALUES (1,1,0)'); await db.run('INSERT INTO block (status, x, y) VALUES (1,-1,0)'); await db.run('INSERT INTO block (status, x, y) VALUES (1,0,1)'); await db.run('INSERT INTO block (status, x, y) VALUES (1,0,-1)'); } return db; } export { initDb };