gridwar-classic/db.js

74 lines
1.7 KiB
JavaScript
Raw Normal View History

2025-01-15 12:28:57 -05:00
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
};