60 lines
1.7 KiB
JavaScript
60 lines
1.7 KiB
JavaScript
const Logger = require('../logger.js');
|
|
const EntityFramework = require('./psql-entity-framework/entity-relationships.js');
|
|
|
|
const { Client } = require('pg');
|
|
|
|
class Database {
|
|
constructor() {
|
|
this.connection = null;
|
|
}
|
|
|
|
async connect(options) {
|
|
Logger.Info('Database Connecting...');
|
|
|
|
// review options
|
|
if (!options) {
|
|
options = {
|
|
user: process.env.DATABASE_USER,
|
|
host: process.env.DATABASE_HOST,
|
|
database: process.env.DATABASE_DB,
|
|
password: process.env.DATABASE_PASSWORD,
|
|
port: process.env.DATABASE_PORT
|
|
};
|
|
}
|
|
|
|
this.options = options;
|
|
|
|
this.connection = await this.connectToDatabase();
|
|
Logger.Info('Database Connected');
|
|
}
|
|
|
|
async connectToDatabase() {
|
|
const con = new Promise((resolve, reject) => {
|
|
const psqlClient = new Client(this.options);
|
|
|
|
psqlClient.connect();
|
|
psqlClient.query('SELECT NOW()', (err, res) => {
|
|
if (err) reject(err);
|
|
this.connection = psqlClient;
|
|
Logger.Database(`PSQL Time: ${res.rows[0].now}`);
|
|
Logger.Database(`Connected to ${this.options.host}`);
|
|
resolve(psqlClient);
|
|
});
|
|
});
|
|
|
|
await con;
|
|
this.ORM = new EntityFramework(this.connection);
|
|
return this.connection;
|
|
}
|
|
|
|
get getORM() {
|
|
return this.ORM;
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
IDatabase: Database,
|
|
DataTypes: require('./psql-entity-framework/types.js'),
|
|
DataConstraints: require('./psql-entity-framework/relationships_constraints.js')
|
|
}
|