From cb55eb268e00465115d69aaff61ce97b2cdb6fab Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <me@adhisimon.org>
Date: Tue, 2 Aug 2016 10:16:32 +0700
Subject: [PATCH] lru-cache untuk reverseUrlCache

---
 neoxmlinutil.js | 19 ++++++++++++++++++-
 package.json    |  1 +
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/neoxmlinutil.js b/neoxmlinutil.js
index ed571fd..c8f5f6a 100644
--- a/neoxmlinutil.js
+++ b/neoxmlinutil.js
@@ -1,10 +1,13 @@
 var oracledb = require('oracledb');
+var LRU = require('lru-cache');
 
 var config = require("./config.json");
 var logger = console;
 
 var oraCon;
 
+var reverseUrlCache = LRU({max: 30, maxAge: 60 * 1000});
+
 function init(options) {
     if (options && options.logger) {
         logger = options.logger;
@@ -37,7 +40,7 @@ function getTransactionIdFromMessage(message) {
     }
 }
 
-function getReverseUrl(msisdn, callback) {
+function getReverseUrlFromDb(msisdn, callback) {
     oraCon.execute(
         "SELECT trim(A.MSISDN) MSISDN, trim(B.REVERSE_URL) REVERSE_URL FROM T_STORE_USER_MSISDN A, T_STORE_USER B WHERE A.STORE_ID = B.STORE_ID AND A.USER_NAME = B.USER_NAME AND B.REVERSE_URL IS NOT NULL AND A.MSISDN = :msisdn",
         [msisdn],
@@ -55,11 +58,25 @@ function getReverseUrl(msisdn, callback) {
                 retval.push(result.rows[i][1]);
             }
 
+            if (retval.length) {
+                reverseUrlCache.set(msisdn, retval);
+            }
+
             callback(null, retval);
         }
     );
 }
 
+function getReverseUrl(msisdn, callback) {
+    var urls = reverseUrlCache.get(msisdn);
+
+    if (!urls) {
+        getReverseUrlFromDb(msisdn, callback);
+    } else {
+        callback(null, retval);
+    }
+}
+
 function getRequestIdFromResponseMessage(message) {
     try {
         var tokens = message.split('.');
diff --git a/package.json b/package.json
index 9f2940c..c84697c 100644
--- a/package.json
+++ b/package.json
@@ -21,6 +21,7 @@
   "author": "Adhidarma Hadiwinoto <me@adhisimon.org>",
   "license": "ISC",
   "dependencies": {
+    "lru-cache": "^4.0.1",
     "oracledb": "^1.9.3",
     "request": "^2.72.0",
     "strftime": "^0.9.2",
-- 
1.9.0