UNPKG

umbot

Version:

Universal bot(vk, telegram, viber) or skills for Yandex.Alisa, Маруся and sber

138 lines (137 loc) 4.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DbControllerFile = void 0; const DbControllerModel_1 = require("./DbControllerModel"); const mmApp_1 = require("../../mmApp"); const util_1 = require("../../utils/standard/util"); class DbControllerFile extends DbControllerModel_1.DbControllerModel { cachedFileData = {}; destroy() { super.destroy(); this.cachedFileData = {}; } async update(updateQuery) { const update = updateQuery.getData(); const select = updateQuery.getQuery(); const data = this.getFileData(); if (select) { const idVal = select[this.primaryKeyName]; if (idVal !== undefined) { if (typeof data[idVal] !== 'undefined') { data[idVal] = { ...data[idVal], ...update }; mmApp_1.mmApp.saveJson(`${this.tableName}.json`, data); } return true; } } return null; } async insert(insertQuery) { const insert = insertQuery.getData(); const data = this.getFileData(); if (insert) { const idVal = insert[this.primaryKeyName]; if (idVal) { data[idVal] = insert; mmApp_1.mmApp.saveJson(`${this.tableName}.json`, data); return true; } } return null; } async remove(removeQuery) { const remove = removeQuery.getQuery(); const data = this.getFileData(); if (remove) { const idVal = remove[this.primaryKeyName]; if (idVal !== undefined) { if (typeof data[idVal] !== 'undefined') { delete data[idVal]; mmApp_1.mmApp.saveJson(`${this.tableName}.json`, data); } return true; } } return false; } query(callback) { return null; } validate(element) { if (!element) { return {}; } return element; } async select(where, isOne = false) { let result = null; const content = this.getFileData(); if (where) { for (const key in content) { if (content.hasOwnProperty(key)) { let isSelected = null; for (const data in where) { if (content[key].hasOwnProperty(data) && where.hasOwnProperty(data)) { isSelected = content[key][data] === where[data]; if (isSelected === false) { break; } } } if (isSelected) { if (isOne) { result = content[key]; return { status: true, data: result, }; } if (result === null) { result = []; } result.push(content[key]); } } } } else { result = isOne ? content[Object.keys(content)[0]] : content; } if (result) { return { status: true, data: result, }; } return { status: false, error: 'Не удалось получить данные', }; } getFileData() { const path = mmApp_1.mmApp.config.json; const fileName = this.tableName; const file = `${path}/${fileName}.json`; const fileInfo = (0, util_1.getFileInfo)(file).data; if (fileInfo && fileInfo.isFile()) { const fileData = this.cachedFileData[file] && this.cachedFileData[file].version > fileInfo.mtimeMs ? this.cachedFileData[file].data : (0, util_1.fread)(file).data; this.cachedFileData[file] = { data: fileData, version: fileInfo.mtimeMs, }; return JSON.parse(fileData); } else { return {}; } } escapeString(text) { return text + ''; } async isConnected() { return true; } } exports.DbControllerFile = DbControllerFile;