This repository has been archived on 2021-06-02. You can view files and clone it, but cannot push or open issues or pull requests.
RealtimeDB-OLD/src/database/database.ts

85 lines
2.0 KiB
TypeScript

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();
}
}