oak-domain/lib/store/modi.js

144 lines
5.6 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createModiRelatedCheckers = exports.abandonModis = exports.applyModis = exports.createOperationsFromModies = void 0;
var tslib_1 = require("tslib");
var types_1 = require("../types");
var action_1 = require("../actions/action");
var lodash_1 = require("../utils/lodash");
function createOperationsFromModies(modies) {
return modies.map(function (modi) {
return {
entity: modi.targetEntity,
operation: {
id: modi.id,
action: modi.action,
data: modi.data,
filter: modi.filter,
}
};
});
}
exports.createOperationsFromModies = createOperationsFromModies;
function applyModis(filter, context) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, _b, _c;
var _d;
return tslib_1.__generator(this, function (_e) {
switch (_e.label) {
case 0:
_b = (_a = context.rowStore).operate;
_c = ['modi'];
_d = {};
return [4 /*yield*/, generateNewId()];
case 1: return [2 /*return*/, _b.apply(_a, _c.concat([(_d.id = _e.sent(),
_d.action = 'apply',
_d.data = {},
_d.filter = filter,
_d.sorter = [
{
$attr: {
$$createAt$$: 1,
},
$direction: 'asc',
}
],
_d), context, {
dontCollect: true,
blockTrigger: true,
}]))];
}
});
});
}
exports.applyModis = applyModis;
function abandonModis(filter, context) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, _b, _c;
var _d;
return tslib_1.__generator(this, function (_e) {
switch (_e.label) {
case 0:
_b = (_a = context.rowStore).operate;
_c = ['modi'];
_d = {};
return [4 /*yield*/, generateNewId()];
case 1: return [2 /*return*/, _b.apply(_a, _c.concat([(_d.id = _e.sent(),
_d.action = 'abadon',
_d.data = {},
_d.filter = filter,
_d.sorter = [
{
$attr: {
$$createAt$$: 1,
},
$direction: 'asc',
}
],
_d), context, {
dontCollect: true,
blockTrigger: true,
}]))];
}
});
});
}
exports.abandonModis = abandonModis;
function createModiRelatedCheckers(schema) {
var _this = this;
var checkers = [];
var _loop_1 = function (entity) {
var _a = schema[entity], actionType = _a.actionType, actions = _a.actions;
if (['modi', 'modiEntity', 'oper', 'operEntity'].includes(entity) || ['readOnly', 'appendOnly'].includes(actionType)) {
return "continue";
}
var restActions = (0, lodash_1.difference)(actions, action_1.appendOnlyActions);
checkers.push({
entity: entity,
action: restActions,
type: 'row',
checker: function (_a, context) {
var operation = _a.operation;
return tslib_1.__awaiter(_this, void 0, void 0, function () {
var filter, filter2, count;
var _b;
return tslib_1.__generator(this, function (_c) {
switch (_c.label) {
case 0:
filter = operation.filter;
filter2 = {
modi: {
iState: 'active',
},
};
if (filter) {
Object.assign(filter2, (_b = {},
_b[entity] = filter,
_b));
}
else {
Object.assign(filter2, {
entity: entity,
});
}
return [4 /*yield*/, context.rowStore.count('modiEntity', {
filter: filter2,
}, context, {})];
case 1:
count = _c.sent();
if (count > 0) {
throw new types_1.OakRowLockedException();
}
return [2 /*return*/, 0];
}
});
});
},
});
};
for (var entity in schema) {
_loop_1(entity);
}
return checkers;
}
exports.createModiRelatedCheckers = createModiRelatedCheckers;