File: /var/dev/irantv2.com/rest/api/helpers/cache.js
module.exports = {
friendlyName: 'Cache',
description: 'Cache something.',
inputs: {
action: {
type: 'string'
},
key: {
type: 'string'
},
value: {
type: 'ref'
},
EX: {
type: 'number'
}
},
exits: {
},
fn: async (inputs, exits) => {
var read = key =>
new Promise(resolve =>
sails.getDatastore('cache').leaseConnection((cache, proceed) => {
if (!cache) return proceed('no redis');
cache.get(key, (error, data) => {
if(error) return proceed(error);
var obj = false;
try{
obj = JSON.parse(data);
}catch(e) {}
return proceed(undefined, obj);
});
}).exec((error, obj) => {
if(error) return resolve(-1);
resolve(obj);
})
);
var write = async (key, value, EX) =>
new Promise(resolve =>
sails.getDatastore('cache').leaseConnection((cache, proceed) => {
if (!cache) return proceed('no redis');
if(EX)
cache.set(key, JSON.stringify(value), 'EX', EX, error => {
if(error) return proceed(error);
return proceed(undefined);
});
else
cache.set(key, JSON.stringify(value), error => {
if(error) return proceed(error);
return proceed(undefined);
});
}).exec((error) => {
if(error) return resolve(-1);
resolve(0);
})
);
var remove = async (key) =>
new Promise(resolve =>
sails.getDatastore('cache').leaseConnection((cache, proceed) => {
if (!cache) return proceed('no redis');
cache.del(key, (error, data) => {
if(error) return proceed(error);
return proceed(undefined);
});
}).exec((error) => {
if(error) return resolve(-1);
resolve(null);
})
);
if(!inputs.EX) inputs.EX = 0;
var res = null;
switch(inputs.action) {
case 'get':
res = exits.success(await read(inputs.key));
break;
case 'set':
res = exits.success(await write(inputs.key, inputs.value, inputs.EX));
break;
case 'del':
res = exits.success(await remove(inputs.key));
}
return res;
},
};