diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fe3b4a5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,34 @@ +# Logs +logs +*.log +*.detail +*.stat +*.summary + +# Runtime data +pids +*.pid +*.seed + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (http://nodejs.org/api/addons.html) +build/Release + +# Dependency directory +# https://docs.npmjs.com/cli/shrinkwrap#caveats +node_modules + +# Debug log from npm +npm-debug.log +stat.db diff --git a/app.config.json b/app.config.json index 96c6c72..28c3862 100644 --- a/app.config.json +++ b/app.config.json @@ -1,63 +1,19 @@ { "default": { + "appName": "Hostpital service", "appPort": 3000, - "apiUrlPrefix": "/api/partner", + "apiUrlPrefix": "/api", "requestTimeout": 10, - "redis" : { - "host": "10.1.2.155", - "port": "6379" - }, - "passport": { - "strategy": "local", - "configStrategy": { - "local": { - "usernameField": "username", - "passwordField": "password" - }, - "saml": { - "path": "/login/callback", - "entryPoint": "https://10.252.160.223:9443/samlsso", - "issuer": "smaf-partner" - } - }, - "routes": { - "local": { - "loginPageUrl": "http://localhost:4200/#/login", - "logoutRedirectUrl": "http://localhost:4200" - }, - "saml": { - "loginPageUrl": "/login", - "logoutRedirectUrl": "http://localhost:4200" - } - } - }, - "sdfHost": "http://10.1.2.222:5000", - "sdfAPI": { - "saleArea": "/api/abc/def" - } + "mongoDB" : { + "hopitalIp" : "10.1.2.155:27017", + "hopitalName" : "spw" + } + + + }, "dev": { - "redis" : { - "host": "11.1.2.155", - "port": "6379" - }, - "sdfHost": "http://10.1.2.222:5000" - }, - "staging": { - "appPort": 4800, - "redis" : { - "host": "12.1.2.155", - "port": "6379" - }, - "sdfHost": "http://10.1.2.222:5000" - }, - "production": { - "appPort": 4800, - "redis" : { - "host": "12.1.2.155", - "port": "6379" - }, - "sdfHost": "http://10.1.2.222:5000" + } } diff --git a/app.js b/app.js index 849701b..5dea9b4 100644 --- a/app.js +++ b/app.js @@ -1,10 +1,10 @@ require('app-module-path').addPath(__dirname); const express = require('express'); const app = express(); - const conf = require('utils/config'); +const utils = require('utils/utils'); -console.log(conf.get('redis.host')); +// console.log(conf.get('redis.host')); // setup generate request-id middleware const addRequestId = require('express-request-id')(); @@ -12,23 +12,23 @@ app.use(addRequestId); // setup express-session with redis store const session = require('express-session'); -const RedisStore = require('connect-redis')(session); +// const RedisStore = require('connect-redis')(session); const uuidV4 = require('uuid/v4'); -app.use(session({ - genid: function(req) { - return uuidV4(); // generates session id using UUID - }, - store: new RedisStore({ - host: conf.get('redis.host'), - port: conf.get('redis.port'), - ttl: 180 - }), - secret: 'dbc33e678f', - saveUninitialized: true, - resave: false, - cookie: { maxAge: 3600000 } -})); +// app.use(session({ +// genid: function(req) { +// return uuidV4(); // generates session id using UUID +// }, +// store: new RedisStore({ +// host: conf.get('redis.host'), +// port: conf.get('redis.port'), +// ttl: 180 +// }), +// secret: 'dbc33e678f', +// saveUninitialized: true, +// resave: false, +// cookie: { maxAge: 3600000 } +// })); // setup json body parser @@ -67,11 +67,11 @@ log4js.configure('./config/log4js_config.json'); // setup passport -const passport = require('utils/passport-func')(); -const flash = require('connect-flash'); -app.use(flash()); -app.use(passport.initialize()); -app.use(passport.session()); +// const passport = require('utils/passport-func')(); +// const flash = require('connect-flash'); +// app.use(flash()); +// app.use(passport.initialize()); +// app.use(passport.session()); @@ -88,11 +88,14 @@ app.use(function (req, res, next) { }); -const utils = require('utils/utils'); app.use( function( req, res, next ) { + req = utils.findQueryString(req); + + next(); -}); + }); + // get BE api configs @@ -103,11 +106,14 @@ const appPort = conf.get('appPort'); let mongoQuery = require('./controllers/mongo-db/index'); app.use('/mongo', mongoQuery); -let apiSaleArea = require('./controllers/sale-area/index'); -app.use(apiUrlPrefix + '/sale-area', apiSaleArea); +let preference = require('./controllers/preference/index'); +app.use(apiUrlPrefix+'/preference', preference); + +// let apiSaleArea = require('./controllers/sale-area/index'); +// app.use(apiUrlPrefix + '/sale-area', apiSaleArea); -let apiLogin = require('./controllers/login/login')(passport); -app.use('/', apiLogin); +// let apiLogin = require('./controllers/login/login')(passport); +// app.use('/', apiLogin); @@ -136,5 +142,5 @@ app.all('*', function(req, res) { // })); app.listen(appPort, function () { - console.log('SMAF-Partner Backend app listening on port ' + appPort + '!'); + console.log(conf.get('appName')+' listening on port ' + appPort + '!'); }); diff --git a/controllers/preference/index.js b/controllers/preference/index.js new file mode 100644 index 0000000..20fa492 --- /dev/null +++ b/controllers/preference/index.js @@ -0,0 +1,33 @@ +let express = require('express'); +let router = express.Router(); +let connection = require("../../utils/mongoDB") + + +router.get('/:collection',async function (req, res) { + var query = Object.assign(req.params, req.query); + console.log(query); + var result = await connection.reqMongo(req,req.method,query,req.params.collection) + res.status(200).json(result); + + +}); + +router.post('/:collection',async function (req, res) { + var query = Object.assign(req.params, req.query); + var result = await connection.reqMongo(req, query) + res.status(200).json(result); +}); + +router.put('/:collection',async function (req, res) { + var query = Object.assign(req.params, req.query); + var result = await connection.reqMongo(req, query) + res.status(200).json(result); +}); + +router.delete('/:collection',async function (req, res) { + var query = Object.assign(req.params, req.query); + var result = await connection.reqMongo(req, query) + res.status(200).json(result); +}); + +module.exports = router; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 09616cf..402d1ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "express-project", + "name": "hospital", "version": "1.0.0", "lockfileVersion": 1, "requires": true, @@ -471,6 +471,11 @@ "kuler": "1.0.1" } }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" + }, "double-ended-queue": { "version": "2.1.0-0", "resolved": "https://registry.npmjs.org/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz", @@ -708,6 +713,11 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, "generate-function": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", @@ -740,11 +750,11 @@ } }, "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "optional": true, + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "requires": { + "fs.realpath": "1.0.0", "inflight": "1.0.6", "inherits": "2.0.3", "minimatch": "3.0.4", @@ -771,6 +781,11 @@ "ansi-regex": "2.1.1" } }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, "hawk": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", @@ -790,6 +805,11 @@ "lodash": "4.17.11" } }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" + }, "hoek": { "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", @@ -1137,6 +1157,47 @@ "minimist": "0.0.8" } }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, "moment": { "version": "2.22.2", "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.2.tgz", diff --git a/package.json b/package.json index 170a68a..776ff3c 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,13 @@ { - "name": "express-project", + "name": "hospital", "version": "1.0.0", "description": "", "main": "app.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test" : "mocha unitTest", + "start" : "npm run test && node app.js" }, - "author": "", + "author": "Source Code", "license": "ISC", "dependencies": { "app-module-path": "^2.2.0", @@ -20,6 +21,7 @@ "indicative": "^3.0.6", "ldapjs": "^1.0.2", "log4js": "^3.0.6", + "mocha": "^5.2.0", "moment": "^2.22.2", "mongodb": "^3.1.8", "node-json-config": "0.0.4", diff --git a/unitTest/test.js b/unitTest/test.js new file mode 100644 index 0000000..bef68ba --- /dev/null +++ b/unitTest/test.js @@ -0,0 +1,18 @@ +describe('test app', function() { + + + + it('cal one down (calDown)' , function(done) { + + + if ('1'=='1') { + done(); + } else { + done(new Error("fail")); + } + + }); + + + + }); \ No newline at end of file diff --git a/utils/mongoDB.js b/utils/mongoDB.js new file mode 100644 index 0000000..54606d9 --- /dev/null +++ b/utils/mongoDB.js @@ -0,0 +1,112 @@ +const logger = require('./request-logger'); +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){ + + logger.logSqlQuery({id : "session", reqId : req.id}, query); + + return new Promise((resolve, reject) => { + MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) { + if (err) { + console.log(err) + logger.logSqlResult({id : "session", reqId : req.id}, err.errmsg); + resolve({ + resultCode : "50001", + message : err.errmsg + }); + } + + switch (method) { + case "GET": + 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 "POST": + 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 "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; + + } + + + }); + }); + +} + +function checkResponse(req,response) +{ + + + if(response.err) + { + logger.logSqlResult({id : "session", reqId : req.id}, err.errmsg); + var returnData = { + resultCode : "50001", + message : response.err.errmsg + }; + }else + { + logger.logSqlResult({id : "session", reqId : req.id}, response); + var returnData = { + resultCode : "20000", + resultDescription : "Success", + resultData : response + }; + } + + return returnData +} + + +module.exports = connection; \ No newline at end of file -- libgit2 0.21.2