biz9-data
Version:
The BiZ9-Data-Server Package is an object-relational mapper (ORM) that lets you build a clean, portable, reusable, and high-level data access layer with Node.js for data driven applications. The package consists of create, read, update and destroy (CRUD)
222 lines (221 loc) • 7.13 kB
JavaScript
/* Copyright (C) 2016 9_OPZ #Certified CoderZ
* GNU GENERAL PUBLIC LICENSE
* Full LICENSE file ( gpl-3.0-licence.txt )
* BiZ9 Framework
* Data - Mongo - Base
*/
const async = require('async');
const moment = require('moment');
const {Number,Log} = require("biz9-utility");
const { MongoClient } = require("mongodb");
let client_db = {};
const get_db_connect_base = (data_config) => {
return new Promise((callback) => {
const mongo_full_url="mongodb://"+data_config.MONGO_USERNAME_PASSWORD+data_config.MONGO_IP+":"+data_config.MONGO_PORT_ID+"?retryWrites=true&w=majority&maxIdleTimeMS=60000&connectTimeoutMS=150000&socketTimeoutMS=90000&maxPoolSize=900000&maxConnecting=10000";
client_db = new MongoClient(mongo_full_url);
client_db.connect(data_config.APP_ID).then((data)=> {
callback([null,data.db(data_config.APP_ID)]);
}).catch(error => {
Log.error("DATA-MONGO-BASE-GET-DB-BASE-ERROR--",error);
var reset_cmd = "sudo mongod --fork --config "+data_config.MONGO_CONFIG;
if(data_config.MONGO_IP!='0.0.0.0'){
if(!data_config.MONGO_SSH_KEY){
data_config.MONGO_SSH_KEY='';
}else{
data_config.MONGO_SSH_KEY=' -i '+ data_config.MONGO_SSH_KEY;
}
reset_cmd = 'ssh '+ data_config.MONGO_SSH_KEY + " " +data_config.MONGO_SERVER_USER +"@"+data_config.MONGO_IP +" -- "+reset_cmd;
}
dir = exec(reset_cmd, function(error,stdout,stderr){
});
dir.on('exit', function (code) {
callback([error,null]);
});
});
});
}
const close_db_connect_base = (db_connect) => {
return new Promise((callback) => {
client_db.close().then((data)=> {
callback([error,null]);
}).catch(error => {
Log.error("DATA-MONGO-BASE-ClOSE-DB-BASE-ERROR",error);
callback([error,null]);
});
});
}
const get_item_base = (db_connect,data_type,id) => {
return new Promise((callback) => {
let collection = null;
let data = null;
if(check_db_connect_base(db_connect)){
collection = db_connect.collection(data_type);
collection.findOne({id:id}).then((data) => {
if(data){
data = data;
delete data['_id'];
}
callback([error,data]);
}).catch(error => {
Log.error("DATA-BASE-GET-ITEM-BASE-ERROR",error);
callback([error,null]);
});
}
});
}
const check_db_connect_base = (db_connect) => {
if(!db_connect.client){
return false;
}else if(!db_connect.client.topology){
return false;
}else if(!db_connect.client.topology){
return false;
}else{
return true;
}
}
const check_db_client_connected = (db_connect) => {
return !!db_connect && !!db_connect.topology && !!db_connect.topology.isConnected()
}
const update_item_base = (db_connect,data_type,item) => {
return new Promise((callback) => {
let collection = db_connect.collection(data_type);
if (String(item.id)=='0') {//insert
item.id = Number.get_guid();
item.date_create = new moment().toISOString();
item.date_save = new moment().toISOString();
if(check_db_connect_base(db_connect)){
collection.insertOne(item).then((data) => {
if(data){
delete item['_id'];
}
callback([error,item]);
}).catch(error => {
Log.error("DATA-MONGO-BASE-UPDATE-ITEM-BASE-ERROR",error);
callback([error,null]);
});
}
}else{
item.date_save = new moment().toISOString();
collection.updateOne({id:item.id},{$set: item}).then((data) => {
if(data){
delete item['_id'];
}
callback([error,item]);
}).catch(error => {
Log.error("DATA-MONGO-BASE-UPDATE-ITEM-BASE-ERROR",error);
callback([error,null]);
});
}
});
}
const delete_item_base = (db_connect,data_type,id) => {
return new Promise((callback) => {
let collection = db_connect.collection(data_type);
let data = null;
if(check_db_connect_base(db_connect)){
collection.deleteMany({id:id}).then((data) => {
if(data){
data = data;
};
callback([error,data]);
}).catch(error => {
Log.error("DATA-MONGO-BASE-DELETE-ITEM-BASE-ERROR",error);
callback([error,null]);
});
}
});
}
const delete_item_list_base = (db_connect,data_type,filter) => {
return new Promise((callback) => {
let collection = db_connect.collection(data_type);
let data = null;
if(check_db_connect_base(db_connect)){
collection.deleteMany(filter).then((data) => {
if(data){
data = data;
}
callback([error,data]);
}).catch(error => {
Log.error("DATA-MONGO-BASE-DELETE-lIST-BASE-ERROR",error);
callback([error,[]]);
});
}
});
}
const get_id_list_base = (db_connect,data_type,filter,sort_by,page_current,page_size) => {
return new Promise((callback) => {
let total_count = 0;
let data_list = [];
let collection = {};
async.series([
function(call) {
if(check_db_connect_base(db_connect)){
db_connect.collection(data_type).countDocuments(filter).then((data) => {
if(data){
total_count = data;
}
call();
}).catch(error => {
Log.error("DATA-MONGO-BASE-GET-SQL-PAGING-TBLiD-BASE-ERROR-1",error);
callback([error,0,[]]);
});
}else{
Log.error("DATA-MONGO-BASE-GET-SQL-PAGING-TBLID-BASE-ERROR-2",error);
callback(['No connection',0,[]]);
}
},
function(call) {
if(check_db_connect_base(db_connect)){
page_current = parseInt(page_current);
page_size = parseInt(page_size);
db_connect.collection(data_type).find(filter).sort(sort_by).skip(page_current>0?((page_current-1)*page_size):0).limit(page_size).collation({locale:"en_US",numericOrdering:true}).project({id:1,data_type:1,_id:0}).toArray().then((data) => {
if(data){
data_list = data;
}
call();
}).catch(error => {
Log.error("DATA-MONGO-BASE-GET-SQL-PAGING-TBlID-BASE-ERROR-3",error);
callback([error,0,[]]);
});
}else{
Log.error("DATA-Mongo-Base-Get-SQL-PAGING-TBLID-BASE-ERROR-4",error);
callback(['No connection',0,[]]);
}
}
]).then(result => {
callback([error,total_count,data_list]);
}).catch(error => {
Log.error("PROJECT-FILENAME-UPDATE-BLANK-ERROR-5",error);
callback([error,0,[]]);
});
});
}
const count_item_list_base = (db_connect,data_type,filter) => {
return new Promise((callback) => {
let collection = db_connect.collection(data_type);
let data = null;
if(check_db_connect_base(db_connect)){
collection.countDocuments(filter).then((data) => {
if(data){
data = data;
}
callback([error,data]);
}).catch(error => {
Log.error("DATA-MONGO-BASE-COUNT-ITEM-LIST-BASE-ERROR",error);
callback([error,null]);
});
}
});
}
module.exports = {
get_db_connect_base,
check_db_connect_base,
close_db_connect_base,
update_item_base,
get_item_base,
delete_item_base,
delete_item_list_base,
count_item_list_base,
get_id_list_base
};