Схемы валидаций функции сервиса, списка функций сервиса, сервиса, списка сервисов, небольшой рефакторинг схемы валидации параметров модуля взаимодействия с БД, удаление лишного из утилей, схема валидации интерфейса пользовательского модуля взаимодействия с БД
This commit is contained in:
parent
d062a0d32e
commit
875b11a01e
@ -9,10 +9,11 @@
|
||||
|
||||
const _ = require("lodash"); //Работа с массивами и объектами
|
||||
const EventEmitter = require("events"); //Обработчик пользовательских событий
|
||||
const dbConnSchemas = require("../models/prms_db_connector.js"); //Схемы валидации параметров
|
||||
const glConst = require("../core/constants.js"); //Глобальные константы
|
||||
const { ServerError } = require("../core/server_errors.js"); //Типовая ошибка
|
||||
const { checkModuleInterface, makeModuleFullPath, checkObject, validateObject } = require("../core/utils.js"); //Вспомогательные функции
|
||||
const glConst = require("../core/constants"); //Глобальные константы
|
||||
const { ServerError } = require("../core/server_errors"); //Типовая ошибка
|
||||
const { makeModuleFullPath, checkObject, validateObject } = require("../core/utils"); //Вспомогательные функции
|
||||
const prmsDBConnectorSchema = require("../models/prms_db_connector.js"); //Схемы валидации параметров процедур модуля
|
||||
const { intfDBConnectorModuleSchema } = require("../models/intf_db_connector_module"); //Схема валидации интерфейса модуля взаимодействия с БД
|
||||
|
||||
//----------
|
||||
// Константы
|
||||
@ -59,28 +60,16 @@ class DBConnector extends EventEmitter {
|
||||
//Подключим модуль
|
||||
this.connector = require(makeModuleFullPath(prms.sConnectorModule));
|
||||
//Проверим его интерфейс
|
||||
if (
|
||||
!checkModuleInterface(this.connector, {
|
||||
functions: [
|
||||
"connect",
|
||||
"disconnect",
|
||||
"getServices",
|
||||
"getServiceFunctions",
|
||||
"log",
|
||||
"getQueueOutgoing",
|
||||
"putQueueIncoming",
|
||||
"setQueueState"
|
||||
]
|
||||
})
|
||||
) {
|
||||
throw new ServerError(
|
||||
glConst.SERR_MODULES_BAD_INTERFACE,
|
||||
"Модуль " + prms.sConnectorModule + " реализует неверный интерфейс!"
|
||||
);
|
||||
let sCheckResult = validateObject(
|
||||
this.connector,
|
||||
intfDBConnectorModuleSchema,
|
||||
"Модуль " + prms.sConnectorModule
|
||||
);
|
||||
if (sCheckResult) {
|
||||
throw new ServerError(glConst.SERR_MODULES_BAD_INTERFACE, sCheckResult);
|
||||
}
|
||||
//Всё успешно - сохраним настройки подключения
|
||||
this.connectSettings = {};
|
||||
_.extend(this.connectSettings, prms);
|
||||
this.connectSettings = _.cloneDeep(prms);
|
||||
//Инициализируем остальные свойства
|
||||
this.connection = {};
|
||||
this.bConnected = false;
|
||||
@ -132,9 +121,9 @@ class DBConnector extends EventEmitter {
|
||||
connection: this.connection,
|
||||
nServiceId: srv.nId
|
||||
});
|
||||
let tmp = {};
|
||||
_.extend(tmp, srv, { functions: [] });
|
||||
response.map(f => {
|
||||
let tmp = _.cloneDeep(srv);
|
||||
tmp.functions = [];
|
||||
response.forEach(f => {
|
||||
tmp.functions.push(f);
|
||||
});
|
||||
return tmp;
|
||||
@ -252,7 +241,7 @@ class DBConnector extends EventEmitter {
|
||||
async setQueueState(prms) {
|
||||
if (this.bConnected) {
|
||||
//Проверяем структуру переданных параметров
|
||||
let sCheckResult = validateObject(prms, dbConnSchemas.getQueueStatePrmsSchema);
|
||||
let sCheckResult = validateObject(prms, prmsDBConnectorSchema.setQueueState);
|
||||
//Если структура объекта в норме
|
||||
if (!sCheckResult) {
|
||||
//Подготовим параметры
|
||||
|
@ -7,73 +7,27 @@
|
||||
// Подключение библиотек
|
||||
//----------------------
|
||||
|
||||
const _ = require("lodash"); //Работа с массивами и объектами
|
||||
const Schema = require("validate"); //Схемы валидации
|
||||
const { SMODULES_PATH_EX } = require("../core/constants.js"); //Глобавльные константы системы
|
||||
const { SMODULES_PATH_EX } = require("../core/constants"); //Глобавльные константы системы
|
||||
|
||||
//------------
|
||||
// Тело модуля
|
||||
//------------
|
||||
|
||||
//Проверка на функцию
|
||||
const isFunction = fnToCheck => {
|
||||
let sFn = {}.toString.call(fnToCheck);
|
||||
return fnToCheck && (sFn === "[object Function]" || sFn === "[object AsyncFunction]");
|
||||
};
|
||||
|
||||
//Проверка объекта на наличие списка функций
|
||||
const haveFunctions = (obj, list) => {
|
||||
//Объявим результат
|
||||
let bRes = true;
|
||||
//Если есть что проверять
|
||||
if (obj && list) {
|
||||
//И если пришел массив наименований функций
|
||||
if (Array.isArray(list)) {
|
||||
list.forEach(sFnName => {
|
||||
if (!isFunction(obj[sFnName])) bRes = false;
|
||||
});
|
||||
} else {
|
||||
bRes = false;
|
||||
}
|
||||
} else {
|
||||
bRes = false;
|
||||
}
|
||||
//Вернем результат
|
||||
return bRes;
|
||||
};
|
||||
|
||||
//Проверка корректности интерфейса модуля
|
||||
const checkModuleInterface = (module, interface) => {
|
||||
//Объявим результат
|
||||
let bRes = true;
|
||||
//Если есть что проверять
|
||||
if (module && interface) {
|
||||
//Eсли есть список функций
|
||||
if (interface.functions) {
|
||||
//Проверим их наличие
|
||||
bRes = haveFunctions(module, interface.functions);
|
||||
} else {
|
||||
bRes = false;
|
||||
}
|
||||
} else {
|
||||
bRes = false;
|
||||
}
|
||||
//Вернем результат
|
||||
return bRes;
|
||||
};
|
||||
|
||||
//Валидация объекта
|
||||
const validateObject = (obj, schema, sObjName) => {
|
||||
//Объявим результат
|
||||
let sRes = "";
|
||||
if (schema instanceof Schema) {
|
||||
const errors = schema.validate(obj);
|
||||
const objTmp = _.cloneDeep(obj);
|
||||
const errors = schema.validate(objTmp, { strip: false });
|
||||
if (errors && Array.isArray(errors)) {
|
||||
if (errors.length > 0) {
|
||||
let a = errors.map(e => {
|
||||
return e.message;
|
||||
});
|
||||
sRes =
|
||||
"Объект" + (sObjName ? " '" + sObjName + "' " : " ") + "имеет некорректный формат: " + a.join("; ");
|
||||
sRes = (sObjName ? sObjName + " " : "Объект ") + "имеет некорректный формат: " + a.join("; ");
|
||||
}
|
||||
} else {
|
||||
sRes = "Неожиданный ответ валидатора";
|
||||
@ -145,9 +99,6 @@ const makeModuleFullPath = sModuleName => {
|
||||
// Интерфейс модуля
|
||||
//-----------------
|
||||
|
||||
exports.isFunction = isFunction;
|
||||
exports.haveFunctions = haveFunctions;
|
||||
exports.checkModuleInterface = checkModuleInterface;
|
||||
exports.validateObject = validateObject;
|
||||
exports.checkObject = checkObject;
|
||||
exports.makeModuleFullPath = makeModuleFullPath;
|
||||
|
@ -8,6 +8,7 @@
|
||||
//----------------------
|
||||
|
||||
const Schema = require("validate"); //Схемы валидации
|
||||
const { defServiceFunctions } = require("../models/obj_service_functions");
|
||||
|
||||
//----------
|
||||
// Константы
|
||||
@ -40,7 +41,7 @@ exports.SUNAVLBL_NTF_SIGN_NO = SUNAVLBL_NTF_SIGN_NO;
|
||||
exports.SUNAVLBL_NTF_SIGN_YES = SUNAVLBL_NTF_SIGN_YES;
|
||||
|
||||
//Схема валидации
|
||||
exports.schema = new Schema({
|
||||
exports.Service = new Schema({
|
||||
//Идентификатор сервиса
|
||||
nId: {
|
||||
type: Number,
|
||||
@ -59,42 +60,102 @@ exports.schema = new Schema({
|
||||
required: "Не указан код сервиса (sCode)"
|
||||
}
|
||||
},
|
||||
//Тип сервиса (числовой код)
|
||||
//Тип сервиса
|
||||
nSrvType: {
|
||||
type: Number,
|
||||
enum: [NSRV_TYPE_SEND, NSRV_TYPE_RECIVE],
|
||||
required: true,
|
||||
message: {
|
||||
enum: "Значение числового кода типа сервиса (nSrvType) не поддерживается",
|
||||
type: "Числовой код типа сервиса (nSrvType) имеет недопустимый тип данных",
|
||||
required: "Не указан числовой код типа сервиса (nSrvType)"
|
||||
type: "Тип сервиса (nSrvType) должен быть числом",
|
||||
enum: "Значение типа сервиса (nSrvType) не поддерживается",
|
||||
required: "Не указан типа сервиса (nSrvType)"
|
||||
}
|
||||
} /*,
|
||||
},
|
||||
//Тип сервиса (строковый код)
|
||||
sSrvType: {
|
||||
type: String,
|
||||
enum: [SSRV_TYPE_SEND, SSRV_TYPE_RECIVE],
|
||||
required: true,
|
||||
message: {
|
||||
type: "Строковый код типа сервиса (sSrvType) должен быть строкой",
|
||||
enum: "Значение строкового кода типа сервиса (sSrvType) не поддерживается",
|
||||
type: "Строковый код типа сервиса (sSrvType) имеет недопустимый тип данных",
|
||||
required: "Не указан строковый код типа сервиса (sSrvType)"
|
||||
}
|
||||
},
|
||||
//Корневой каталог сервиса
|
||||
sSrvRoot: {}*/
|
||||
//Имя пользователя (для аутентификации на внешнем сервисе при отправке сообщений)
|
||||
//sSrvUser: {},
|
||||
//Пароль пользователя (для аутентификации на внешнем сервисе при отправке сообщений)
|
||||
//sSrvPass: {},
|
||||
//Признак необходимости оповещения о простое внешнего сервиса (числовой код)
|
||||
//nUnavlblNtfSign: {},
|
||||
sSrvRoot: {
|
||||
type: String,
|
||||
required: true,
|
||||
message: {
|
||||
type: "Корневой каталог сервиса (sSrvRoot) должен быть строкой",
|
||||
required: "Не указан корневой каталог сервиса (sSrvRoot)"
|
||||
}
|
||||
},
|
||||
//Имя пользователя сервиса
|
||||
sSrvUser: {
|
||||
type: String,
|
||||
required: false,
|
||||
message: {
|
||||
type: "Имя пользователя сервиса (sSrvUser) должно быть строкой",
|
||||
required: "Не указано имя пользователя сервиса (sSrvUser)"
|
||||
}
|
||||
},
|
||||
//Пароль пользователя
|
||||
sSrvPass: {
|
||||
type: String,
|
||||
required: false,
|
||||
message: {
|
||||
type: "Пароль пользователя сервиса (sSrvPass) должен быть строкой",
|
||||
required: "Не указан пароль пользователя сервиса (sSrvPass)"
|
||||
}
|
||||
},
|
||||
//Признак необходимости оповещения о простое внешнего сервиса
|
||||
nUnavlblNtfSign: {
|
||||
type: Number,
|
||||
enum: [NUNAVLBL_NTF_SIGN_NO, NUNAVLBL_NTF_SIGN_YES],
|
||||
required: true,
|
||||
message: {
|
||||
type: "Признак необходимости оповещения о простое внешнего сервиса (nUnavlblNtfSign) должен быть числом",
|
||||
enum:
|
||||
"Значение признака необходимости оповещения о простое внешнего сервиса (nUnavlblNtfSign) не поддерживается",
|
||||
required: "Не указан признак необходимости оповещения о простое внешнего сервиса (nUnavlblNtfSign)"
|
||||
}
|
||||
},
|
||||
//Признак необходимости оповещения о простое внешнего сервиса (строковый код)
|
||||
//sUnavlblNtfSign: {},
|
||||
sUnavlblNtfSign: {
|
||||
type: String,
|
||||
enum: [SUNAVLBL_NTF_SIGN_NO, SUNAVLBL_NTF_SIGN_YES],
|
||||
required: true,
|
||||
message: {
|
||||
type:
|
||||
"Строковый код признака необходимости оповещения о простое внешнего сервиса (sUnavlblNtfSign) должен быть строкой",
|
||||
enum:
|
||||
"Значение строкового кода признака необходимости оповещения о простое внешнего сервиса (sUnavlblNtfSign) не поддерживается",
|
||||
required:
|
||||
"Не указан строковый код признака необходимости оповещения о простое внешнего сервиса (sUnavlblNtfSign)"
|
||||
}
|
||||
},
|
||||
//Максимальное время простоя (мин) удалённого сервиса для генерации оповещения
|
||||
//nUnavlblNtfTime: {},
|
||||
nUnavlblNtfTime: {
|
||||
type: Number,
|
||||
required: true,
|
||||
message: {
|
||||
type:
|
||||
"Максимальное время простоя (мин) удалённого сервиса для генерации оповещения (nUnavlblNtfTime) должно быть числом",
|
||||
required:
|
||||
"Не указано максимальное время простоя (мин) удалённого сервиса для генерации оповещения (nUnavlblNtfTime)"
|
||||
}
|
||||
},
|
||||
//Список адресов E-Mail для оповещения о простое внешнего сервиса
|
||||
//sUnavlblNtfMail: {},
|
||||
sUnavlblNtfMail: {
|
||||
type: String,
|
||||
required: false,
|
||||
message: {
|
||||
type:
|
||||
"Список адресов E-Mail для оповещения о простое внешнего сервиса (sUnavlblNtfMail) должен быть строкой",
|
||||
required: "Не указан список адресов E-Mail для оповещения о простое внешнего сервиса (sUnavlblNtfMail)"
|
||||
}
|
||||
},
|
||||
//Список функций сервиса
|
||||
//fn: {}
|
||||
functions: defServiceFunctions(true, "functions")
|
||||
});
|
||||
|
231
models/obj_service_function.js
Normal file
231
models/obj_service_function.js
Normal file
@ -0,0 +1,231 @@
|
||||
/*
|
||||
Сервис интеграции ПП Парус 8 с WEB API
|
||||
Модели данных: Описатель функции сервиса
|
||||
*/
|
||||
|
||||
//----------------------
|
||||
// Подключение библиотек
|
||||
//----------------------
|
||||
|
||||
const Schema = require("validate"); //Схемы валидации
|
||||
|
||||
//----------
|
||||
// Константы
|
||||
//----------
|
||||
|
||||
//Типы функций сервиса
|
||||
const NFN_TYPE_DATA = 0; //Обмен данными
|
||||
const NFN_TYPE_LOGIN = 1; //Начало сеанса
|
||||
const NFN_TYPE_LOGOUT = 2; //Завершение сеанса
|
||||
const SFN_TYPE_DATA = "DATA"; //Обмен данными (строковый код)
|
||||
const SFN_TYPE_LOGIN = "LOGIN"; //Начало сеанса (строковый код)
|
||||
const SFN_TYPE_LOGOUT = "LOGOUT"; //Завершение сеанса (строковый код)
|
||||
|
||||
//Способы передачи параметров функциям сервиса
|
||||
const NFN_PRMS_TYPE_POST = 0; //POST-запрос
|
||||
const NFN_PRMS_TYPE_GET = 1; //GET-запрос
|
||||
const SFN_PRMS_TYPE_POST = "POST"; //POST-запрос
|
||||
const SFN_PRMS_TYPE_GET = "GET"; //GET-запрос
|
||||
|
||||
//Расписание повторного исполнения функции
|
||||
const NRETRY_SCHEDULE_UNDEF = 0; //Не определено
|
||||
const NRETRY_SCHEDULE_SEC = 1; //Секунда
|
||||
const NRETRY_SCHEDULE_MIN = 2; //Минута
|
||||
const NRETRY_SCHEDULE_HOUR = 3; //Час
|
||||
const NRETRY_SCHEDULE_DAY = 4; //Сутки
|
||||
const NRETRY_SCHEDULE_WEEK = 5; //Неделя
|
||||
const NRETRY_SCHEDULE_MONTH = 6; //Месяц
|
||||
const SRETRY_SCHEDULE_UNDEF = "UNDEFINED"; //Не определено (строковый код)
|
||||
const SRETRY_SCHEDULE_SEC = "SEC"; //Секунда (строковый код)
|
||||
const SRETRY_SCHEDULE_MIN = "MIN"; //Минута (строковый код)
|
||||
const SRETRY_SCHEDULE_HOUR = "HOUR"; //Час (строковый код)
|
||||
const SRETRY_SCHEDULE_DAY = "DAY"; //Сутки (строковый код)
|
||||
const SRETRY_SCHEDULE_WEEK = "WEEK"; //Неделя (строковый код)
|
||||
const SRETRY_SCHEDULE_MONTH = "MONTH"; //Месяц (строковый код)
|
||||
|
||||
//------------------
|
||||
// Интерфейс модуля
|
||||
//------------------
|
||||
|
||||
//Константы
|
||||
exports.NFN_TYPE_DATA = NFN_TYPE_DATA;
|
||||
exports.NFN_TYPE_LOGIN = NFN_TYPE_LOGIN;
|
||||
exports.NFN_TYPE_LOGOUT = NFN_TYPE_LOGOUT;
|
||||
exports.SFN_TYPE_DATA = SFN_TYPE_DATA;
|
||||
exports.SFN_TYPE_LOGIN = SFN_TYPE_LOGIN;
|
||||
exports.SFN_TYPE_LOGOUT = SFN_TYPE_LOGOUT;
|
||||
exports.NFN_PRMS_TYPE_POST = NFN_PRMS_TYPE_POST;
|
||||
exports.NFN_PRMS_TYPE_GET = NFN_PRMS_TYPE_GET;
|
||||
exports.SFN_PRMS_TYPE_POST = SFN_PRMS_TYPE_POST;
|
||||
exports.SFN_PRMS_TYPE_GET = SFN_PRMS_TYPE_GET;
|
||||
exports.NRETRY_SCHEDULE_UNDEF = NRETRY_SCHEDULE_UNDEF;
|
||||
exports.NRETRY_SCHEDULE_SEC = NRETRY_SCHEDULE_SEC;
|
||||
exports.NRETRY_SCHEDULE_MIN = NRETRY_SCHEDULE_MIN;
|
||||
exports.NRETRY_SCHEDULE_HOUR = NRETRY_SCHEDULE_HOUR;
|
||||
exports.NRETRY_SCHEDULE_DAY = NRETRY_SCHEDULE_DAY;
|
||||
exports.NRETRY_SCHEDULE_WEEK = NRETRY_SCHEDULE_WEEK;
|
||||
exports.NRETRY_SCHEDULE_MONTH = NRETRY_SCHEDULE_MONTH;
|
||||
exports.SRETRY_SCHEDULE_UNDEF = SRETRY_SCHEDULE_UNDEF;
|
||||
exports.SRETRY_SCHEDULE_SEC = SRETRY_SCHEDULE_SEC;
|
||||
exports.SRETRY_SCHEDULE_MIN = SRETRY_SCHEDULE_MIN;
|
||||
exports.SRETRY_SCHEDULE_HOUR = SRETRY_SCHEDULE_HOUR;
|
||||
exports.SRETRY_SCHEDULE_DAY = SRETRY_SCHEDULE_DAY;
|
||||
exports.SRETRY_SCHEDULE_WEEK = SRETRY_SCHEDULE_WEEK;
|
||||
exports.SRETRY_SCHEDULE_MONTH = SRETRY_SCHEDULE_MONTH;
|
||||
|
||||
//Схема валидации функции сервиса
|
||||
exports.ServiceFunction = new Schema({
|
||||
//Идентификатор функции сервиса
|
||||
nId: {
|
||||
type: Number,
|
||||
required: true,
|
||||
message: {
|
||||
type: "Идентификатор функции сервиса (nId) должен быть числом",
|
||||
required: "Не указан идентификатор функции сервиса (nId)"
|
||||
}
|
||||
},
|
||||
//Код функции сервиса
|
||||
sCode: {
|
||||
type: String,
|
||||
required: true,
|
||||
message: {
|
||||
type: "Код функции сервиса (sCode) должен быть строкой",
|
||||
required: "Не указан код функции сервиса (sCode)"
|
||||
}
|
||||
},
|
||||
//Тип функции сервиса
|
||||
nFnType: {
|
||||
type: Number,
|
||||
enum: [NFN_TYPE_DATA, NFN_TYPE_LOGIN, NFN_TYPE_LOGOUT],
|
||||
required: true,
|
||||
message: {
|
||||
type: "Тип функции сервиса (nFnType) должен быть числом",
|
||||
enum: "Значение типа функции сервиса (nFnType) не поддерживается",
|
||||
required: "Не указан тип функции сервиса (nFnType)"
|
||||
}
|
||||
},
|
||||
//Тип функции сервиса (строковый код)
|
||||
sFnType: {
|
||||
type: String,
|
||||
enum: [SFN_TYPE_DATA, SFN_TYPE_LOGIN, SFN_TYPE_LOGOUT],
|
||||
required: true,
|
||||
message: {
|
||||
type: "Строковый код типа функции сервиса (sFnType) должен быть строкой",
|
||||
enum: "Значение строкового кода типа функции сервиса (sFnType) не поддерживается",
|
||||
required: "Не указан строковый код типа функции сервиса (sFnType)"
|
||||
}
|
||||
},
|
||||
//Адрес функции сервиса
|
||||
sFnURL: {
|
||||
type: String,
|
||||
required: true,
|
||||
message: {
|
||||
type: "Адрес функции сервиса (sFnURL) должен быть строкой",
|
||||
required: "Не указан адрес функции сервиса (sFnURL)"
|
||||
}
|
||||
},
|
||||
//Способ передачи параметров функции сервиса
|
||||
nFnPrmsType: {
|
||||
type: Number,
|
||||
enum: [NFN_PRMS_TYPE_GET, NFN_PRMS_TYPE_POST],
|
||||
required: true,
|
||||
message: {
|
||||
type: "Способ передачи параметров функции сервиса (nFnPrmsType) должен быть числом",
|
||||
enum: "Значение способа передачи параметров функции сервиса (nFnPrmsType) не поддерживается",
|
||||
required: "Не указан способ передачи параметров функции сервиса (nFnPrmsType)"
|
||||
}
|
||||
},
|
||||
//Способ передачи параметров функции сервиса (строковый код)
|
||||
sFnPrmsType: {
|
||||
type: String,
|
||||
enum: [SFN_PRMS_TYPE_GET, SFN_PRMS_TYPE_POST],
|
||||
required: true,
|
||||
message: {
|
||||
type: "Строковый код способа передачи параметров функции сервиса (sFnPrmsType) должен быть строкой",
|
||||
enum:
|
||||
"Значение строкового кода способа передачи параметров функции сервиса (sFnPrmsType) не поддерживается",
|
||||
required: "Не указан строковый код способа передачи параметров функции сервиса (sFnPrmsType)"
|
||||
}
|
||||
},
|
||||
//График повторной отправки запроса функции сервиса
|
||||
nRetrySchedule: {
|
||||
type: Number,
|
||||
enum: [
|
||||
NRETRY_SCHEDULE_UNDEF,
|
||||
NRETRY_SCHEDULE_SEC,
|
||||
NRETRY_SCHEDULE_MIN,
|
||||
NRETRY_SCHEDULE_HOUR,
|
||||
NRETRY_SCHEDULE_DAY,
|
||||
NRETRY_SCHEDULE_WEEK,
|
||||
NRETRY_SCHEDULE_MONTH
|
||||
],
|
||||
required: true,
|
||||
message: {
|
||||
type: "График повторной отправки запроса функции сервиса (nRetrySchedule) должен быть числом",
|
||||
enum: "Значение графика повторной отправки запроса функции сервиса (nRetrySchedule) не поддерживается",
|
||||
required: "Не указан график повторной отправки запроса функции сервиса (nRetrySchedule)"
|
||||
}
|
||||
},
|
||||
//График повторной отправки запроса функции сервиса (строковый код)
|
||||
sRetrySchedule: {
|
||||
type: String,
|
||||
enum: [
|
||||
SRETRY_SCHEDULE_UNDEF,
|
||||
SRETRY_SCHEDULE_SEC,
|
||||
SRETRY_SCHEDULE_MIN,
|
||||
SRETRY_SCHEDULE_HOUR,
|
||||
SRETRY_SCHEDULE_DAY,
|
||||
SRETRY_SCHEDULE_WEEK,
|
||||
SRETRY_SCHEDULE_MONTH
|
||||
],
|
||||
required: true,
|
||||
message: {
|
||||
type:
|
||||
"Строковый код графика повторной отправки запроса функции сервиса (sRetrySchedule) должен быть строкой",
|
||||
enum:
|
||||
"Значение строкового кода графика повторной отправки запроса функции сервиса (sRetrySchedule) не поддерживается",
|
||||
required: "Не указан строковый код графика повторной отправки запроса функции сервиса (sRetrySchedule)"
|
||||
}
|
||||
},
|
||||
//Идентификатор типового сообщения обмена, обрабатываемого функцией сервиса
|
||||
nMsgId: {
|
||||
type: Number,
|
||||
required: true,
|
||||
message: {
|
||||
type:
|
||||
"Идентификатор типового сообщения обмена, обрабатываемого функцией сервиса (nMsgId) должен быть числом",
|
||||
required: "Не указан идентификатор типового сообщения обмена, обрабатываемого функцией сервиса (nMsgId)"
|
||||
}
|
||||
},
|
||||
//Код типового сообщения обмена, обрабатываемого функцией сервиса
|
||||
sMsgCode: {
|
||||
type: String,
|
||||
required: true,
|
||||
message: {
|
||||
type: "Код типового сообщения обмена, обрабатываемого функцией сервиса (sMsgCode) должен быть строкой",
|
||||
required: "Не указан код типового сообщения обмена, обрабатываемого функцией сервиса (sMsgCode)"
|
||||
}
|
||||
},
|
||||
//Обработчик сообщения "до" на строне сервера приложений для функции сервиса
|
||||
sAppSrvBefore: {
|
||||
type: String,
|
||||
required: false,
|
||||
message: {
|
||||
type:
|
||||
'Обработчик сообщения "до" на строне сервера приложений для функции сервиса (sAppSrvBefore) должен быть строкой',
|
||||
required:
|
||||
'Не указан обработчик сообщения "до" на строне сервера приложений для функции сервиса (sAppSrvBefore)'
|
||||
}
|
||||
},
|
||||
//Обработчик сообщения "после" на строне сервера приложений для функции сервиса
|
||||
sAppSrvAfter: {
|
||||
type: String,
|
||||
required: false,
|
||||
message: {
|
||||
type:
|
||||
'Обработчик сообщения "после" на строне сервера приложений для функции сервиса (sAppSrvAfter) должен быть строкой',
|
||||
required:
|
||||
'Не указан обработчик сообщения "после" на строне сервера приложений для функции сервиса (sAppSrvBefore)'
|
||||
}
|
||||
}
|
||||
});
|
37
models/obj_service_functions.js
Normal file
37
models/obj_service_functions.js
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
Сервис интеграции ПП Парус 8 с WEB API
|
||||
Модели данных: Описатель списка функций сервиса
|
||||
*/
|
||||
|
||||
//----------------------
|
||||
// Подключение библиотек
|
||||
//----------------------
|
||||
|
||||
const Schema = require("validate"); //Схемы валидации
|
||||
const { ServiceFunction } = require("../models/obj_service_function"); //Схема валидации функции сервиса
|
||||
|
||||
//------------
|
||||
// Тело модуля
|
||||
//------------
|
||||
|
||||
//Описатель схемы валидации списка функций сервиса
|
||||
const defServiceFunctions = (bRequired, sName) => {
|
||||
return {
|
||||
type: Array,
|
||||
required: bRequired,
|
||||
each: ServiceFunction,
|
||||
message: {
|
||||
required: "Не указан список функций сервиса (" + sName + ")"
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
//------------------
|
||||
// Интерфейс модуля
|
||||
//------------------
|
||||
|
||||
//Описатель схемы валидации списка функций сервиса
|
||||
exports.defServiceFunctions = defServiceFunctions;
|
||||
|
||||
//Схема валидации списка функций сервиса
|
||||
exports.ServiceFunctions = new Schema({ functions: defServiceFunctions(true, "functions") });
|
37
models/obj_services.js
Normal file
37
models/obj_services.js
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
Сервис интеграции ПП Парус 8 с WEB API
|
||||
Модели данных: Описатель списка сервисов
|
||||
*/
|
||||
|
||||
//----------------------
|
||||
// Подключение библиотек
|
||||
//----------------------
|
||||
|
||||
const Schema = require("validate"); //Схемы валидации
|
||||
const { Service } = require("../models/obj_service");
|
||||
|
||||
//------------
|
||||
// Тело модуля
|
||||
//------------
|
||||
|
||||
//Описатель схемы валидации списка сервисов
|
||||
const defServices = (bRequired, sName) => {
|
||||
return {
|
||||
type: Array,
|
||||
required: bRequired,
|
||||
each: Service,
|
||||
message: {
|
||||
required: "Не указан список сервисов (" + sName + ")"
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
//------------------
|
||||
// Интерфейс модуля
|
||||
//------------------
|
||||
|
||||
//Описатель схемы валидации списка сервисов
|
||||
exports.defServices = defServices;
|
||||
|
||||
//Схема валидации списка сервисов
|
||||
exports.Services = new Schema({ services: defServices(true, "services") });
|
@ -14,7 +14,7 @@ const Schema = require("validate"); //Схемы валидации
|
||||
//------------------
|
||||
|
||||
//Схема валидации параметров установки состояния позиции очереди
|
||||
exports.getQueueStatePrmsSchema = new Schema({
|
||||
exports.setQueueState = new Schema({
|
||||
//Идентификатор позиции очереди
|
||||
nQueueId: {
|
||||
type: Number,
|
||||
|
52
test.js
52
test.js
@ -4,8 +4,11 @@
|
||||
*/
|
||||
|
||||
require("module-alias/register");
|
||||
const srvsModel = require("./models/obj_services"); //Модель данных списка сервисов
|
||||
const srvModel = require("./models/obj_service"); //Модель данных сервиса
|
||||
const dbConnectorModel = require("./models/prms_db_connector"); //Модель данных сервиса
|
||||
const srvFnModel = require("./models/obj_service_function"); //Модель данных функции сервиса
|
||||
const srvFnSModel = require("./models/obj_service_functions"); //Модель данных функции сервиса
|
||||
const dbConnectorModel = require("./models/prms_db_connector"); //Описатели параметров функций модуля подключения к БД
|
||||
const dbConnectorInterfaceModel = require("./models/intf_db_connector_module"); //Интерфейс модуля взаимодействия с БД
|
||||
const utl = require("./core/utils"); //Вспомогательные функции
|
||||
const db = require("./core/db_connector"); //Взаимодействие с БД
|
||||
@ -13,20 +16,41 @@ const cfg = require("./config"); //Настройки сервера прило
|
||||
|
||||
const pDB = require("./modules/parus_oracle_db");
|
||||
|
||||
let a = utl.validateObject(
|
||||
{ nQueueId: 123, nExecState: 123, sExecMsg: "" },
|
||||
dbConnectorModel.getQueueStatePrmsSchema,
|
||||
"Тестовый"
|
||||
);
|
||||
console.log(a);
|
||||
//let a = utl.validateObject(
|
||||
// { nQueueId: 123, nExecState: 123, sExecMsg: "" },
|
||||
// dbConnectorModel.getQueueStatePrmsSchema,
|
||||
// "Тестовый"
|
||||
//);
|
||||
//console.log(a);
|
||||
|
||||
//let b = utl.validateObject(
|
||||
// pDB,
|
||||
// dbConnectorInterfaceModel.dbConnectorModule,
|
||||
// "Пользовательский модуль подключения к БД"
|
||||
//);
|
||||
//if (b) console.log(b);
|
||||
//else console.log("Нет ошибок в модуле");
|
||||
|
||||
const getServices = async () => {
|
||||
let d = new db.DBConnector(cfg.dbConnect);
|
||||
await d.connect();
|
||||
r = await d.getServices();
|
||||
await d.disconnect();
|
||||
console.log(r);
|
||||
let errs = utl.validateObject(r[1], srvModel.Service, "Сервис");
|
||||
let errs2 = utl.validateObject({ functions: r[1].functions }, srvFnSModel.ServiceFunctions, "Функция сервиса");
|
||||
let errs3 = utl.validateObject({ services: r }, srvsModel.Services, "Список сервисов");
|
||||
console.log(r[1].functions[0]);
|
||||
if (errs2) console.log(errs2);
|
||||
else console.log("Нет ошибок в функции сервиса");
|
||||
if (errs) console.log(errs);
|
||||
else console.log("Нет ошибок в сервисе");
|
||||
if (errs3) console.log(errs3);
|
||||
else console.log("Нет ошибок в списке сервисов");
|
||||
};
|
||||
|
||||
getServices();
|
||||
|
||||
let b = utl.validateObject(
|
||||
pDB,
|
||||
dbConnectorInterfaceModel.dbConnectorModule,
|
||||
"Пользовательский модуль подключения к БД"
|
||||
);
|
||||
if (b) console.log(b);
|
||||
else console.log("Нет ошибок в модуле");
|
||||
/*
|
||||
const errors = srvModel.schema.validate({ nId: 123, sCode: "", nSrvType: "", sSrvType: "" });
|
||||
console.log(errors);
|
||||
|
Loading…
x
Reference in New Issue
Block a user