UNPKG

@5minds/processcube_engine

Version:

The ProcessCube Engine. Stores and executes BPMNs.

174 lines • 9.19 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CronjobDatabaseAdapter = void 0; const inversify_1 = require("inversify"); const BaseDatabaseAdapter_1 = require("./BaseDatabaseAdapter"); const SearchQueryBuilder_1 = require("./Lib/SearchQueryBuilder"); const SequelizeConnectionManager_1 = require("./Lib/SequelizeConnectionManager"); const Cronjob_1 = require("./Models/Cronjob"); let CronjobDatabaseAdapter = class CronjobDatabaseAdapter extends BaseDatabaseAdapter_1.DatabaseAdapter { async initialize() { await super.initialize('database_adapter:cronjobs'); } async create(processDefinitionId, processModelId, flowNodeId, enabled, crontab, nextTriggerDate = null) { const cronjob = await (0, SequelizeConnectionManager_1.executeWithRetry)(async () => Cronjob_1.CronjobModel.findOne({ where: { processDefinitionId: processDefinitionId, processModelId: processModelId, startEventId: flowNodeId, deleted: false, }, }), `Find cronjob by process definition id '${processDefinitionId}' process model id '${processModelId}' and flow node id '${flowNodeId}'`); if (cronjob) { return this.update(processModelId, flowNodeId, enabled, crontab, nextTriggerDate); } await (0, SequelizeConnectionManager_1.executeWithRetry)(async () => { await Cronjob_1.CronjobModel.create({ processDefinitionId: processDefinitionId, processModelId: processModelId, startEventId: flowNodeId, enabled: enabled, crontab: crontab, nextTriggerDate: nextTriggerDate, }); }, `persist cronjob '${flowNodeId}' for process model '${processModelId}' and process definition '${processDefinitionId}'`); } async update(processModelId, flowNodeId, enabled, crontab, nextTriggerDate = null) { await (0, SequelizeConnectionManager_1.executeWithRetry)(async () => { const updateObject = { enabled: enabled, }; if (crontab) { updateObject.crontab = crontab; updateObject.nextTriggerDate = nextTriggerDate; } await Cronjob_1.CronjobModel.update(updateObject, { where: { processModelId: processModelId, startEventId: flowNodeId, deleted: false, }, }); }, `update cronjob '${flowNodeId}' of process model '${processModelId}'`); } async updateTriggerDates(processModelId, flowNodeId, lastTriggerDate, nextTriggerDate) { await (0, SequelizeConnectionManager_1.executeWithRetry)(async () => { await Cronjob_1.CronjobModel.update({ lastTriggerDate: lastTriggerDate, nextTriggerDate: nextTriggerDate, }, { where: { processModelId: processModelId, startEventId: flowNodeId, deleted: false, }, }); }, `update next trigger date for cronjob '${flowNodeId}' of process model '${processModelId}'`); } async query(query, offset, limit, sort, includeCount) { const options = { where: this.buildCronjobWhereClause(query), ...(0, SearchQueryBuilder_1.buildPagination)(offset, limit), order: [[sort?.sortBy ?? 'processModelId', sort?.sortDir ?? 'ASC']], }; if (!includeCount) { return this.getCronjobsWithoutCount(options); } return this.getCronjobsWithCount(options); } static async deleteByProcessDefinitionId(processDefinitionId, transaction) { const processDefinitionIds = Array.isArray(processDefinitionId) ? processDefinitionId : [processDefinitionId]; await (0, SequelizeConnectionManager_1.executeWithRetry)(async () => { await Cronjob_1.CronjobModel.destroy({ where: { processDefinitionId: processDefinitionIds, }, transaction: transaction, }); }, `delete cronjobs for process definition id '${processDefinitionIds.join(', ')}'`); } async getCronjob(processModelId, flowNodeId) { const cronjob = await (0, SequelizeConnectionManager_1.executeWithRetry)(async () => Cronjob_1.CronjobModel.findOne({ where: { processModelId: processModelId, startEventId: flowNodeId, deleted: false, }, }), `Find cronjob by process model id '${processModelId}' and flow node id '${flowNodeId}'`); return this.mapCronjobToRuntimeObject(cronjob); } async getActiveCronjobs() { const activeCronjobs = await (0, SequelizeConnectionManager_1.executeWithRetry)(async () => Cronjob_1.CronjobModel.findAll({ where: { enabled: true, deleted: false, }, }), `Find active cronjobs`); return activeCronjobs.map(this.mapCronjobToRuntimeObject); } async getActiveCronjobsForProcessDefinition(processDefinitionId) { const activeCronjobs = await (0, SequelizeConnectionManager_1.executeWithRetry)(async () => Cronjob_1.CronjobModel.findAll({ where: { enabled: true, processDefinitionId: processDefinitionId, deleted: false, }, }), `Find active cronjob for process definition id '${processDefinitionId}'`); return activeCronjobs.map(this.mapCronjobToRuntimeObject); } async getCronjobsWithCount(query) { const { count, rows } = await (0, SequelizeConnectionManager_1.executeWithRetry)(async () => Cronjob_1.CronjobModel.findAndCountAll(query), 'query cronjobs with count'); const cronjobs = rows.map(this.mapCronjobToRuntimeObject.bind(this)); return { cronjobs: cronjobs, totalCount: count, }; } async getCronjobsWithoutCount(query) { const results = await (0, SequelizeConnectionManager_1.executeWithRetry)(async () => Cronjob_1.CronjobModel.findAll(query), 'query cronjobs with count'); const cronjobs = results.map(this.mapCronjobToRuntimeObject.bind(this)); return { cronjobs: cronjobs, totalCount: undefined, }; } mapCronjobToRuntimeObject(dataModel) { return { processDefinitionId: dataModel.processDefinitionId, processModelId: dataModel.processModelId, startEventId: dataModel.startEventId, enabled: dataModel.enabled, crontab: dataModel.crontab, lastTriggerDate: dataModel.lastTriggerDate, nextTriggerDate: dataModel.nextTriggerDate, }; } buildCronjobWhereClause(query) { const whereClause = {}; whereClause.deleted = false; whereClause.processDefinitionId = (0, SearchQueryBuilder_1.buildSearchQueryFilter)(query.processDefinitionId, 'Cronjob.processDefinitionId', this.sequelizeInstance); whereClause.processModelId = (0, SearchQueryBuilder_1.buildSearchQueryFilter)(query.processModelId, 'Cronjob.processModelId', this.sequelizeInstance); whereClause.startEventId = (0, SearchQueryBuilder_1.buildSearchQueryFilter)(query.startEventId, 'Cronjob.startEventId', this.sequelizeInstance); whereClause.crontab = (0, SearchQueryBuilder_1.buildSearchQueryFilter)(query.crontab, 'Cronjob.crontab', this.sequelizeInstance); whereClause.lastTriggerDate = (0, SearchQueryBuilder_1.buildDateFilter)(query.lastTriggerDate, query.lastTriggerDateAfter, query.lastTriggerDateBefore); whereClause.nextTriggerDate = (0, SearchQueryBuilder_1.buildDateFilter)(query.nextTriggerDate, query.nextTriggerDateAfter, query.nextTriggerDateBefore); if (query.enabled !== undefined) { whereClause.enabled = query.enabled; } const searchQuery = Reflect.ownKeys(whereClause) .filter((key) => whereClause[key] !== undefined) .reduce((previousKeys, currentKey) => ({ ...previousKeys, [currentKey]: whereClause[currentKey] }), {}); return searchQuery; } }; exports.CronjobDatabaseAdapter = CronjobDatabaseAdapter; exports.CronjobDatabaseAdapter = CronjobDatabaseAdapter = __decorate([ (0, inversify_1.injectable)() ], CronjobDatabaseAdapter); //# sourceMappingURL=CronjobAdapter.js.map