@63pokupki/nodejs-common
Version:
common nodejs functionality
101 lines • 4.06 kB
JavaScript
"use strict";
// Глобальные сервисы
Object.defineProperty(exports, "__esModule", { value: true });
const ModelValidatorSys_1 = require("./ModelValidatorSys");
const util_1 = require("util");
/**
* SQL Запросы
*/
class BaseSQL {
constructor(req) {
this.modelValidatorSys = new ModelValidatorSys_1.ModelValidatorSys(req);
this.errorSys = req.sys.errorSys;
this.userSys = req.sys.userSys;
if (req.infrastructure.mysql) {
this.db = req.infrastructure.mysql;
}
else {
this.errorSys.error('db_no_connection', 'Отсутствует подключение к mysql');
}
if (req.infrastructure.redis) {
this.redisSys = req.infrastructure.redis;
}
else {
this.errorSys.error('db_redis', 'Отсутствует подключение к redis');
}
}
/**
* Авто кеширование для встраивания в функцию
* @param sKey - Ключ кеша
* @param iTimeSec - Время кеширования
* @param callback - функция получающая данные из БД
*/
async autoCache(sKey, iTimeSec, callback) {
let ok = this.errorSys.isOk();
let bCache = false; // Наличие кеша
let sCache = null;
let out = null;
if (ok) { // Пробуем получить данные из кеша
sCache = await this.redisSys.get(sKey);
if (sCache) {
bCache = true;
this.errorSys.devNotice(sKey, 'Значение взято из кеша');
}
}
if (ok && !bCache) { // Если значения нет в кеше - добавляем его в кеш
out = await callback();
if (out && (util_1.isObject(out) || util_1.isArray(out))) {
this.redisSys.set(sKey, JSON.stringify(out), iTimeSec);
}
else {
this.errorSys.devNotice(sKey, 'Не удалось посместить значение в кеш');
}
}
if (ok && bCache) { // Если значение взято из кеша - отдаем его в ответ
out = JSON.parse(sCache);
}
return out;
}
/**
* Авто кеширование int переменной для встраивания в функцию
* @param sKey - Ключ кеша
* @param iTimeSec - Время кеширования
* @param callback - функция получающая данные из БД
*/
async autoCacheInt(sKey, iTimeSec, callback) {
let ok = this.errorSys.isOk();
let bCache = false; // Наличие кеша
let sCache = null;
let out = null;
if (ok) { // Пробуем получить данные из кеша
sCache = await this.redisSys.get(sKey);
if (sCache) {
bCache = true;
this.errorSys.devNotice(sKey, 'Значение взято из кеша');
}
}
if (ok && !bCache) { // Если значения нет в кеше - добавляем его в кеш
out = Number(await callback());
if (out || out === 0) {
this.redisSys.set(sKey, String(out), iTimeSec);
}
else {
this.errorSys.devWarning(sKey, 'Неверный тип, должен быть number => ' + out);
}
}
if (ok && bCache) { // Если значение взято из кеша - отдаем его в ответ
out = Number(sCache);
}
return out;
}
/**
* Очистить кеш редиса
* @param sKey
*/
async clearCache(sKey) {
let aKeyList = await this.redisSys.keys(sKey);
this.redisSys.del(aKeyList);
}
}
exports.default = BaseSQL;
//# sourceMappingURL=BaseSQL.js.map