From 4a1706c99fff59b329df83cb2f6ad86c0377e54e Mon Sep 17 00:00:00 2001
From: Adhidarma Hadiwinoto <me@adhisimon.org>
Date: Mon, 19 Aug 2019 13:50:34 +0700
Subject: [PATCH] Prefixes cached

---
 lib/prefixes/index.js | 16 ++++++++++++++++
 package-lock.json     | 14 ++++++++++++++
 package.json          |  1 +
 test/prefixes.js      | 10 ++++++++++
 4 files changed, 41 insertions(+)

diff --git a/lib/prefixes/index.js b/lib/prefixes/index.js
index ceac772..e0fe34f 100644
--- a/lib/prefixes/index.js
+++ b/lib/prefixes/index.js
@@ -1,10 +1,19 @@
 'use strict';
 
 const coreapi = require('komodo-sdk/coreapi');
+const NodeCache = require( "node-cache" );
+
+const cache = new NodeCache({
+    stdTTL: 60,    
+});
 
 async function lookup(number) {
     if (!number) return;
 
+    if (cache.get(number)) {
+        return cache.get(number);
+    }
+
     const [err, lookupResult] = await coreapi({
         path: '/prefixes/lookup',
         method: 'GET',
@@ -14,9 +23,16 @@ async function lookup(number) {
     });
 
     if (err || !lookupResult || lookupResult.error) {
+        cache.del(number);
         return;
     }
 
+    if (lookupResult.prefix) {
+        cache.set(number, lookupResult.prefix);
+    } else {
+        cache.del(number);
+    }
+
     return lookupResult.prefix;
 }
 
diff --git a/package-lock.json b/package-lock.json
index 974ae3b..8515396 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -524,6 +524,11 @@
         "wrap-ansi": "^2.0.0"
       }
     },
+    "clone": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
+      "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18="
+    },
     "code-point-at": {
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
@@ -3055,6 +3060,15 @@
       "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
       "dev": true
     },
+    "node-cache": {
+      "version": "4.2.1",
+      "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.1.tgz",
+      "integrity": "sha512-BOb67bWg2dTyax5kdef5WfU3X8xu4wPg+zHzkvls0Q/QpYycIFRLEEIdAx9Wma43DxG6Qzn4illdZoYseKWa4A==",
+      "requires": {
+        "clone": "2.x",
+        "lodash": "^4.17.15"
+      }
+    },
     "node-environment-flags": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz",
diff --git a/package.json b/package.json
index b0a399c..0807a82 100644
--- a/package.json
+++ b/package.json
@@ -24,6 +24,7 @@
     "komodo-center-messaging-client-lib": "git+http://gitlab.kodesumber.com/komodo/komodo-center-messaging-client-lib.git",
     "komodo-sdk": "git+http://gitlab.kodesumber.com/komodo/komodo-sdk.git",
     "moment": "^2.24.0",
+    "node-cache": "^4.2.1",
     "redis": "^2.8.0",
     "request": "^2.88.0",
     "uuid": "^3.3.2"
diff --git a/test/prefixes.js b/test/prefixes.js
index a112773..8a8fe5e 100644
--- a/test/prefixes.js
+++ b/test/prefixes.js
@@ -19,5 +19,15 @@ describe('#prefixes', () => {
             should.not.exist(await prefixes.lookup(''));
             should.not.exist(await prefixes.lookup('9'));
         });
+
+        it('should handle cache result', async () => {
+            const lookupResult = await prefixes.lookup('08180000000');
+            await prefixes.lookup('08180000000');
+            await prefixes.lookup('08180000000');
+            await prefixes.lookup('08180000000');
+            await prefixes.lookup('08180000000');
+            await prefixes.lookup('08180000000');
+            lookupResult.should.equal('XL');
+        });
     });
 });
\ No newline at end of file
-- 
1.9.0