79 lines
2.3 KiB
TypeScript
79 lines
2.3 KiB
TypeScript
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<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();
|
|
// })();
|