You've already forked KF-MMO-Server
further refactor
This commit is contained in:
@@ -1,11 +1,78 @@
|
||||
import Database from 'better-sqlite3';
|
||||
import { open } from 'sqlite'
|
||||
import sqlite3 from 'sqlite3'
|
||||
import { open, Database } from 'sqlite'
|
||||
|
||||
// this is a top-level await
|
||||
(async () => {
|
||||
// open the database
|
||||
const db = await open({
|
||||
filename: '/tmp/database.db',
|
||||
driver: Database
|
||||
})
|
||||
})()
|
||||
export class DatabaseController {
|
||||
private db: Database;
|
||||
|
||||
private constructor(db: Database) {
|
||||
this.db = db;
|
||||
}
|
||||
|
||||
static async create(filename = ':memory:'): Promise<DatabaseController> {
|
||||
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<T = any>(sql: string, params?: any[]): Promise<T[]> {
|
||||
const rows: unknown = await this.db.all(sql, params);
|
||||
return Array.isArray(rows) ? (rows as T[]) : [];
|
||||
}
|
||||
|
||||
async get<T = any>(sql: string, params?: any[]): Promise<T | undefined> {
|
||||
return this.db.get<T>(sql, params);
|
||||
}
|
||||
|
||||
async run(sql: string, params?: any[]): Promise<void> {
|
||||
await this.db.run(sql, params);
|
||||
}
|
||||
|
||||
async close(): Promise<void> {
|
||||
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();
|
||||
// })();
|
||||
|
||||
Reference in New Issue
Block a user