UNPKG

umbot

Version:

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

188 lines (187 loc) 6.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DbControllerMongoDb = void 0; const DbControllerModel_1 = require("./DbControllerModel"); const Sql_1 = require("./Sql"); const mmApp_1 = require("../../mmApp"); const Text_1 = require("../../utils/standard/Text"); class DbControllerMongoDb extends DbControllerModel_1.DbControllerModel { _db; constructor() { super(); if (mmApp_1.mmApp.isSaveDb) { this._db = new Sql_1.Sql(); } else { this._db = null; } } async update(updateQuery) { let update = updateQuery.getData(); let select = updateQuery.getQuery(); if (this._db) { update = this.validate(update); select = this.validate(select); if (this.primaryKeyName) { return !!(await this._db.query(async (client, db) => { try { const collection = db.collection(this.tableName); const result = await collection.updateOne(select, { $set: update, }); return { status: true, data: result.modifiedCount, }; } catch (err) { return { status: false, error: err instanceof Error ? err.message : 'Unknown error', }; } })); } } return null; } async insert(insertQuery) { let insert = insertQuery.getData(); if (this._db) { insert = this.validate(insert); if (this.primaryKeyName) { return !!(await this._db.query(async (client, db) => { try { const collection = db.collection(this.tableName); const result = await collection.insertOne(insert); return { status: true, data: result.insertedId, }; } catch (err) { return { status: false, error: err instanceof Error ? err.message : 'Unknown error', }; } })); } } return null; } async remove(removeQuery) { let remove = removeQuery.getQuery(); if (this._db) { remove = this.validate(remove); return !!(await this._db.query(async (client, db) => { try { const collection = db.collection(this.tableName); const result = await collection.deleteOne(remove); return { status: true, data: result.deletedCount, }; } catch (err) { return { status: false, error: err instanceof Error ? err.message : 'Unknown error', }; } })); } return false; } query(callback) { if (this._db) { return this._db.query(callback); } return null; } validate(element) { if (!element) { return {}; } const rules = this._rules; if (rules) { rules.forEach((rule) => { let type = 'number'; switch (rule.type) { case 'string': case 'text': type = 'string'; break; case 'int': case 'integer': case 'bool': type = 'number'; break; } rule.name.forEach((data) => { if (type === 'string') { if (typeof rule.max !== 'undefined') { element[data] = Text_1.Text.resize(element[data], rule.max); } element[data] = this.escapeString(element[data]); } else { element[data] = +element[data]; } }); }); } return element; } async select(where, isOne = false) { if (this._db) { return await this._db.query(async (client, db) => { try { const collection = db.collection(this.tableName); let results; if (isOne) { results = await collection.findOne(where || {}); } else { results = await collection .find(where || {}) .toArray(); } return { status: !!results, data: results, }; } catch (err) { return { status: false, error: err instanceof Error ? err.message : 'Unknown error', }; } }); } return { status: false, error: 'Не удалось получить данные', }; } destroy() { if (this._db) { this._db.close(); this._db = null; } } escapeString(text) { if (this._db) { return this._db.escapeString(text); } return text + ''; } async isConnected() { if (this._db) { return await this._db.isConnected(); } return false; } } exports.DbControllerMongoDb = DbControllerMongoDb;