@5minds/processcube_engine
Version:
The ProcessCube Engine. Stores and executes BPMNs.
174 lines • 9.19 kB
JavaScript
;
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