@egalteam/framework
Version:
Egal
261 lines (260 loc) • 12.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Model = void 0;
const GetItemsAction_1 = require("../Actions/GetItemsAction/GetItemsAction");
const CRUDAction_1 = require("../Actions/CRUDActions/CRUDAction");
const CustomAction_1 = require("../Actions/CustomAction/CustomAction");
const GetModelMetadataAction_1 = require("../Actions/GetMetadataAction/GetModelMetadataAction");
const Observer_1 = require("../Actions/NetworkRequests/SocketConnection/Observer");
const GlobalVariables_1 = require("../GlobalVariables");
const ModelConnection_1 = require("./ModelConnection");
const observer = Observer_1.EventObserver.getInstance();
class Model {
constructor(username, password, modelName) {
this.modelName = modelName;
this.username = username;
this.password = password;
this.modelItems = [];
this.modelActionList = [];
this.modelValidationRules = {};
this.modelActionsMetaData = {};
this.actionResponse = [];
this.databaseFields = [];
this.fieldsWithTypes = [];
this.allModelsMetadata = {};
this.tokenUmt = false;
this.tokenUst = '';
}
setAuthToken(token) {
GlobalVariables_1.GlobalVariables.tokenUST = token;
}
/**
* Получение метаданных модели
* @param microserviceName
* @param connectionType
*/
actionGetMetadata(microserviceName, connectionType) {
GlobalVariables_1.GlobalVariables.tokenUST = microserviceName;
const initializeGetMetadataRequest = new GetModelMetadataAction_1.GetModelMetadataAction(microserviceName, 'getMetadata', this.modelName);
new ModelConnection_1.ModelConnection().createConnection(connectionType, initializeGetMetadataRequest);
}
/**
* Получение данных модели с возможными параметрами, юзер передает все данные вместе, но в экшен их нужно передавать отдельно
* @param microserviceName
* @param connectionType
* @param withs
* @param filter
* @param orders
* @param page
* @param perPage
* @param actionName
*/
actionGetItems(microserviceName, connectionType, perPage, page, filter, withs, orders, actionName) {
let userGetItems = actionName !== undefined ? actionName : 'getItems';
GlobalVariables_1.GlobalVariables.tokenUST = microserviceName;
const initializeGetItems = new GetItemsAction_1.GetItemsAction(microserviceName, this.modelName, userGetItems);
initializeGetItems.actionParameters.with(withs);
initializeGetItems.actionParameters.filters(filter);
initializeGetItems.actionParameters.orders(orders);
if (perPage !== undefined && page !== undefined) {
initializeGetItems.actionParameters.setPagination(perPage, page);
}
new ModelConnection_1.ModelConnection().createConnection(connectionType, initializeGetItems);
}
/**
* Отличается от getItems тем, что отдельно должен быть передан айди нужной записи
* @param microserviceName
* @param connectionType
* @param id
* @param withs
* @param filter
* @param orders
*/
actionGetItem(microserviceName, connectionType, id, filter, withs, orders) {
GlobalVariables_1.GlobalVariables.tokenUST = microserviceName;
const initializeGetItem = new GetItemsAction_1.GetItemsAction(microserviceName, this.modelName, 'getItem');
initializeGetItem.actionParameters.with(withs);
initializeGetItem.actionParameters.filters(filter);
initializeGetItem.actionParameters.orders(orders);
initializeGetItem.actionParameters.setId(id);
new ModelConnection_1.ModelConnection().createConnection(connectionType, initializeGetItem);
}
/**
* Экшен обновления записи
* @param microserviceName
* @param connectionType
* @param actionParams
*/
actionUpdate(microserviceName, connectionType, actionParams) {
GlobalVariables_1.GlobalVariables.tokenUST = microserviceName;
const initializeActionUpdate = new CRUDAction_1.CRUDAction(microserviceName, this.modelName, 'update', actionParams);
new ModelConnection_1.ModelConnection().createConnection(connectionType, initializeActionUpdate);
}
/**
*
* @param microserviceName
* @param connectionType
* @param actionParams
*/
actionUpdateMany(microserviceName, connectionType, actionParams) {
GlobalVariables_1.GlobalVariables.tokenUST = microserviceName;
const initializeActionUpdate = new CRUDAction_1.CRUDAction(microserviceName, this.modelName, 'updateMany', actionParams);
new ModelConnection_1.ModelConnection().createConnection(connectionType, initializeActionUpdate);
}
/**
* Экшен обновляет записи, соответствующие заданным фильтрам
* @param microserviceName
* @param connectionType
* @param actionParams
*/
actionUpdateManyWithFilter(microserviceName, connectionType, actionParams) {
GlobalVariables_1.GlobalVariables.tokenUST = microserviceName;
const initializeActionUpdateManyWithFilter = new CRUDAction_1.CRUDAction(microserviceName, this.modelName, 'updateManyRaw', actionParams);
new ModelConnection_1.ModelConnection().createConnection(connectionType, initializeActionUpdateManyWithFilter);
}
/**
* Экшен создания записи
* @param microserviceName
* @param connectionType
* @param actionParams
* @param channelParameters
*/
actionCreate(microserviceName, connectionType, actionParams, channelParameters) {
GlobalVariables_1.GlobalVariables.tokenUST = microserviceName;
const initializeActionCreate = new CRUDAction_1.CRUDAction(microserviceName, this.modelName, 'create', actionParams, channelParameters);
new ModelConnection_1.ModelConnection().createConnection(connectionType, initializeActionCreate);
}
/**
*
* @param microserviceName
* @param connectionType
* @param actionParams
*/
actionCreateMany(microserviceName, connectionType, actionParams) {
GlobalVariables_1.GlobalVariables.tokenUST = microserviceName;
const initializeActionCreate = new CRUDAction_1.CRUDAction(microserviceName, this.modelName, 'createMany', actionParams);
new ModelConnection_1.ModelConnection().createConnection(connectionType, initializeActionCreate);
}
/**
* Экшен удаления записи
* @param microserviceName
* @param connectionType
* @param actionParams
*/
actionDelete(microserviceName, connectionType, actionParams) {
GlobalVariables_1.GlobalVariables.tokenUST = microserviceName;
const initializeActionDelete = new CRUDAction_1.CRUDAction(microserviceName, this.modelName, 'delete', actionParams);
new ModelConnection_1.ModelConnection().createConnection(connectionType, initializeActionDelete);
}
/**
*
* @param microserviceName
* @param connectionType
* @param actionParams
*/
actionDeleteMany(microserviceName, connectionType, actionParams) {
GlobalVariables_1.GlobalVariables.tokenUST = microserviceName;
const initializeActionDelete = new CRUDAction_1.CRUDAction(microserviceName, this.modelName, 'deleteMany', actionParams);
new ModelConnection_1.ModelConnection().createConnection(connectionType, initializeActionDelete);
}
/**
* Экшен удаляет записи, соответствующие заданным фильтрам
* @param microserviceName
* @param connectionType
* @param actionParams
*/
actionDeleteManyWithFilter(microserviceName, connectionType, actionParams) {
GlobalVariables_1.GlobalVariables.tokenUST = microserviceName;
const initializeActionDeleteManyWithFilter = new CRUDAction_1.CRUDAction(microserviceName, this.modelName, 'deleteManyRaw', actionParams);
new ModelConnection_1.ModelConnection().createConnection(connectionType, initializeActionDeleteManyWithFilter);
}
/**
*
* @param microserviceName
* @param actionName
* @param connectionType
* @param actionParams
*/
actionCustom(microserviceName, actionName, connectionType, actionParams, additionalParams) {
GlobalVariables_1.GlobalVariables.tokenUST = microserviceName;
const initializeActionCustom = new CustomAction_1.CustomAction(microserviceName, this.modelName, actionName, actionParams, additionalParams);
new ModelConnection_1.ModelConnection().createConnection(connectionType, initializeActionCustom);
}
/**
* позволяет получить метадату текущей модели
*/
getModelMetadata() {
return this.modelMetaData;
}
/**
* позволяет получить список доступных модели экшенов (получается с бэка в составе метадаты)
*/
getModelActionList() {
this.modelActionList = Object.keys(this.modelMetaData.actions_metadata);
return this.modelActionList;
}
/**
* позволяет получить правила валидации для всех доступных филдов
*/
getModelValidationRules() {
return this.modelValidationRules;
}
/**
* позволяет получить расширинную информацию по каждому экшену
*/
getModelActionsMetaData() {
this.modelActionsMetaData = this.modelMetaData.actions_metadata;
return this.modelActionsMetaData;
}
/**
* позволяет получить филды с типом base
*/
getModelDataBaseFields() {
this.databaseFields = this.modelMetaData.database_fields;
return this.databaseFields;
}
/**
* позволяет получить филды с указанными типами
*/
getModelFieldsWithTypes() {
this.fieldsWithTypes = this.modelMetaData.fields_with_types;
return this.fieldsWithTypes;
}
/**
* позволяет получить отфильтрованные список айтемов.
* в функцию передается массив с названиями филдов от пользователя (fields), массив всех айтемов,
* которые нужно отфильтровать (dataToFilter) и указание типа фильтрации (filterType): includes возвращаяет только филды,
* указанные в массиве, excludes исключает филды, указанные в массиве
*
* @param fields
* @param filterType
* @param dataToFilter
*/
// getSpecificFields(fields: string[], filterType: string, dataToFilter: object[]) {
// if (filterType === 'includes') return new DataFormatter(fields, dataToFilter).include();
// return new DataFormatter(fields, dataToFilter).exclude();
// }
/**
* позволяет получить уже запрошенные айтемы модели
*/
getItems() {
return this.modelItems;
}
/**
* позволяет получить уже запрошенную метадату всех моделей приложения
*/
getAllModelsMetadata() {
return this.allModelsMetadata;
}
/**
* Функция используется для установки основного домена при начале работы с моделью
* @param URL
*/
setBaseUrl(URL) {
GlobalVariables_1.GlobalVariables.httpBaseUrl = URL;
}
socketDisconnect() {
observer.broadcastSocketDisconnect('disconnect');
}
}
exports.Model = Model;