Skip to content

Instantly share code, notes, and snippets.

@jsuryahyd
Created April 21, 2018 13:45
Show Gist options
  • Save jsuryahyd/6a33aea43ea41d6767ce190e0c7ed47c to your computer and use it in GitHub Desktop.
Save jsuryahyd/6a33aea43ea41d6767ce190e0c7ed47c to your computer and use it in GitHub Desktop.
async module for querying multiple database queries
const mysql = require("mysql");
const async = require('async')
const dbConfig = require("./tables.js").tables;
const db = mysql.createPool({
host: "localhost",
user: dbConfig.username,
password: dbConfig.password,
database: "click2magic",
multipleStatements:true
});
exports.createTables = (obj, cb) => {
let { dbName, tablesObj } = obj;
if (!dbName || tablesObj == {}) {
return false;
}
db.getConnection((err, conn) => {
if (err) {
console.log(err);
return cb(handleConnErr(err), false);
}
//begin transactions
conn.beginTransaction(err => {
if (err) {
//release connection
conn.release();
return console.log(err);
} //err
async.forEachOf(tablesObj,(value,key,b)=>{
console.log(db._freeConnections.indexOf(conn))
if(db._freeConnections.indexOf(conn) != 0){
let stmt = `CREATE TABLE IF NOT EXISTS ${dbName}.${key} (`;
let colsObject = value;
for (colName in colsObject) {
stmt += `${colName} ${colsObject[colName]},`;
}
//remove trailing comma
stmt = stmt.replace(/,$/,'')+`);`;
// process.exit();
conn.query(
{
sql: stmt
},
function(err, result) {
if (err) {
return conn.rollback(() => {
console.log(err);
//release connection
conn.release();
b(err, false);
});
}
console.log(this.sql);
if (err) return cb(handleConnErr(err));
if (result.affectedRows) {
b(null, true);
} else {
b(null, false);
}
}
);
} },err=>{
//all iterations are done
if(err) return console.log('async err',err)
conn.commit((err)=>{
if(err){
return conn.rollback(() => {
console.log(err);
//release connection
conn.release();
cb('Error while committing :'+err, false);
});
}
cb(null,true);
//
//release connection
conn.release();
})
});
});//ends transactions
});
};
exports.tables = {
users: {
user_id: "BIGINT PRIMARY KEY AUTO_INCREMENT ",
user_role: "INT",
user_name: "VARCHAR(100)",
user_email: "VARCHAR(100)",
user_phone: "VARCHAR(10)",
user_employee_id: "VARCHAR(100)",
user_good_ratings: "VARCHAR(100)",
user_bad_ratings: "VARCHAR(100)"
},
messages: {
msg_id: "BIGINT PRIMARY KEY AUTO_INCREMENT ",
msg_chat_id: "INT",
msg_by_visitor: "INT",
msg_timestamp: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP",
msg_user_id: "VARCHAR(100)",
msg_visitor_id: "VARCHAR(100)",
msg_is_transferred_chat: "INT",
msg_files: "TEXT",
msg_links: "TEXT"
},
visitors: {
visitor_id: "BIGINT PRIMARY KEY AUTO_INCREMENT ",
visitor_name: "VARCHAR(100)",
visitor_email: "VARCHAR(100)",
visitor_visits: "BIGINT"
},
ratings: {
rating_id: "BIGINT PRIMARY KEY AUTO_INCREMENT ",
rating_user: "VARCHAR(100)",
rating_visitor: "VARCHAR(100)",
rating: "INT"
},
app_settings: {
setting_id: "BIGINT PRIMARY KEY AUTO_INCREMENT ",
setting_name: "VARCHAR(100)",
setting_json: "TEXT",
setting_set_at: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP",
setting_modified_at: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP"
},
chats: {
chat_id: "BIGINT PRIMARY KEY AUTO_INCREMENT ",
chat_visitor_id: "VARCHAR(100)",
chat_response_time: "BIGINT", //seconds
chat_users: "TEXT", //array of user_ids
chat_begin_timestamp: "TIMESTAMP DEFAULT CURRENT_TIMESTAMP",
chat_duration: "BIGINT", //seconds
chat_triggered_by_user: "INT", //1 || 0
chat_rating: "INT"
} //[1-5]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment