import sqlite3 from 'sqlite3' import { open, Database } from 'sqlite' export class DatabaseController { private db: Database; private constructor(db: Database) { this.db = db; } static async create(filename = ':memory:'): Promise { const db = await open({ filename, driver: sqlite3.Database }); let dbController = new DatabaseController(db); dbController.basicSetup() return dbController; } async basicSetup(){ await this.db.run(`CREATE TABLE IF NOT EXISTS characters ( id INTEGER PRIMARY KEY, user_id INTEGER NOT NULL UNIQUE, level INTEGER DEFAULT 0, inventory TEXT, questBook TEXT );`) await this.db.run(`CREATE TABLE IF NOT EXISTS users ( id INTEGER PRIMARY KEY, login TEXT NOT NULL UNIQUE, password TEXT NOT NULL );`) } async select(sql: string, params?: any[]): Promise { const rows: unknown = await this.db.all(sql, params); return Array.isArray(rows) ? (rows as T[]) : []; } async get(sql: string, params?: any[]): Promise { return this.db.get(sql, params); } async run(sql: string, params?: any[]): Promise { await this.db.run(sql, params); } async close(): Promise { await this.db.close(); } } // Usage example (you can put this in another file): // import { DatabaseController } from './db/DatabaseController'; // (async () => { // const db = await DatabaseController.create('mydb.sqlite3'); // await db.run(`CREATE TABLE IF NOT EXISTS players ( // id INTEGER PRIMARY KEY, // level INTEGER NOT NULL, // inventory TEXT, // questBook TEXT // );`) // await db.run(`CREATE TABLE IF NOT EXISTS users ( // id INTEGER PRIMARY KEY, // login TEXT NOT NULL, // password TEXT NOT NULL // );`) // await db.run('CREATE TABLE IF NOT EXISTS friends (id INTEGER PRIMARY KEY, name TEXT)'); // await db.run('INSERT INTO friends (name) VALUES (?)', ['Silver Fox']); // const friends = await db.select('SELECT * FROM friends'); // console.log(friends); // [{ id: 1, name: 'Silver Fox' }] // await db.close(); // })();