Commit 2e6d9928e2d8f75c5765a02c4947b445b934a1b9
1 parent
b8ae2c7679
Exists in
master
ready to rock
Showing 5 changed files with 252 additions and 0 deletions Side-by-side Diff
config.sample.json
... | ... | @@ -0,0 +1,83 @@ |
1 | +"use strict"; | |
2 | + | |
3 | +var oracledb = require('oracledb'); | |
4 | + | |
5 | +var config; | |
6 | +var oraCon; | |
7 | + | |
8 | +function init(options) { | |
9 | + if (!options.config) { | |
10 | + console.trace('Undefined options.config'); | |
11 | + process.exit(1); | |
12 | + } | |
13 | + config = options.config; | |
14 | + | |
15 | + connectToOracle(); | |
16 | +} | |
17 | + | |
18 | +function connectToOracle(callback) { | |
19 | + oracledb.getConnection(config.oracle, function(err, connection) { | |
20 | + if (err) { | |
21 | + console.trace('Can not connect to oracle db: ' + err); | |
22 | + process.exit(1); | |
23 | + } | |
24 | + | |
25 | + oraCon = connection; | |
26 | + console.log("Oracle db connected") | |
27 | + | |
28 | + if (callback) { | |
29 | + callback(null, oraCon); | |
30 | + } | |
31 | + }); | |
32 | +} | |
33 | + | |
34 | +function connection() { | |
35 | + return oraCon; | |
36 | +} | |
37 | + | |
38 | +function createResultObject(res) { | |
39 | + | |
40 | + let metadata = res.metaData; | |
41 | + let metadataCount = metadata.length; | |
42 | + | |
43 | + let retval = []; | |
44 | + let resultCount = res.rows.length | |
45 | + | |
46 | + for (let i=0; i < resultCount; i++) { | |
47 | + | |
48 | + let row = res.rows[i]; | |
49 | + let data = {}; | |
50 | + | |
51 | + for (let j=0; j<metadataCount; j++) { | |
52 | + let colName = metadata[j].name; | |
53 | + data[colName] = row[j]; | |
54 | + } | |
55 | + | |
56 | + retval.push(data); | |
57 | + | |
58 | + } | |
59 | + | |
60 | + return retval; | |
61 | +} | |
62 | + | |
63 | +function composeQueryWithFilter(query, filter) { | |
64 | + let newQuery = query; | |
65 | + let values = []; | |
66 | + | |
67 | + if (!filter) { | |
68 | + return {query: newQuery, values: values}; | |
69 | + } | |
70 | + | |
71 | + let i; | |
72 | + for (let key in filter) { | |
73 | + newQuery += " AND " + key + " = :A" + i++; | |
74 | + values.push(filter[key]); | |
75 | + } | |
76 | + return {query: newQuery, values: values}; | |
77 | +} | |
78 | + | |
79 | + | |
80 | +exports.init = init; | |
81 | +exports.connection = connection; | |
82 | +exports.composeQueryWithFilter = composeQueryWithFilter; | |
83 | +exports.createResultObject = createResultObject; |
index.js
... | ... | @@ -0,0 +1,32 @@ |
1 | +var express = require('express'); | |
2 | +var config = require('./config.json'); | |
3 | + | |
4 | +var app = express(); | |
5 | + | |
6 | +var db = require('./db'); | |
7 | +db.init({config: config}); | |
8 | + | |
9 | +var modelOptions = {config: config, db: db}; | |
10 | +var storeUser = require('./store-user') | |
11 | +storeUser.init(modelOptions); | |
12 | + | |
13 | +var trans = require('./trans'); | |
14 | +trans.init(modelOptions); | |
15 | + | |
16 | +function isValidApiKey(apikey) { | |
17 | + return config.apikey.indexOf(apikey) >= 0; | |
18 | +} | |
19 | + | |
20 | +function checkAuth(req, res, next) { | |
21 | + if (isValidApiKey(req.params.apikey)) { | |
22 | + next(); | |
23 | + return; | |
24 | + } | |
25 | + | |
26 | + res.send("Invalid auth"); | |
27 | +} | |
28 | + | |
29 | +app.get("/apikey/:apikey/store-user/by-msisdn/:msisdn", checkAuth, storeUser.getByMSISDN); | |
30 | +app.get("/apikey/:apikey/trans/by-messageid/:messageid", checkAuth, trans.getByMessageid); | |
31 | + | |
32 | +app.listen(3000); |
store-user.js
... | ... | @@ -0,0 +1,74 @@ |
1 | +"use strict"; | |
2 | + | |
3 | +var config; | |
4 | +var db; | |
5 | + | |
6 | +function get(filter, cb) { | |
7 | + let dbConnection = db.connection(); | |
8 | + if (!dbConnection) { | |
9 | + cb("db is not connected"); | |
10 | + return; | |
11 | + } | |
12 | + | |
13 | + let query = "SELECT * FROM T_STORE_USER WHERE 1=1"; | |
14 | + | |
15 | + let queryWithFilter = db.composeQueryWithFilter(query, filter); | |
16 | + | |
17 | + dbConnection.execute(queryWithFilter.query, queryWithFilter.values, function(err, res) { | |
18 | + if (err) { | |
19 | + cb(err, null); | |
20 | + return; | |
21 | + } | |
22 | + | |
23 | + let retval = db.createResultObject(res); | |
24 | + cb(null, retval); | |
25 | + }); | |
26 | +} | |
27 | + | |
28 | +function _getByMSISDN(msisdn, cb) { | |
29 | + let dbConnection = db.connection(); | |
30 | + if (!dbConnection) { | |
31 | + cb("db is not connected"); | |
32 | + return; | |
33 | + } | |
34 | + | |
35 | + let query = "SELECT T_STORE_USER.* FROM T_STORE_USER, T_STORE_USER_MSISDN WHERE T_STORE_USER_MSISDN.USER_NAME = T_STORE_USER.USER_NAME"; | |
36 | + let filter = {"T_STORE_USER_MSISDN.MSISDN": msisdn}; | |
37 | + | |
38 | + let queryWithFilter = db.composeQueryWithFilter(query, filter); | |
39 | + | |
40 | + dbConnection.execute(queryWithFilter.query, queryWithFilter.values, function(err, res) { | |
41 | + if (err) { | |
42 | + cb(err, null); | |
43 | + return; | |
44 | + } | |
45 | + | |
46 | + let retval = db.createResultObject(res); | |
47 | + | |
48 | + if (retval && retval.length > 0) { | |
49 | + cb(null, retval[0]); | |
50 | + } | |
51 | + else { | |
52 | + cb(null, null); | |
53 | + } | |
54 | + }); | |
55 | +} | |
56 | + | |
57 | +function getByMSISDN(req, res, next) { | |
58 | + _getByMSISDN(req.params.msisdn, function (err, result) { | |
59 | + if (err) { | |
60 | + res.send(err.message); | |
61 | + return; | |
62 | + } | |
63 | + | |
64 | + res.send(result); | |
65 | + }); | |
66 | +} | |
67 | + | |
68 | +function init(options) { | |
69 | + config = options.config; | |
70 | + db = options.db; | |
71 | +} | |
72 | + | |
73 | +exports.init = init; | |
74 | +exports.getByMSISDN = getByMSISDN; |
trans.js
... | ... | @@ -0,0 +1,53 @@ |
1 | +"use strict"; | |
2 | + | |
3 | +var config; | |
4 | +var db; | |
5 | + | |
6 | +function init(options) { | |
7 | + config = options.config; | |
8 | + db = options.db; | |
9 | +} | |
10 | + | |
11 | +function _getByMessageid(messageid, cb) { | |
12 | + let dbConnection = db.connection(); | |
13 | + if (!dbConnection) { | |
14 | + cb("db is not connected"); | |
15 | + return; | |
16 | + } | |
17 | + | |
18 | + let query = "SELECT * FROM T_TRANS WHERE 1=1"; | |
19 | + let filter = {"MESSAGEID": messageid}; | |
20 | + | |
21 | + let queryWithFilter = db.composeQueryWithFilter(query, filter); | |
22 | + | |
23 | + dbConnection.execute(queryWithFilter.query, queryWithFilter.values, function(err, res) { | |
24 | + if (err) { | |
25 | + cb(err, null); | |
26 | + return; | |
27 | + } | |
28 | + | |
29 | + let retval = db.createResultObject(res); | |
30 | + | |
31 | + if (retval && retval.length > 0) { | |
32 | + cb(null, retval[0]); | |
33 | + } | |
34 | + else { | |
35 | + cb(null, null); | |
36 | + } | |
37 | + }); | |
38 | +} | |
39 | + | |
40 | +function getByMessageid(req, res, next) { | |
41 | + _getByMessageid(req.params.messageid, function(err, result) { | |
42 | + if (err) { | |
43 | + res.send(err.message); | |
44 | + return; | |
45 | + } | |
46 | + | |
47 | + res.send(result); | |
48 | + }); | |
49 | +} | |
50 | + | |
51 | + | |
52 | +exports.init = init; | |
53 | +exports.getByMessageid = getByMessageid |