Commit 1cdb39dd784df47208e45fcc3c22ac2ecf8d20d3

Authored by Adhidarma Hadiwinoto
1 parent cd70b1f414
Exists in master

topupCheck on duplicate

Showing 2 changed files with 66 additions and 1 deletions Side-by-side Diff

... ... @@ -20,6 +20,7 @@
20 20 "author": "Adhidarma Hadiwinoto <me@adhisimon.org>",
21 21 "license": "ISC",
22 22 "dependencies": {
  23 + "redis": "^2.6.2",
23 24 "request": "^2.72.0",
24 25 "sate24": "git+http://gitlab.kodesumber.com/reload97/node-sate24.git",
25 26 "sate24-expresso": "git+http://gitlab.kodesumber.com/reload97/sate24-expresso.git",
partner-bayarkilat.js
... ... @@ -2,17 +2,28 @@ var request = require(&#39;request&#39;);
2 2 var url = require('url');
3 3 var winston = require('winston');
4 4 var xml2jsParser = require('xml2js').parseString;
  5 +var redis = require('redis');
  6 +
5 7  
6 8 var config;
7 9 var aaa;
8 10 var callbackReport;
9 11 var logger;
  12 +var redisClient;
10 13  
11 14 var maxCheckRetry = 20;
12 15 var delayBeforeCheckRetry = 30 * 1000;
13 16  
14 17 process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
15 18  
  19 +function createRedisClient(host, port) {
  20 + try {
  21 + redisClient = redis.createClient(port, host);
  22 + } catch(err) {
  23 + logger.warn("Error creating redis client to " + host + ':' + port);
  24 + }
  25 +}
  26 +
16 27 function start(_config, _callbackReport, options) {
17 28 config = _config;
18 29 callbackReport = _callbackReport;
... ... @@ -30,6 +41,8 @@ function start(_config, _callbackReport, options) {
30 41 ]
31 42 });
32 43 }
  44 +
  45 + createRedisClient(config.globals.redis_host, config.globals.redis_port);
33 46 }
34 47  
35 48 function createRequestOptions(methodName, task) {
... ... @@ -84,7 +97,21 @@ function topupCheck(task, retry) {
84 97 }
85 98  
86 99 function topupRequest(task) {
87   - requestToPartner('PURCHASE', task);
  100 + if (!aaa.isTodayTrx(task)) {
  101 + logger.warn('Maaf, transaksi beda hari tidak dapat dilakukan');
  102 + callbackReport(task.requestId, '68', 'Maaf, transaksi beda hari tidak dapat dilakukan');
  103 + return;
  104 + }
  105 +
  106 + getTaskForDupeCheck(task, function(err, dupeTask) {
  107 + if (dupeTask) {
  108 + logger.info('Duplicate task detected, requesting topupCheck', {task});
  109 + topupCheck(task);
  110 + } else {
  111 + requestToPartner('PURCHASE', task);
  112 + }
  113 + });
  114 +
88 115 }
89 116  
90 117 function requestToPartner(methodName, task, retry) {
... ... @@ -299,6 +326,43 @@ function paddingDestination(destination, width) {
299 326 return (padder + destination).slice(-1 * width);
300 327 }
301 328  
  329 +function getTaskKeyForDupeCheck(task) {
  330 + return config.globals.gateway_name + '.dupecheck.reqId:' + task.requestId;
  331 +}
  332 +
  333 +function saveTaskForDupeCheck(task, cb) {
  334 + var key = getTaskKeyForDupeCheck(task);
  335 +
  336 + redisClient.set(key, JSON.stringify(task), function() {
  337 + redisClient.expire(key, 3600*24*7);
  338 + if (cb) {
  339 + cb(null, task);
  340 + }
  341 + });
  342 +}
  343 +
  344 +function getTaskForDupeCheck(task, cb) {
  345 + var key = getTaskKeyForDupeCheck(task);
  346 +
  347 + redisClient.get(key, function(err, result) {
  348 + if (err) {
  349 + cb(err, null);
  350 + return;
  351 + }
  352 +
  353 + var taskOnRedis = null;
  354 + try {
  355 + taskOnRedis = JSON.parse(result);
  356 + }
  357 + catch(err1) {
  358 + cb(err1, null);
  359 + return;
  360 + }
  361 +
  362 + cb(null, taskOnRedis);
  363 + });
  364 +}
  365 +
302 366 exports.start = start;
303 367 exports.topupRequest = topupRequest;
304 368 exports.prepareRemoteProductCode = prepareRemoteProductCode;