diff --git a/partner-masterpulsa-voucher.js b/partner-masterpulsa-voucher.js index a315d4b..308074b 100644 --- a/partner-masterpulsa-voucher.js +++ b/partner-masterpulsa-voucher.js @@ -11,7 +11,7 @@ var logger; var options; var redisClient; -var adviceDelay = 10000; +var adviceDelay = 30000; function createRedisClient() { redisClient = redis.createClient(config.globals.redis_port, config.globals.redis_host); @@ -42,26 +42,37 @@ function getRedisKey(task) { return config.globals.gateway_name + '.tid:' + task.requestId; } -function putTaskToRedis(task) { - var redisKey = getRedisKey(task); - var taskInJSON = JSON.stringify(task); - - redisClient.set(redisKey, taskInJSON); - redisClient.expire(redisKey, 3600*24*7); -} - function topupRequest(task, retry) { - var redisKey = getRedisKey(task); + var key = 'DUPCHECK.gw:' + config.globals.gateway_name + '.prod:' + task.remoteProduct + '.dest:' + task.destination + '.date:' + strftime('%Y%m%d', new Date); + redisClient.get(key, function(err, data) { + if (err) { + callbackReport(task.requestId, '40', 'Gagal cek anti transaksi duplikat (redis error)'); + return; + } - redisClient.get(redisKey, function(err, result) { - if (err || !result) { + if (!data) { + logger.verbose('Belum ada trx dengan tujuan dan denom yang sama pada hari ini. Lanjutkan.'); - //logger.info('Redis error or not found', {redisKey: redisKey, error: err, result: result}); - putTaskToRedis(task); - voucherPay(task); + redisClient.set(key, JSON.stringify(task)); + redisClient.expire(key, 3600 * 24 * 2); + + voucherPay(task, retry); } else { - advice(task); + + try { + var taskOnRedis = JSON.parse(data); + if (task.requestId == taskOnRedis.requestId) { + logger.verbose('Sudah ada trx dengan tujuan dan denom yg sama, requestId jg sama. Lanjutkan dengan advice.') + advice(task, retry); + } else { + logger.verbose('Sudah ada trx dengan tujuan dan denom yg sama, requestId tidak sama. Batalkan.') + callbackReport(task.requestId, '55', 'Transaksi duplikat') + } + } + catch(errJSONParse) { + callbackReport(task.requestId, '68', "error parsing json"); + } } }); }