exchangemarket/src/database.js
sairajzero 74b643fc08 Ambiguity fix
Changes to remove ambiguity of data during backup system
- Converted all Float and Decimal to DECIMAL(16, 8)
- Converted Datetime to Timestamp
- Fixed: Storing time data in backup
2022-04-18 21:07:15 +05:30

99 lines
3.5 KiB
JavaScript

'use strict';
var mysql = require('mysql');
function Database(user, password, dbname, host = 'localhost') {
const db = {};
Object.defineProperty(db, "connect", {
get: () => new Promise((resolve, reject) => {
db.pool.getConnection((error, conn) => {
if (error)
reject(error);
else
resolve(conn);
});
})
});
Object.defineProperty(db, "query", {
value: (sql, values) => new Promise((resolve, reject) => {
db.connect.then(conn => {
const fn = (err, res) => {
conn.release();
(err ? reject(err) : resolve(res));
};
if (values)
conn.query(sql, values, fn);
else
conn.query(sql, fn);
}).catch(error => reject(error));
})
});
Object.defineProperty(db, "transaction", {
value: (queries) => new Promise((resolve, reject) => {
db.connect.then(conn => {
conn.beginTransaction(err => {
if (err)
conn.rollback(() => {
conn.release();
reject(err);
});
else {
(function queryFn(result) {
if (!queries.length) {
conn.commit(err => {
if (err)
conn.rollback(() => {
conn.release();
reject(err);
});
else {
conn.release();
resolve(result);
}
});
} else {
let q_i = queries.shift();
const callback = function(err, res) {
if (err)
conn.rollback(() => {
conn.release();
reject(err);
});
else {
result.push(res);
queryFn(result);
}
};
if (!Array.isArray(q_i))
q_i = [q_i];
if (q_i[1])
conn.query(q_i[0], q_i[1], callback);
else
conn.query(q_i[0], callback);
}
})([]);
}
});
}).catch(error => reject(error));
})
});
return new Promise((resolve, reject) => {
db.pool = mysql.createPool({
host: host,
user: user,
password: password,
database: dbname,
//dateStrings : true,
//timezone: 'UTC'
});
db.connect.then(conn => {
conn.release();
resolve(db);
}).catch(error => reject(error));
});
}
module.exports = Database;