|
|
|
import * as path from "path";
|
|
|
|
import { Connection, createConnection, getConnectionOptions } from "typeorm";
|
|
|
|
|
|
|
|
import logger from "@common/logger";
|
|
|
|
|
|
|
|
import { User } from "./entities";
|
|
|
|
import { SprinklersDeviceRepository, UserRepository } from "./repositories/";
|
|
|
|
|
|
|
|
export class Database {
|
|
|
|
users!: UserRepository;
|
|
|
|
sprinklersDevices!: SprinklersDeviceRepository;
|
|
|
|
|
|
|
|
private _conn: Connection | null = null;
|
|
|
|
|
|
|
|
get conn(): Connection {
|
|
|
|
if (this._conn == null) {
|
|
|
|
throw new Error("Not connected to rethinkDB");
|
|
|
|
}
|
|
|
|
return this._conn;
|
|
|
|
}
|
|
|
|
|
|
|
|
async connect() {
|
|
|
|
const options = await getConnectionOptions();
|
|
|
|
Object.assign(options, {
|
|
|
|
entities: [path.resolve(__dirname, "entities", "*.js")]
|
|
|
|
});
|
|
|
|
this._conn = await createConnection(options);
|
|
|
|
this.users = this._conn.getCustomRepository(UserRepository);
|
|
|
|
this.sprinklersDevices = this._conn.getCustomRepository(
|
|
|
|
SprinklersDeviceRepository
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
async disconnect() {
|
|
|
|
if (this._conn) {
|
|
|
|
return this._conn.close();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async createAll() {
|
|
|
|
if (process.env.INSERT_TEST_DATA) {
|
|
|
|
await this.insertData();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async insertData() {
|
|
|
|
const NUM = 100;
|
|
|
|
const users: User[] = [];
|
|
|
|
for (let i = 0; i < NUM; i++) {
|
|
|
|
const username = "alex" + i;
|
|
|
|
let user = await this.users.findByUsername(username);
|
|
|
|
if (!user) {
|
|
|
|
user = await this.users.create({
|
|
|
|
name: "Alex Mikhalev" + i,
|
|
|
|
username
|
|
|
|
});
|
|
|
|
}
|
|
|
|
await user.setPassword("kakashka" + i);
|
|
|
|
users.push(user);
|
|
|
|
}
|
|
|
|
|
|
|
|
for (let i = 0; i < NUM; i++) {
|
|
|
|
const name = "Test" + i;
|
|
|
|
let device = await this.sprinklersDevices.findByName(name);
|
|
|
|
if (!device) {
|
|
|
|
device = await this.sprinklersDevices.create();
|
|
|
|
}
|
|
|
|
Object.assign(device, {
|
|
|
|
name,
|
|
|
|
deviceId: "grinklers" + (i === 1 ? "" : i)
|
|
|
|
});
|
|
|
|
await this.sprinklersDevices.save(device);
|
|
|
|
for (let j = 0; j < 5; j++) {
|
|
|
|
const userIdx = (i + j * 10) % NUM;
|
|
|
|
const user = users[userIdx];
|
|
|
|
user.devices = (user.devices || []).concat([device]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
logger.info("inserted/updated devices");
|
|
|
|
|
|
|
|
await this.users.save(users);
|
|
|
|
logger.info("inserted/updated users");
|
|
|
|
|
|
|
|
const alex2 = await this.users.findOne({ username: "alex0" });
|
|
|
|
logger.info(
|
|
|
|
"password valid: " + (await alex2!.comparePassword("kakashka0"))
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|