umbot
Version:
Universal bot(vk, telegram, viber) or skills for Yandex.Alisa, Маруся and sber
138 lines (137 loc) • 4.53 kB
JavaScript
"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;