You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.5 KiB
57 lines
1.5 KiB
7 years ago
|
import * as r from "rethinkdb";
|
||
|
|
||
|
import { User } from "./User";
|
||
|
import logger from "@common/logger";
|
||
|
|
||
|
export class Database {
|
||
|
static readonly databaseName = "sprinklers3";
|
||
|
|
||
|
db: r.Db;
|
||
|
private _conn: r.Connection | null = null;
|
||
|
|
||
|
get conn(): r.Connection {
|
||
|
if (this._conn == null) {
|
||
|
throw new Error("Not connected to rethinkDB");
|
||
|
}
|
||
|
return this._conn;
|
||
|
}
|
||
|
|
||
|
constructor() {
|
||
|
this.db = r.db(Database.databaseName);
|
||
|
}
|
||
|
|
||
|
async connect() {
|
||
|
this._conn = await r.connect("localhost");
|
||
|
}
|
||
|
|
||
|
async disconnect() {
|
||
|
if (this._conn) {
|
||
|
return this._conn.close();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async createAll() {
|
||
|
const dbs = await r.dbList().run(this.conn);
|
||
|
if (dbs.indexOf(Database.databaseName) === -1) {
|
||
|
await r.dbCreate(Database.databaseName).run(this.conn);
|
||
|
}
|
||
|
await this.createTables();
|
||
|
}
|
||
|
|
||
|
async createTables() {
|
||
|
const tables = await this.db.tableList().run(this.conn);
|
||
|
if (tables.indexOf(User.tableName) === -1) {
|
||
|
await User.createTable(this);
|
||
|
}
|
||
|
const alex = new User(this, {
|
||
|
name: "Alex Mikhalev",
|
||
|
username: "alex",
|
||
|
});
|
||
|
await alex.setPassword("kakashka");
|
||
|
const created = await alex.createOrUpdate();
|
||
|
logger.info((created ? "created" : "updated") + " user alex");
|
||
|
|
||
|
const alex2 = await User.loadByUsername(this, "alex");
|
||
|
logger.info("password valid: " + await alex2!.comparePassword("kakashka"));
|
||
|
}
|
||
|
}
|