ranvier-datasource-redis
Version:
datasource for ranvier
89 lines (80 loc) • 2.04 kB
JavaScript
;
const redis = require('redis');
const { Logger } = require('ranvier');
class RedisDataSource {
constructor() {
this.db = redis.createClient({db:3});
this.db.on('error', err => {
Logger.error(`Redis - Connect: ${err}`);
});
this.db.on('ready', () => {
Logger.log('Redis Connection');
});
}
async hasData(config = {}) {
await this.db.select(config.db);
return new Promise((resolve, reject) => {
this.db.dbsize((err, data) => {
if (err) {
Logger.error(`Redis - hasData: ${err}`);
reject(err);
return;
}
resolve(data > 0);
});
});
}
async fetchAll(config = {}) {
await this.db.select(config.db);
return new Promise((resolve, reject) => {
this.db.keys('*', (err, data) => {
if (err) {
Logger.error(`Redis - fetchAll: ${err}`);
reject(err)
return;
}
resolve(data);
});
});
}
async fetch(config = {}, id) {
await this.db.select(config.db);
return new Promise((resolve, reject) => {
this.db.get(id, (err, data) => {
if (err) {
Logger.error(`Redis - fetch: ${err}`);
reject(err);
return;
}
resolve(JSON.parse(data));
});
});
}
async replace(config = {}, data) {
await this.db.select(config.db);
return new Promise((resolve, reject) => {
this.db.del(data, (err, data) => {
if (err) {
Logger.error(`Redis - replace: ${err}`);
reject(err);
return;
}
resolve(data);
});
});
}
async update(config = {}, id, data) {
await this.db.select(config.db);
return new Promise((resolve, reject) => {
this.db.set(id, JSON.stringify(data), (err, data) => {
if (err) {
Logger.error(`Redis - update: ${err}`);
reject(err);
return;
}
resolve(data);
});
});
}
}
module.exports = { RedisDataSource };