eo-services/src/utils/store.js
2023-10-12 21:23:14 -05:00

60 lines
1.4 KiB
JavaScript

import { createClient } from "redis";
import localStorage from "local-storage";
import config from "../config/index.js";
import { logger } from "./index.js";
import Promise from "promise";
const store = await createStore();
async function createStore() {
if (config.store.provider === "redis") {
return {
client: await createRedisClient(),
set: async function (key, value) {
return this.client.hSet(key, value);
},
get: async function (key) {
return this.client.hGetAll(key);
},
};
} else {
return {
set: function (key, value) {
return new Promise(function (resolve, reject) {
if (localStorage(key, value)) resolve(true);
else reject(Error("unable to set using local-storage"));
});
},
get: function (key) {
return new Promise(function (resolve) {
resolve(localStorage(key));
});
},
};
}
}
async function createRedisClient() {
const client = createClient({
url: config.store.url,
});
client.on("error", (err) => {
if (err.errors) {
err.errors.forEach((error) => {
logger.error(`Redis Client Error ${error}`);
});
} else {
logger.error(`Redis Client Error ${err.message}`);
}
});
await client.connect();
logger.info(`Connect store to ${config.redis.url}`);
return client;
}
export default store;