Commit 2e6d9928e2d8f75c5765a02c4947b445b934a1b9

Authored by Adhidarma Hadiwinoto
1 parent b8ae2c7679
Exists in master

ready to rock

Showing 5 changed files with 252 additions and 0 deletions Side-by-side Diff

... ... @@ -0,0 +1,10 @@
  1 +{
  2 + "oracle": {
  3 + "user": "CHANGEME",
  4 + "password": "CHANGEME",
  5 + "connectString": "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ST24)))"
  6 + },
  7 + "apikey": [
  8 + "CHANGEME"
  9 + ]
  10 +}
... ... @@ -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;
... ... @@ -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);
... ... @@ -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;
... ... @@ -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