184 lines
7.5 KiB
JavaScript
184 lines
7.5 KiB
JavaScript
"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;
|