const log = require('./log'); const stat = require('./stats'); var constants = require('./constants'); var MongoClient = require('mongodb').MongoClient; var config = require('./config'); var connection = {}; connection.reqMongo = async function (req,method, query, collection) { // console.log(req.id) var mongoData = config.get('mongoDB'); var url = "mongodb://"+mongoData.hopitalIp; var database = mongoData.hopitalName; var result = await mongoReq(req,url,database,method, query, collection); return result; } function mongoReq(req,url,database,method, query, collection){ var nodeName = "MongoDB"; var funStats = { detailSqlQuery : function(query){ log.detailSqlQuery(req,collection,query); stat.sendQuery(collection); }, detailSqlResult : function(result, err){ log.detailSqlResult(req,collection,result || err); if(result) stat.receiveQuery(collection); else stat.receiveBadQuery(collection); }, addSuccessSummary : function(result){log.addSuccessSummary(req,nodeName,collection,result);}, addErrorSummary : function(result){log.addErrorSummary(req,nodeName,collection,result);} }; return new Promise((resolve, reject) => { MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) { if (err) { console.log(err) resolve(constants.RESPONSECONN.MESSAGE.DBERROR); } funStats.detailSqlQuery(query); var dbInstant = db.db(database).collection(collection); switch (method) { case constants.METHOD.GET: dbInstant.find(query, { projection: { _id: 0 } }).toArray(function(err, result) { resolve(checkResponse(method,result,err,funStats)); }); break; case constants.METHOD.POST: db.db(database).collection(collection).insertOne(query, function(err, result) { var response = checkResponse(method,result,err,funStats); delete response.resultData; resolve(response); }); break; case "PUT": // db.db(database).collection(collection).find(query, { projection: { _id: 0 } }).toArray(function(err, result) { // db.close(); // if (err) { // console.log(err) // resolve(checkResponse(req,{err:err})); // }else // resolve(checkResponse(req,result)); // }); break; case "DELETE": // db.db(database).collection(collection).find(query, { projection: { _id: 0 } }).toArray(function(err, result) { // db.close(); // if (err) { // console.log(err) // resolve(checkResponse(req,{err:err})); // }else // resolve(checkResponse(req,result)); // }); break; } db.close(); }); }); } function checkResponse(method,result,err,funStats) { funStats.detailSqlResult(result, err); if(err) { var returnData = constants.RESPONSECONN.MESSAGE.DBERROR; funStats.addErrorSummary(returnData); } else { if(result.length == 0 && constants.METHOD.GET == method ) { var returnData = constants.RESPONSERESULT.DATA_NOT_FOUND; funStats.addErrorSummary(returnData); }else { var returnData = constants.RESPONSERESULT.SUCCESS; returnData.resultData = result; funStats.addSuccessSummary(returnData); } } return returnData } module.exports = connection;