First Commit
This commit is contained in:
84
src/database/database.ts
Normal file
84
src/database/database.ts
Normal file
@ -0,0 +1,84 @@
|
||||
import { Rules } from "./rules";
|
||||
import Settings from "../settings";
|
||||
import getLevelDB from "../storage";
|
||||
import PathLock from "./lock";
|
||||
import Query from "./query";
|
||||
|
||||
export class DatabaseManager {
|
||||
static databases = new Map<string, Database>();
|
||||
|
||||
static async init() {
|
||||
let databases = await Settings.getDatabases();
|
||||
|
||||
databases.forEach(dbconfig => {
|
||||
let db = new Database(dbconfig.name, dbconfig.accesskey, dbconfig.rules, dbconfig.publickey);
|
||||
this.databases.set(dbconfig.name, db);
|
||||
})
|
||||
}
|
||||
|
||||
static addDatabase(name: string) {
|
||||
if (this.databases.has(name))
|
||||
throw new Error("Database already exists!");
|
||||
|
||||
let database = new Database(name);
|
||||
this.databases.set(name, database);
|
||||
return database;
|
||||
}
|
||||
|
||||
static getDatabase(name: string) {
|
||||
return this.databases.get(name);
|
||||
}
|
||||
|
||||
static async deleteDatabase(name: string) {
|
||||
let db = this.databases.get(name)
|
||||
if (db) {
|
||||
await Settings.deleteDatabase(name);
|
||||
await db.stop();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export class Database {
|
||||
public level = getLevelDB(this.name);
|
||||
private rules: Rules;
|
||||
public locks = new PathLock()
|
||||
|
||||
toJSON() {
|
||||
return {
|
||||
name: this.name,
|
||||
accesskey: this.accesskey,
|
||||
publickey: this.publickey,
|
||||
rules: this.rules
|
||||
}
|
||||
}
|
||||
|
||||
constructor(public name: string, public accesskey?: string, rawRules?: string, public publickey?: string) {
|
||||
if (rawRules)
|
||||
this.rules = new Rules(rawRules);
|
||||
}
|
||||
|
||||
async setRules(rawRules: string) {
|
||||
let rules = new Rules(rawRules);
|
||||
await Settings.setDatabaseRules(this.name, rawRules);
|
||||
this.rules = rules;
|
||||
}
|
||||
|
||||
async setAccessKey(key: string) {
|
||||
await Settings.setDatabaseAccessKey(this.name, key);
|
||||
this.accesskey = key;
|
||||
}
|
||||
|
||||
async setPublicKey(key: string) {
|
||||
await Settings.setDatabasePublicKey(this.name, key);
|
||||
this.publickey = key;
|
||||
}
|
||||
|
||||
getQuery(path: string[]) {
|
||||
return new Query(this, path);
|
||||
}
|
||||
|
||||
async stop() {
|
||||
await this.level.close();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user