thegameofcode/cipherlayer

View on GitHub
src/managers/redis.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

const redis = require('redis');
const config = require('../../config');

const REDIS_HOST = config.redis.host || 'localhost';
const REDIS_PORT = config.redis.port || 6379;

let redisClient;
let isConnected;

function connect(cbk) {
    redisClient = redis.createClient(REDIS_PORT, REDIS_HOST, {});
    redisClient.on('connect', function (err) {
        if (err) {
            return cbk(err);
        }
        isConnected = true;
        return cbk(null, true);
    });
}

function disconnect(cbk) {
    if (!isConnected) {
        return cbk();
    }

    redisClient.end();
    isConnected = false;
    return cbk(null, false);
}

function insertKeyValue(key, value, expSeconds, cbk) {
    if (!isConnected || !redisClient) {
        return cbk({err: 'redis_not_connected'});
    }

    setKeyValue(key, value, function (err) {
        if (err) {
            return cbk(err);
        }

        getKeyValue(key, function (getErr, resValue) {
            if (getErr) {
                return cbk(getErr);
            }
            if (expSeconds) {
                redisClient.expire(key, expSeconds);
            }
            return cbk(null, resValue);
        });
    });
}

function updateKeyValue(key, value, cbk) {
    if (!isConnected || !redisClient) {
        return cbk({err: 'redis_not_connected'});
    }

    redisClient.ttl(key, function (err, expSeconds) {
        if (err) {
            return cbk(err);
        }

        insertKeyValue(key, value, expSeconds, cbk);
    });
}

function setKeyValue(key, value, cbk) {
    if (!isConnected || !redisClient) {
        return cbk({err: 'redis_not_connected'});
    }

    redisClient.set(key, value, function (err) {
        return cbk(err);
    });
}
function getKeyValue(key, cbk) {
    if (!isConnected || !redisClient) {
        return cbk({err: 'redis_not_connected'});
    }

    redisClient.get(key, function (err, value) {
        return cbk(err, value);
    });
}

function deleteKeyValue(key, cbk) {
    if (!isConnected || !redisClient) {
        return cbk({err: 'redis_not_connected'});
    }

    redisClient.del(key, function (err, deleted) {
        return cbk(err, (deleted === 1));
    });
}

function deleteAllKeys(cbk) {
    if (!isConnected || !redisClient) {
        return cbk({err: 'redis_not_connected'});
    }

    redisClient.flushall(cbk);
}

function getStatus(cbk) {
    if (!redisClient || !isConnected) {
        return cbk({
            err: 'component_error',
            des: 'Redis component is not available'
        });
    }

    return cbk();
}

module.exports = {
    connect,
    disconnect,
    insertKeyValue,
    updateKeyValue,
    getKeyValue,
    setKeyValue,
    deleteKeyValue,
    deleteAllKeys,
    getStatus
};