P8-ExchangeService/models/obj_service.js

304 lines
16 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Сервис интеграции ПП Парус 8 с WEB API
Модели данных: описатель сервиса
*/
//----------------------
// Подключение библиотек
//----------------------
const Schema = require("validate"); //Схемы валидации
const { defServiceFunctions } = require("./obj_service_functions"); //Схема валидации списка функций сервиса
const { validateMailList } = require("./common"); //Общие объекты валидации моделей данных
//----------
// Константы
//----------
//Типы сервисов
const NSRV_TYPE_SEND = 0; //Отправка сообщений
const NSRV_TYPE_RECIVE = 1; //Получение сообщений
const SSRV_TYPE_SEND = "SEND"; //Отправка сообщений (строковый код)
const SSRV_TYPE_RECIVE = "RECIVE"; //Получение сообщений (строковый код)
//Признак оповещения о простое удаленного сервиса
const NUNAVLBL_NTF_SIGN_NO = 0; //Не оповещать о простое
const NUNAVLBL_NTF_SIGN_YES = 1; //Оповещать о простое
const SUNAVLBL_NTF_SIGN_NO = "UNAVLBL_NTF_NO"; //Не оповещать о простое (строковый код)
const SUNAVLBL_NTF_SIGN_YES = "UNAVLBL_NTF_YES"; //Оповещать о простое (строковый код)
//Признак аутентифицированности сервиса
const NIS_AUTH_YES = 1; //Аутентифицирован
const NIS_AUTH_NO = 0; //Неаутентифицирован
const SIS_AUTH_YES = "IS_AUTH_YES"; //Аутентифицирован (строковый код)
const SIS_AUTH_NO = "IS_AUTH_NO"; //Неаутентифицирован (строковый код)
//Протоколы работы сервиса
const SPROTOCOL_HTTP = "http"; //Протокол HTTP
const SPROTOCOL_HTTPS = "https"; //Протокол HTTPS
const SPROTOCOL_MQTT = "mqtt"; //Протокол MQTT
const SPROTOCOL_MQTTS = "mqtts"; //Протокол MQTTS
const SPROTOCOL_KAFKA = "kafka"; //Протокол для работы с KAFKA
//-------------
// Тело модуля
//-------------
//Валидация списка адресов E-Mail для оповещения о простое внешнего сервиса
const validateUnavlblNtfMail = val => {
return validateMailList(val);
};
//------------------
// Интерфейс модуля
//------------------
//Константы
exports.NSRV_TYPE_SEND = NSRV_TYPE_SEND;
exports.NSRV_TYPE_RECIVE = NSRV_TYPE_RECIVE;
exports.SSRV_TYPE_SEND = SSRV_TYPE_SEND;
exports.SSRV_TYPE_RECIVE = SSRV_TYPE_RECIVE;
exports.NUNAVLBL_NTF_SIGN_NO = NUNAVLBL_NTF_SIGN_NO;
exports.NUNAVLBL_NTF_SIGN_YES = NUNAVLBL_NTF_SIGN_YES;
exports.SUNAVLBL_NTF_SIGN_NO = SUNAVLBL_NTF_SIGN_NO;
exports.SUNAVLBL_NTF_SIGN_YES = SUNAVLBL_NTF_SIGN_YES;
exports.NIS_AUTH_YES = NIS_AUTH_YES;
exports.NIS_AUTH_NO = NIS_AUTH_NO;
exports.SIS_AUTH_YES = SIS_AUTH_YES;
exports.SIS_AUTH_NO = SIS_AUTH_NO;
exports.SPROTOCOL_HTTP = SPROTOCOL_HTTP;
exports.SPROTOCOL_HTTPS = SPROTOCOL_HTTPS;
exports.SPROTOCOL_MQTT = SPROTOCOL_MQTT;
exports.SPROTOCOL_MQTTS = SPROTOCOL_MQTTS;
exports.SPROTOCOL_KAFKA = SPROTOCOL_KAFKA;
//Схема валидации сервиса
exports.Service = new Schema({
//Идентификатор сервиса
nId: {
type: Number,
required: true,
message: {
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
required: path => `Не указан идентификатор сервиса (${path})`
}
},
//Код сервиса
sCode: {
type: String,
required: true,
message: {
type: path => `Код сервиса (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path => `Не указан код сервиса (${path})`
}
},
//Наименование сервиса
sName: {
type: String,
required: true,
message: {
type: path => `Наименование сервиса (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path => `Не указано наименование сервиса (${path})`
}
},
//Тип сервиса
nSrvType: {
type: Number,
enum: [NSRV_TYPE_SEND, NSRV_TYPE_RECIVE],
required: true,
message: {
type: path => `Тип сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
enum: path => `Значение типа сервиса (${path}) не поддерживается`,
required: path => `Не указан типа сервиса (${path})`
}
},
//Тип сервиса (строковый код)
sSrvType: {
type: String,
enum: [SSRV_TYPE_SEND, SSRV_TYPE_RECIVE],
required: true,
message: {
type: path => `Строковый код типа сервиса (${path}) имеет некорректный тип данных (ожидалось - String)`,
enum: path => `Значение строкового кода типа сервиса (${path}) не поддерживается`,
required: path => `Не указан строковый код типа сервиса (${path})`
}
},
//Корневой каталог сервиса
sSrvRoot: {
type: String,
required: true,
message: {
type: path => `Корневой каталог сервиса (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path => `Не указан корневой каталог сервиса (${path})`
}
},
//Имя пользователя сервиса
sSrvUser: {
type: String,
required: false,
message: {
type: path => `Имя пользователя сервиса (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path => `Не указано имя пользователя сервиса (${path})`
}
},
//Пароль пользователя
sSrvPass: {
type: String,
required: false,
message: {
type: path => `Пароль пользователя сервиса (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path => `Не указан пароль пользователя сервиса (${path})`
}
},
//Признак необходимости оповещения о простое внешнего сервиса
nUnavlblNtfSign: {
type: Number,
enum: [NUNAVLBL_NTF_SIGN_NO, NUNAVLBL_NTF_SIGN_YES],
required: true,
message: {
type: path => `Признак необходимости оповещения о простое внешнего сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
enum: path => `Значение признака необходимости оповещения о простое внешнего сервиса (${path}) не поддерживается`,
required: path => `Не указан признак необходимости оповещения о простое внешнего сервиса (${path})`
}
},
//Признак необходимости оповещения о простое внешнего сервиса (строковый код)
sUnavlblNtfSign: {
type: String,
enum: [SUNAVLBL_NTF_SIGN_NO, SUNAVLBL_NTF_SIGN_YES],
required: true,
message: {
type: path =>
`Строковый код признака необходимости оповещения о простое внешнего сервиса (${path}) имеет некорректный тип данных (ожидалось - String)`,
enum: path => `Значение строкового кода признака необходимости оповещения о простое внешнего сервиса (${path}) не поддерживается`,
required: path => `Не указан строковый код признака необходимости оповещения о простое внешнего сервиса (${path})`
}
},
//Максимальное время простоя (мин) удалённого сервиса для генерации оповещения
nUnavlblNtfTime: {
type: Number,
required: true,
message: {
type: path =>
`Максимальное время простоя (мин) удалённого сервиса для генерации оповещения (${path}) имеет некорректный тип данных (ожидалось - Number)`,
required: path => `Не указано максимальное время простоя (мин) удалённого сервиса для генерации оповещения (${path})`
}
},
//Список адресов E-Mail для оповещения о простое внешнего сервиса
sUnavlblNtfMail: {
type: String,
required: false,
use: { validateUnavlblNtfMail },
message: {
type: path =>
`Список адресов E-Mail для оповещения о простое внешнего сервиса (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path => `Не указан список адресов E-Mail для оповещения о простое внешнего сервиса (${path})`,
validateUnavlblNtfMail: path =>
`Неверный формат списка адресов E-Mail для оповещения о простое внешнего сервиса (${path}), для указания нескольких адресов следует использовать запятую в качестве разделителя (без пробелов)`
}
},
//Адрес прокси-сервера
sProxyURL: {
type: String,
required: false,
message: {
type: path => `Адрес прокси-сервера в очереди обмена (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path => `Не указан адрес прокси-сервера в очереди обмена (${path})`
}
},
//Список функций сервиса
functions: defServiceFunctions(true, "functions")
});
//Схема валидации контекста сервиса
exports.ServiceCtx = new Schema({
//Идентификатор сервиса
nId: {
type: Number,
required: true,
message: {
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
required: path => `Не указан идентификатор сервиса (${path})`
}
},
//Контекст
sCtx: {
type: String,
required: false,
message: {
type: path => `Контектс сервиса (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path => `Не указан контекст сервиса (${path})`
}
},
//Дата истечения контекста
dCtxExp: {
type: Date,
required: false,
message: {
type: path => `Дата истечения контекста (${path}) имеет некорректный тип данных (ожидалось - Date)`,
required: path => `Не указана дата истечения контекста (${path})`
}
},
//Дата истечения контекста (строковое представление)
sCtxExp: {
type: String,
required: false,
message: {
type: path => `Строковое представление даты истечения контекста (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path => `Не указано строковое представление даты истечения контекста (${path})`
}
},
//Признак аутентицированности сервиса
nIsAuth: {
type: Number,
enum: [NIS_AUTH_YES, NIS_AUTH_NO],
required: true,
message: {
type: path => `Признака аутентицированности сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
enum: path => `Значение признака аутентицированности сервиса (${path}) не поддерживается`,
required: path => `Не указан признак аутентицированности сервиса (${path})`
}
},
//Признак аутентицированности сервиса (строковый код)
sIsAuth: {
type: String,
enum: [SIS_AUTH_YES, SIS_AUTH_NO],
required: true,
message: {
type: path => `Строковый код признака аутентицированности сервиса (${path}) имеет некорректный тип данных (ожидалось - String)`,
enum: path => `Значение строкового кода признака аутентицированности сервиса (${path}) не поддерживается`,
required: path => `Не указан строковый код признака аутентицированности сервиса (${path})`
}
}
});
//Схема валидации сведений о просроченных сообщениях обмена сервиса
exports.ServiceExpiredQueueInfo = new Schema({
//Идентификатор сервиса
nId: {
type: Number,
required: true,
message: {
type: path => `Идентификатор сервиса (${path}) имеет некорректный тип данных (ожидалось - Number)`,
required: path => `Не указан идентификатор сервиса (${path})`
}
},
//Количество просроченных сообщений обмена
nCnt: {
type: Number,
required: true,
message: {
type: path => `Количество просроченных сообщений обмена (${path}) имеет некорректный тип данных (ожидалось - Number)`,
required: path => `Не указано количество просроченных сообщений обмена (${path})`
}
},
//Информация о просроченных сообщениях обмена
sInfoList: {
type: String,
required: true,
message: {
type: path => `Информация о просроченных сообщениях обмена (${path}) имеет некорректный тип данных (ожидалось - String)`,
required: path => `Не указана информация о просроченных сообщениях обмена (${path})`
}
}
}).validator({ required: val => val === null || val === 0 || val });