597 lines
29 KiB
JavaScript
597 lines
29 KiB
JavaScript
/*
|
||
Сервис интеграции ПП Парус 8 с WEB API
|
||
Модели данных: описатели параметров функций модуля взаимодействия с БД (класс DBConnector)
|
||
*/
|
||
|
||
//----------------------
|
||
// Подключение библиотек
|
||
//----------------------
|
||
|
||
const Schema = require("validate"); //Схемы валидации
|
||
const { dbConnect } = require("./obj_config"); //Схемы валидации конфигурации сервера приложений
|
||
const { NLOG_STATE_INF, NLOG_STATE_WRN, NLOG_STATE_ERR } = require("./obj_log"); //Схемы валидации записи журнала работы сервиса обмена
|
||
const { NFORCE_NO, NFORCE_YES } = require("./common"); //Общие алгоритмы валидации
|
||
const {
|
||
NQUEUE_EXEC_STATE_INQUEUE,
|
||
NQUEUE_EXEC_STATE_APP,
|
||
NQUEUE_EXEC_STATE_APP_OK,
|
||
NQUEUE_EXEC_STATE_APP_ERR,
|
||
NQUEUE_EXEC_STATE_DB,
|
||
NQUEUE_EXEC_STATE_DB_OK,
|
||
NQUEUE_EXEC_STATE_DB_ERR,
|
||
NQUEUE_EXEC_STATE_OK,
|
||
NQUEUE_EXEC_STATE_ERR,
|
||
NQUEUE_RESET_DATA_NO,
|
||
NQUEUE_RESET_DATA_YES
|
||
} = require("./obj_queue"); //Схемы валидации сообщения очереди обмена
|
||
|
||
//----------
|
||
// Константы
|
||
//----------
|
||
|
||
//Признак инкремента количества попыток исполнения позиции очереди
|
||
NINC_EXEC_CNT_NO = 0; //Не инкрементировать
|
||
NINC_EXEC_CNT_YES = 1; //Инкрементировать
|
||
|
||
//Признак оригинала данных
|
||
NIS_ORIGINAL_NO = 0; //Оригинал
|
||
NIS_ORIGINAL_YES = 1; //Не оригинал
|
||
|
||
//------------
|
||
// Тело модуля
|
||
//------------
|
||
|
||
//Валидация данных сообщения очереди
|
||
const validateBuffer = val => {
|
||
//Либо null
|
||
if (val === null) {
|
||
return true;
|
||
} else {
|
||
//Либо Buffer
|
||
return val instanceof Buffer;
|
||
}
|
||
};
|
||
|
||
//------------------
|
||
// Интерфейс модуля
|
||
//------------------
|
||
|
||
//Константы
|
||
exports.NINC_EXEC_CNT_NO = NINC_EXEC_CNT_NO;
|
||
exports.NINC_EXEC_CNT_YES = NINC_EXEC_CNT_YES;
|
||
exports.NIS_ORIGINAL_NO = NIS_ORIGINAL_NO;
|
||
exports.NIS_ORIGINAL_YES = NIS_ORIGINAL_YES;
|
||
|
||
//Схема валидации параметров конструктора
|
||
exports.DBConnector = new Schema({
|
||
//Параметры подключения к БД
|
||
connectSettings: {
|
||
schema: dbConnect,
|
||
required: true,
|
||
message: {
|
||
required: path => `Не указаны параметры подключения к БД (${path})`
|
||
}
|
||
}
|
||
});
|
||
|
||
//Схема валидации параметров функции получения списка функций сервиса
|
||
exports.getServiceFunctions = new Schema({
|
||
//Идентификатор сервиса
|
||
nServiceId: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор сервиса (${path})`
|
||
}
|
||
}
|
||
});
|
||
|
||
//Схема валидации параметров функции получения контекста сервиса
|
||
exports.getServiceContext = new Schema({
|
||
//Идентификатор сервиса
|
||
nServiceId: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор сервиса (${path})`
|
||
}
|
||
}
|
||
});
|
||
|
||
//Схема валидации параметров функции установки контектса сервиса
|
||
exports.setServiceContext = new Schema({
|
||
//Идентификатор сервиса
|
||
nServiceId: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор сервиса (${path})`
|
||
}
|
||
},
|
||
//Контекст сервиса
|
||
sCtx: {
|
||
type: String,
|
||
required: true,
|
||
message: {
|
||
type: path => `Контекст сервиса (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
||
required: path => `Не указан контекст сервиса (${path})`
|
||
}
|
||
},
|
||
//Дата истечения контекста сервиса
|
||
dCtxExp: {
|
||
type: Date,
|
||
required: false,
|
||
message: {
|
||
type: path => `Дата истечения контекст сервиса (${path}) имеет некорректный тип данных (ожидалось - Date)`,
|
||
required: path => `Не указана дата истечения контекста сервиса (${path})`
|
||
}
|
||
}
|
||
});
|
||
|
||
//Схема валидации параметров функции очистки контекста сервиса
|
||
exports.clearServiceContext = new Schema({
|
||
//Идентификатор сервиса
|
||
nServiceId: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор сервиса (${path})`
|
||
}
|
||
}
|
||
});
|
||
|
||
//Схема валидации параметров функции проверки аутентифицированности сервиса
|
||
exports.isServiceAuth = new Schema({
|
||
//Идентификатор сервиса
|
||
nServiceId: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор сервиса (${path})`
|
||
}
|
||
}
|
||
});
|
||
|
||
//Схема валидации параметров функции постановки в очередь задания на аутентификацию сервиса
|
||
exports.putServiceAuthInQueue = new Schema({
|
||
//Идентификатор сервиса
|
||
nServiceId: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор сервиса (${path})`
|
||
}
|
||
},
|
||
//Признак принудительного завершения сессии
|
||
nForce: {
|
||
type: Number,
|
||
required: false,
|
||
enum: [NFORCE_YES, NFORCE_NO],
|
||
message: {
|
||
type: path =>
|
||
`Признак принудительного завершения сессии (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
enum: path => `Значение признака принудительного завершения сессии (${path}) не поддерживается`,
|
||
required: path => `Не указан признак принудительного завершения сессии (${path})`
|
||
}
|
||
}
|
||
});
|
||
|
||
//Схема валидации параметров функции получения информации о просроченных сообщениях обмена сервиса
|
||
exports.getServiceExpiredQueueInfo = new Schema({
|
||
//Идентификатор сервиса
|
||
nServiceId: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор сервиса (${path})`
|
||
}
|
||
}
|
||
});
|
||
|
||
//Схема валидации параметров функции записи в журнал работы сервиса
|
||
exports.putLog = new Schema({
|
||
//Тип сообщения журнала работы сервиса
|
||
nLogState: {
|
||
type: Number,
|
||
enum: [NLOG_STATE_INF, NLOG_STATE_WRN, NLOG_STATE_ERR],
|
||
required: true,
|
||
message: {
|
||
type: path =>
|
||
`Тип сообщения журнала работы сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
enum: path => `Значение типа сообщения журнала работы сервиса (${path}) не поддерживается`,
|
||
required: path => `Не указан тип сообщения журнала работы сервиса (${path})`
|
||
}
|
||
},
|
||
//Сообщение журнала работы сервиса
|
||
sMsg: {
|
||
type: String,
|
||
required: false,
|
||
message: {
|
||
type: path =>
|
||
`Сообщение журнала работы сервиса (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
||
required: path => `Не указано сообщение журнала работы сервиса (${path})`
|
||
}
|
||
},
|
||
//Идентификатор связанного сервиса
|
||
nServiceId: {
|
||
type: Number,
|
||
required: false,
|
||
message: {
|
||
type: path =>
|
||
`Идентификатор связанного сервиса сообщения журнала работы сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор связанного сервиса сообщения журнала работы сервиса (${path})`
|
||
}
|
||
},
|
||
//Идентификатор связанной функции-обработчика сервиса
|
||
nServiceFnId: {
|
||
type: Number,
|
||
required: false,
|
||
message: {
|
||
type: path =>
|
||
`Идентификатор связанной функции-обработчика сообщения журнала работы сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path =>
|
||
`Не указан идентификатор связанной функции-обработчика сообщения журнала работы сервиса (${path})`
|
||
}
|
||
},
|
||
//Идентификатор связанной позиции очереди обмена
|
||
nQueueId: {
|
||
type: Number,
|
||
required: false,
|
||
message: {
|
||
type: path =>
|
||
`Идентификатор связанной позиции очереди обмена сообщения журнала работы сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path =>
|
||
`Не указан идентификатор связанной позиции очереди обмена сообщения журнала работы сервиса (${path})`
|
||
}
|
||
}
|
||
});
|
||
|
||
//Схема валидации параметров функции считывания позиции очереди
|
||
exports.getQueue = new Schema({
|
||
//Идентификатор позиции очереди обмена
|
||
nQueueId: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path =>
|
||
`Идентификатор позиции очереди обмена (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор позиции очереди обмена (${path})`
|
||
}
|
||
}
|
||
});
|
||
|
||
//Схема валидации параметров функции добавления позиции очереди
|
||
exports.putQueue = new Schema({
|
||
//Идентификатор функции сервиса обработчика позиции очереди
|
||
nServiceFnId: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path =>
|
||
`Идентификатор функции сервиса обработчика позиции очереди (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор функции сервиса обработчика позиции очереди (${path})`
|
||
}
|
||
},
|
||
//Данные сообщения очереди обмена
|
||
blMsg: {
|
||
use: { validateBuffer },
|
||
required: false,
|
||
message: {
|
||
validateBuffer: path =>
|
||
`Данные сообщения очереди обмена (${path}) имеют некорректный тип данных (ожидалось - null или Buffer)`,
|
||
required: path => `Не указаны данные сообщения очереди обмена (${path})`
|
||
}
|
||
},
|
||
//Идентификатор связанной позиции очереди обмена
|
||
nQueueId: {
|
||
type: Number,
|
||
required: false,
|
||
message: {
|
||
type: path =>
|
||
`Идентификатор связанной позиции очереди обмена (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор связанной позиции очереди обмена (${path})`
|
||
}
|
||
},
|
||
//Идентификатор связанной организации
|
||
nLnkCompanyId: {
|
||
type: Number,
|
||
required: false,
|
||
message: {
|
||
type: path =>
|
||
`Идентификатор связанной организации (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор связанной организации (${path})`
|
||
}
|
||
},
|
||
//Идентификатор связанного документа
|
||
nLnkDocumentId: {
|
||
type: Number,
|
||
required: false,
|
||
message: {
|
||
type: path =>
|
||
`Идентификатор связанного документа (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор связанного документа (${path})`
|
||
}
|
||
},
|
||
//Код связанного раздела
|
||
sLnkUnitcode: {
|
||
type: String,
|
||
required: false,
|
||
message: {
|
||
type: path => `Код связанного раздела (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
||
required: path => `Не указан код связанного раздела (${path})`
|
||
}
|
||
},
|
||
//Параметры сообщения
|
||
sOptions: {
|
||
type: String,
|
||
required: false,
|
||
message: {
|
||
type: path => `Параметры сообщения (${path}) имеют некорректный тип данных (ожидалось - String)`,
|
||
required: path => `Не указаны параметры сообщения (${path})`
|
||
}
|
||
}
|
||
});
|
||
|
||
//Схема валидации параметров функции считывания исходящих сообщений
|
||
exports.getOutgoing = new Schema({
|
||
//Количество считываемых сообщений очереди
|
||
nPortionSize: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path =>
|
||
`Количество считываемых сообщений очереди (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указано количество считываемых сообщений очереди (${path})`
|
||
}
|
||
}
|
||
});
|
||
|
||
//Схема валидации параметров функции установки состояния позиции очереди
|
||
exports.setQueueState = new Schema({
|
||
//Идентификатор позиции очереди
|
||
nQueueId: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path => `Идентификатор позиции очереди (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор позиции очереди (${path})`
|
||
}
|
||
},
|
||
//Код состояния
|
||
nExecState: {
|
||
type: Number,
|
||
enum: [
|
||
NQUEUE_EXEC_STATE_INQUEUE,
|
||
NQUEUE_EXEC_STATE_APP,
|
||
NQUEUE_EXEC_STATE_APP_OK,
|
||
NQUEUE_EXEC_STATE_APP_ERR,
|
||
NQUEUE_EXEC_STATE_DB,
|
||
NQUEUE_EXEC_STATE_DB_OK,
|
||
NQUEUE_EXEC_STATE_DB_ERR,
|
||
NQUEUE_EXEC_STATE_OK,
|
||
NQUEUE_EXEC_STATE_ERR
|
||
],
|
||
required: false,
|
||
message: {
|
||
type: path => `Код состояния (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
enum: path => `Значение кода состояния (${path}) не поддерживается`,
|
||
required: path => `Не указан код состояния (${path})`
|
||
}
|
||
},
|
||
//Сообщение обработчика
|
||
sExecMsg: {
|
||
type: String,
|
||
required: false,
|
||
message: {
|
||
type: path => `Сообщение обработчика (${path}) имеет некорректный тип данных (ожидалось - String)`,
|
||
required: path => `Не указано сообщени обработчика (${path})`
|
||
}
|
||
},
|
||
//Флаг инкремента количества исполнений
|
||
nIncExecCnt: {
|
||
type: Number,
|
||
enum: [NINC_EXEC_CNT_NO, NINC_EXEC_CNT_YES],
|
||
required: false,
|
||
message: {
|
||
type: path =>
|
||
`Флаг инкремента количества исполнений (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
enum: path => `Значение флага инкремента количества исполнений (${path}) не поддерживается`,
|
||
required: path => `Не указан флаг икремента количества исполнений (${path})`
|
||
}
|
||
},
|
||
//Флаг сброса данных сообщения
|
||
nResetData: {
|
||
type: Number,
|
||
enum: [NQUEUE_RESET_DATA_NO, NQUEUE_RESET_DATA_YES],
|
||
required: false,
|
||
message: {
|
||
type: path => `Флаг сброса данных сообщения (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
enum: path => `Значение флага сброса данных сообщения (${path}) не поддерживается`,
|
||
required: path => `Не указан флаг сброса данных сообщения (${path})`
|
||
}
|
||
}
|
||
});
|
||
|
||
//Схема валидации параметров функции считывание данных сообщения из позиции очереди
|
||
exports.getQueueMsg = new Schema({
|
||
//Идентификатор позиции очереди
|
||
nQueueId: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path => `Идентификатор позиции очереди (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор позиции очереди (${path})`
|
||
}
|
||
}
|
||
});
|
||
|
||
//Схема валидации параметров функции записи данных сообщения в позицию очереди
|
||
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.setQueueOptions = new Schema({
|
||
//Идентификатор позиции очереди
|
||
nQueueId: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path => `Идентификатор позиции очереди (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор позиции очереди (${path})`
|
||
}
|
||
},
|
||
//Параметры сообщения очереди обмена
|
||
sOptions: {
|
||
type: String,
|
||
required: true,
|
||
message: {
|
||
validateBuffer: path =>
|
||
`Парамметры сообщения очереди обмена (${path}) имеют некорректный тип данных (ожидалось - String)`,
|
||
required: path => `Не указаны параметры сообщения очереди обмена (${path})`
|
||
}
|
||
}
|
||
}).validator({ required: val => val === null || val === 0 || val });
|
||
|
||
//Схема валидации параметров функции считывание ответа на сообщение из позиции очереди
|
||
exports.getQueueResp = new Schema({
|
||
//Идентификатор позиции очереди
|
||
nQueueId: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path => `Идентификатор позиции очереди (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор позиции очереди (${path})`
|
||
}
|
||
}
|
||
});
|
||
|
||
//Схема валидации параметров функции записи ответа на сообщение в позицию очереди
|
||
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})`
|
||
}
|
||
},
|
||
//Признак передачи оригинала ответа
|
||
nIsOriginal: {
|
||
type: Number,
|
||
enum: [NIS_ORIGINAL_NO, NIS_ORIGINAL_YES],
|
||
required: true,
|
||
message: {
|
||
type: path =>
|
||
`Признак передачи оригинала ответа (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
enum: path => `Значение признака передачи оригинала ответа (${path}) не поддерживается`,
|
||
required: path => `Не указан признак передачи оригинала ответа (${path})`
|
||
}
|
||
}
|
||
}).validator({ required: val => val === null || val === 0 || val });
|
||
|
||
//Схема валидации параметров функции записи параметров ответа на сообщение в позицию очереди
|
||
exports.setQueueOptionsResp = new Schema({
|
||
//Идентификатор позиции очереди
|
||
nQueueId: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path => `Идентификатор позиции очереди (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор позиции очереди (${path})`
|
||
}
|
||
},
|
||
//Параметры ответа на сообщение очереди обмена
|
||
sOptionsResp: {
|
||
type: String,
|
||
required: true,
|
||
message: {
|
||
validateBuffer: path =>
|
||
`Парамметры ответа на сообщение очереди обмена (${path}) имеют некорректный тип данных (ожидалось - String)`,
|
||
required: path => `Не указаны параметры ответа на сообщение очереди обмена (${path})`
|
||
}
|
||
}
|
||
}).validator({ required: val => val === null || val === 0 || val });
|
||
|
||
//Схема валидации параметров функции установки результата обработки позиции очереди
|
||
exports.setQueueAppSrvResult = 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})`
|
||
}
|
||
},
|
||
//Данные ответа сообщения очереди обмена
|
||
blResp: {
|
||
use: { validateBuffer },
|
||
required: true,
|
||
message: {
|
||
validateBuffer: path =>
|
||
`Данные ответа сообщения очереди обмена (${path}) имеют некорректный тип данных (ожидалось - null или Buffer)`,
|
||
required: path => `Не указаны данные ответа сообщения очереди обмена (${path})`
|
||
}
|
||
}
|
||
}).validator({ required: val => val === null || val });
|
||
|
||
//Схема валидации параметров функции исполнения обработчика со стороны БД для позиции очереди
|
||
exports.execQueueDBPrc = new Schema({
|
||
//Идентификатор позиции очереди
|
||
nQueueId: {
|
||
type: Number,
|
||
required: true,
|
||
message: {
|
||
type: path => `Идентификатор позиции очереди (${path}) имеет некорректный тип данных (ожидалось - Number)`,
|
||
required: path => `Не указан идентификатор позиции очереди (${path})`
|
||
}
|
||
}
|
||
});
|