Created
April 21, 2018 13:45
-
-
Save jsuryahyd/6a33aea43ea41d6767ce190e0c7ed47c to your computer and use it in GitHub Desktop.
async module for querying multiple database queries
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | |
}); | |
}; | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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