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.
 
 
 
 
 
 

87 lines
2.3 KiB

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() {
}
async insertTestData() {
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"))
);
}
}