From aff4b2f3ccfb4b379d7a25ced4adb5b96855a28a Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Sun, 2 Dec 2018 01:30:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A4=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=BA=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D0=B9=20=D1=81=D0=B5=D1=80=D0=B2=D0=B8=D1=81=D0=B0=20(ge?= =?UTF-8?q?tServiceFunctions)=20=D0=B8=20=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D1=80=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=B2=20=D0=B4=D0=BB=D1=8F=20=D0=BD=D0=B5?= =?UTF-8?q?=D1=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/db_connector.js | 43 +++++++++++++++++++++++++++++++++---- models/prms_db_connector.js | 13 +++++++++++ 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/core/db_connector.js b/core/db_connector.js index e0c7f48..5c2f9ef 100644 --- a/core/db_connector.js +++ b/core/db_connector.js @@ -14,6 +14,7 @@ const { makeModuleFullPath, validateObject } = require("./utils"); //Вспом const prmsDBConnectorSchema = require("../models/prms_db_connector"); //Схемы валидации параметров функций модуля const intfDBConnectorModuleSchema = require("../models/intf_db_connector_module"); //Схема валидации интерфейса модуля взаимодействия с БД const objServicesSchema = require("../models/obj_services"); //Схема валидации списка сервисов +const objServiceFunctionsSchema = require("../models/obj_service_functions"); //Схема валидации списка функций сервиса const objQueueSchema = require("../models/obj_queue"); //Схема валидации сообщения очереди обмена const objQueuesSchema = require("../models/obj_queues"); //Схема валидации списка сообщений очереди обмена const objLogSchema = require("../models/obj_log"); //Схема валидации записи журнала @@ -144,10 +145,7 @@ class DBConnector extends EventEmitter { if (!sCheckResult) { //Забираем для каждого из сервисов список его функций let srvsFuncs = srvs.map(async srv => { - const response = await this.connector.getServiceFunctions({ - connection: this.connection, - nServiceId: srv.nId - }); + const response = await this.getServiceFunctions({ nServiceId: srv.nId }); let tmp = _.cloneDeep(srv); response.forEach(f => { tmp.functions.push(f); @@ -173,6 +171,43 @@ class DBConnector extends EventEmitter { throw new ServerError(SERR_DB_EXECUTE, "Нет подключения к БД"); } } + //Получить список функций для сервиса + async getServiceFunctions(prms) { + //Работаем только при наличии подключения + if (this.bConnected) { + //Проверяем структуру переданного объекта с параметрами для считывания функций сервиса + let sCheckResult = validateObject( + prms, + prmsDBConnectorSchema.getServiceFunctions, + "Параметры функции считывания функций сервиса" + ); + //Если структура объекта в норме + if (!sCheckResult) { + try { + //Подготовим параметры для передачи в БД + let getServiceFunctionsData = _.cloneDeep(prms); + getServiceFunctionsData.connection = this.connection; + //И выполним считывание функций сервиса + let res = await this.connector.getServiceFunctions(getServiceFunctionsData); + //Валидируем полученный ответ + sCheckResult = validateObject( + { functions: res }, + objServiceFunctionsSchema.ServiceFunctions, + "Список функций сервиса" + ); + if (sCheckResult) throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult); + //Вернём добавленную запись + return res; + } catch (e) { + throw new ServerError(SERR_DB_EXECUTE, e.message); + } + } else { + throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult); + } + } else { + throw new ServerError(SERR_DB_EXECUTE, "Нет подключения к БД"); + } + } //Запись в журнал работы async putLog(prms) { //Работаем только при наличии подключения diff --git a/models/prms_db_connector.js b/models/prms_db_connector.js index b7599e6..535ee48 100644 --- a/models/prms_db_connector.js +++ b/models/prms_db_connector.js @@ -50,6 +50,19 @@ exports.DBConnector = new Schema({ } }); +//Схема валидации параметров функции получения списка функций сервиса +exports.getServiceFunctions = new Schema({ + //Идентификатор сервиса + nServiceId: { + type: Number, + required: true, + message: { + type: "Идентификатор сервиса (nServiceId) имеет некорректный тип данных (ожидалось - Number)", + required: "Не указан идентификатор сервиса (nServiceId)" + } + } +}); + //Схема валидации параметров функции записи в журнал работы сервиса exports.putLog = new Schema({ //Тип сообщения журнала работы сервиса