-
Notifications
You must be signed in to change notification settings - Fork 2
/
Database.js
85 lines (63 loc) · 1.64 KB
/
Database.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import pg from 'pg';
const { Pool, types } = pg;
global.dbPool = null;
global.dbClient = null;
// Fix for dates type
types.setTypeParser(1082, function(stringValue) {
return new Date(stringValue + 'T00:00:00.000Z');
});
export default class Database {
static async init(callback) {
if(!!dbPool) { return; }
dbPool = new Pool(config.database);
try {
dbClient = await dbPool.connect();
} catch(err) {
log('[DB]' + err,'error');
return;
}
log('Successfuly connected to server database.');
}
static async stop(callback) {
if(!dbPool) { return; }
dbPool.end();
dbPool = null;
}
static buildUpdateQuery(table, fields) {
let query = 'UPDATE "' + table + '" SET';
const values = [];
for(const key in fields) {
values.push(fields[key]);
query += ' "' + key + '" = $' + values.length + ',';
}
query = query.substr(0, query.length-1);
return [query, values];
}
static buildInsertQuery(table, fields) {
let query = 'INSERT INTO "' + table + '"(';
let columns = '';
let valueStr = '';
const values = [];
for(const key in fields) {
values.push(fields[key]);
columns += '"' + key + '",';
valueStr += '$' + values.length + ',';
}
columns = columns.substr(0, columns.length - 1);
valueStr = valueStr.substr(0, valueStr.length - 1);
query += columns + ') VALUES (' + valueStr + ')';
return [query, values];
}
static async execQuery(query, params) {
try {
return await dbClient.query(query, params);
} catch(err) {
console.error(err);
if(!!err.constraint && err.constraint.includes('_pkey')) {
return;
}
log('[DB] ' + err, 'error');
console.log(params);
}
}
}