import RedisClient from "./redis/RedisClient"; const stringToBool = (str: string): boolean => { if (str === 'true') { return true; } if (str === 'false') { return false; } return false; }; const serializeForRedis = (obj: any) => { const flatObj: any = {}; Object.keys(obj).forEach(key => { if (obj[key] === null) { flatObj[key] = false; return; } if (typeof obj[key] === 'object') { flatObj[key] = JSON.stringify(obj[key]); return; } flatObj[key] = obj[key]; }); return flatObj; }; class AppConfigStore { db: any redisClient: RedisClient constructor(db: any, redisClient: RedisClient) { this.db = db; this.redisClient = redisClient; } async getValue(key: string) { const resultInRedis: any = key != 'user_company_id' ? await this.redisClient.hgetAll(`appConfig:${key}`) : await this.redisClient.getObject(`${key}`);//EV-612 if (resultInRedis && key != 'user_company_id') { if (resultInRedis.data_type === 'boolean') { return stringToBool(resultInRedis.value); } else { return resultInRedis.value; } } else if (resultInRedis) { return resultInRedis; } let value = null; const result = await this.db.oneOrNone(`SELECT * FROM app_config WHERE key = $1`, key); //EV-612 if (key != 'user_company_id') { if (!result) { value = null; } else if (result.data_type === 'boolean') { value = stringToBool(result.value); } else { value = result.value; } if (value !== null) { await this.redisClient.hmSet(`appConfig:${key}`, serializeForRedis({ ...result, value })); } } else { value = '0'; await this.redisClient.set(`user_company_id`, value); } //EV-612 return value; } //EV-617 async setValue(key: string,value:string) { await this.redisClient.set(key, value); } //EV-617 } export default AppConfigStore;