oak-domain/lib/store/modi.js

184 lines
7.5 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.

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createModiRelatedTriggers = 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, option) {
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), context, Object.assign({}, option, {
blockTrigger: false,
})]))];
}
});
});
}
exports.applyModis = applyModis;
function abandonModis(filter, context, option) {
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 = 'abandon',
_d.data = {},
_d.filter = filter,
_d.sorter = [
{
$attr: {
$$createAt$$: 1,
},
$direction: 'asc',
}
],
_d), context, Object.assign({}, option, {
blockTrigger: false,
})]))];
}
});
});
}
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, inModi = _a.inModi;
if (!inModi || ['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;
function createModiRelatedTriggers(schema) {
var _this = this;
var triggers = [];
var _loop_2 = function (entity) {
var inModi = schema[entity].inModi;
if (inModi) {
// 当关联modi的对象被删除时对应的modi也删除
triggers.push({
name: "\u5F53\u5220\u9664".concat(entity, "\u5BF9\u8C61\u65F6\uFF0C\u5220\u9664\u76F8\u5173\u8054\u8FD8\u6D3B\u8DC3\u7684modi"),
action: 'remove',
entity: entity,
when: 'after',
fn: function (_a, context, option) {
var operation = _a.operation;
return tslib_1.__awaiter(_this, void 0, void 0, function () {
var data, id, _b, _c, _d;
var _e;
return tslib_1.__generator(this, function (_f) {
switch (_f.label) {
case 0:
data = operation.data;
id = data.id;
_c = (_b = context.rowStore).operate;
_d = ['modi'];
_e = {};
return [4 /*yield*/, generateNewId()];
case 1: return [4 /*yield*/, _c.apply(_b, _d.concat([(_e.id = _f.sent(),
_e.action = 'remove',
_e.data = {},
_e.filter = {
entity: entity,
entityId: id,
},
_e), context, option]))];
case 2:
_f.sent();
return [2 /*return*/, 1];
}
});
});
},
});
}
};
for (var entity in schema) {
_loop_2(entity);
}
return triggers;
}
exports.createModiRelatedTriggers = createModiRelatedTriggers;