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