diff --git a/core/db_connector.js b/core/db_connector.js index fe846ab..27e3ffc 100644 --- a/core/db_connector.js +++ b/core/db_connector.js @@ -426,14 +426,14 @@ class DBConnector extends EventEmitter { throw new ServerError(SERR_DB_EXECUTE, "Нет подключения к БД"); } } - //Установить результат обработки записи сервером приложений - async setQueueAppSrvResult(prms) { + //Запись данных сообщения в позицию очереди + async setQueueMsg(prms) { if (this.bConnected) { //Проверяем структуру переданных параметров let sCheckResult = validateObject( prms, - prmsDBConnectorSchema.setQueueAppSrvResult, - "Параметры функции установки результата обработки позиции очереди" + prmsDBConnectorSchema.setQueueMsg, + "Параметры функции сохранения данных сообщения позиции очереди" ); //Если структура объекта в норме if (!sCheckResult) { @@ -444,7 +444,36 @@ class DBConnector extends EventEmitter { blMsg: prms.blMsg ? prms.blMsg : new Buffer(""), connection: this.connection }); - res = await this.connector.setQueueResp({ + //Валидируем полученный ответ + sCheckResult = validateObject(res, objQueueSchema.Queue, "Изменённое сообщение очереди обмена"); + if (sCheckResult) throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult); + //Вернём измененную запись + return res; + } catch (e) { + if (e instanceof ServerError) throw e; + else 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 setQueueResp(prms) { + if (this.bConnected) { + //Проверяем структуру переданных параметров + let sCheckResult = validateObject( + prms, + prmsDBConnectorSchema.setQueueResp, + "Параметры функции сохранения данных ответа на сообщение позиции очереди" + ); + //Если структура объекта в норме + if (!sCheckResult) { + //Исполняем действие в БД + try { + let res = await this.connector.setQueueResp({ nQueueId: prms.nQueueId, blResp: prms.blResp ? prms.blResp : new Buffer(""), connection: this.connection @@ -465,6 +494,29 @@ class DBConnector extends EventEmitter { throw new ServerError(SERR_DB_EXECUTE, "Нет подключения к БД"); } } + //Установить результат обработки записи сервером приложений + async setQueueAppSrvResult(prms) { + if (this.bConnected) { + //Проверяем структуру переданных параметров + let sCheckResult = validateObject( + prms, + prmsDBConnectorSchema.setQueueAppSrvResult, + "Параметры функции установки результата обработки позиции очереди" + ); + //Если структура объекта в норме + if (!sCheckResult) { + //Исполняем действие в БД + let res = await this.setQueueMsg({ prms }); + res = await this.setQueueResp({ prms }); + //Вернём измененную запись + return res; + } else { + throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult); + } + } else { + throw new ServerError(SERR_DB_EXECUTE, "Нет подключения к БД"); + } + } //Исполнить обработчик со стороны БД async execQueueDBPrc(prms) { if (this.bConnected) { diff --git a/models/prms_db_connector.js b/models/prms_db_connector.js index 76b8cb5..224863e 100644 --- a/models/prms_db_connector.js +++ b/models/prms_db_connector.js @@ -250,6 +250,52 @@ exports.setQueueState = new Schema({ } }); +//Схема валидации параметров функции записи данных сообщения в позицию очереди +exports.setQueueMsg = new Schema({ + //Идентификатор позиции очереди + nQueueId: { + type: Number, + required: true, + message: { + type: path => `Идентификатор позиции очереди ((${path}) имеет некорректный тип данных (ожидалось - Number)`, + required: path => `Не указан идентификатор позиции очереди ((${path})` + } + }, + //Данные сообщения очереди обмена + blMsg: { + use: { validateBuffer }, + required: true, + message: { + validateBuffer: path => + `Данные сообщения очереди обмена (${path}) имеют некорректный тип данных (ожидалось - null или Buffer)`, + required: path => `Не указаны данные сообщения очереди обмена (${path})` + } + } +}).validator({ required: val => val === null || val }); + +//Схема валидации параметров функции записи ответа на сообщение в позицию очереди +exports.setQueueResp = new Schema({ + //Идентификатор позиции очереди + nQueueId: { + type: Number, + required: true, + message: { + type: path => `Идентификатор позиции очереди ((${path}) имеет некорректный тип данных (ожидалось - Number)`, + required: path => `Не указан идентификатор позиции очереди ((${path})` + } + }, + //Данные ответа сообщения очереди обмена + blResp: { + use: { validateBuffer }, + required: true, + message: { + validateBuffer: path => + `Данные ответа сообщения очереди обмена (${path}) имеют некорректный тип данных (ожидалось - null или Buffer)`, + required: path => `Не указаны данные ответа сообщения очереди обмена (${path})` + } + } +}).validator({ required: val => val === null || val }); + //Схема валидации параметров функции установки результата обработки позиции очереди exports.setQueueAppSrvResult = new Schema({ //Идентификатор позиции очереди