Commit 1cdb39dd784df47208e45fcc3c22ac2ecf8d20d3
1 parent
cd70b1f414
Exists in
master
topupCheck on duplicate
Showing 2 changed files with 66 additions and 1 deletions Side-by-side Diff
package.json
... | ... | @@ -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('request'); |
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; |