对新的checker适配

This commit is contained in:
Xu Chang 2023-01-18 17:11:41 +08:00
parent 23a13c9436
commit abc5533b3e
5 changed files with 25 additions and 13 deletions

View File

@ -21,9 +21,13 @@ var CacheStore = /** @class */ (function (_super) {
CacheStore.prototype.operate = function (entity, operation, context, option) {
(0, assert_1.default)(context.getCurrentTxnId());
if (!option.blockTrigger) {
this.checkerExecutor.check(entity, operation, context);
this.checkerExecutor.check(entity, operation, context, 'before');
}
return _super.prototype.operateSync.call(this, entity, operation, context, option);
var result = _super.prototype.operateSync.call(this, entity, operation, context, option);
if (!option.blockTrigger) {
this.checkerExecutor.check(entity, operation, context, 'after');
}
return result;
};
CacheStore.prototype.sync = function (opRecords, context) {
var autoCommit = !context.getCurrentTxnId();
@ -47,7 +51,7 @@ var CacheStore = /** @class */ (function (_super) {
};
CacheStore.prototype.check = function (entity, operation, context, checkerTypes) {
(0, assert_1.default)(context.getCurrentTxnId());
this.checkerExecutor.check(entity, operation, context, checkerTypes);
this.checkerExecutor.check(entity, operation, context, undefined, checkerTypes);
};
CacheStore.prototype.select = function (entity, selection, context, option) {
var autoCommit = !context.getCurrentTxnId();

View File

@ -5,5 +5,5 @@ import { SyncContext } from 'oak-domain/lib/store/SyncRowStore';
export default class CheckerExecutor<ED extends EntityDict & BaseEntityDict, Cxt extends SyncContext<ED>> {
private checkerMap;
registerChecker<T extends keyof ED>(checker: Checker<ED, T, Cxt>): void;
check<T extends keyof ED>(entity: T, operation: ED[T]['Operation'], context: Cxt, checkerTypes?: CheckerType[]): void;
check<T extends keyof ED>(entity: T, operation: ED[T]['Operation'], context: Cxt, when?: 'before' | 'after', checkerTypes?: CheckerType[]): void;
}

View File

@ -12,7 +12,7 @@ var CheckerExecutor = /** @class */ (function () {
CheckerExecutor.prototype.registerChecker = function (checker) {
var _this = this;
var entity = checker.entity, action = checker.action, _a = checker.priority, priority = _a === void 0 ? 1 : _a, type = checker.type, conditionalFilter = checker.conditionalFilter;
var fn = (0, checker_1.translateCheckerInSyncContext)(checker);
var _b = (0, checker_1.translateCheckerInSyncContext)(checker), fn = _b.fn, when = _b.when;
var addCheckerMap = function (action2) {
var _a, _b, _c;
if (_this.checkerMap[entity] && _this.checkerMap[entity][action2]) {
@ -27,6 +27,7 @@ var CheckerExecutor = /** @class */ (function () {
type: type,
priority: priority,
fn: fn,
when: when,
filter: conditionalFilter,
});
}
@ -60,12 +61,12 @@ var CheckerExecutor = /** @class */ (function () {
addCheckerMap(action);
}
};
CheckerExecutor.prototype.check = function (entity, operation, context, checkerTypes) {
CheckerExecutor.prototype.check = function (entity, operation, context, when, checkerTypes) {
var e_1, _a;
var action = operation.action;
var checkers = this.checkerMap[entity] && this.checkerMap[entity][action];
if (checkers) {
var checkers2 = checkerTypes ? checkers.filter(function (ele) { return checkerTypes.includes(ele.type); }) : checkers;
var checkers2 = checkerTypes ? checkers.filter(function (ele) { return checkerTypes.includes(ele.type) && (!when || ele.when === when); }) : checkers;
try {
for (var checkers2_1 = tslib_1.__values(checkers2), checkers2_1_1 = checkers2_1.next(); !checkers2_1_1.done; checkers2_1_1 = checkers2_1.next()) {
var checker = checkers2_1_1.value;

View File

@ -40,9 +40,14 @@ export class CacheStore<
): OperationResult<ED> {
assert(context.getCurrentTxnId());
if (!option.blockTrigger) {
this.checkerExecutor.check(entity, operation, context);
this.checkerExecutor.check(entity, operation, context, 'before');
}
return super.operateSync(entity, operation, context, option);
const result = super.operateSync(entity, operation, context, option);
if (!option.blockTrigger) {
this.checkerExecutor.check(entity, operation, context, 'after');
}
return result;
}
sync<Cxt extends SyncContext<ED>>(opRecords: Array<OpRecord<ED>>, context: Cxt) {
@ -68,7 +73,7 @@ export class CacheStore<
check<T extends keyof ED>(entity: T, operation: ED[T]['Operation'], context: Cxt, checkerTypes?: CheckerType[]) {
assert(context.getCurrentTxnId());
this.checkerExecutor.check(entity, operation, context, checkerTypes);
this.checkerExecutor.check(entity, operation, context, undefined, checkerTypes);
}
select<

View File

@ -14,13 +14,14 @@ export default class CheckerExecutor<ED extends EntityDict & BaseEntityDict,Cxt
priority: number;
fn: (operation: ED[K]['Operation'], context: Cxt, option: SelectOption | OperateOption) => void;
type: CheckerType;
when: 'before' | 'after';
filter?: ED[K]['Update']['filter'] | ((operation: ED[K]['Operation'], context: Cxt, option: SelectOption | OperateOption) => ED[K]['Update']['filter']);
}>;
};
} = {};
registerChecker<T extends keyof ED>(checker: Checker<ED, T, Cxt>) {
const { entity, action, priority = 1, type, conditionalFilter } = checker;
const fn = translateCheckerInSyncContext(checker);
const { fn, when } = translateCheckerInSyncContext(checker);
const addCheckerMap = (action2: string) => {
if (this.checkerMap[entity] && this.checkerMap[entity]![action2]) {
let iter = 0;
@ -34,6 +35,7 @@ export default class CheckerExecutor<ED extends EntityDict & BaseEntityDict,Cxt
type,
priority,
fn,
when,
filter: conditionalFilter,
});
}
@ -70,11 +72,11 @@ export default class CheckerExecutor<ED extends EntityDict & BaseEntityDict,Cxt
}
}
check<T extends keyof ED>(entity: T, operation: ED[T]['Operation'], context: Cxt, checkerTypes?: CheckerType[]) {
check<T extends keyof ED>(entity: T, operation: ED[T]['Operation'], context: Cxt, when?: 'before' | 'after', checkerTypes?: CheckerType[]) {
const { action } = operation;
const checkers = this.checkerMap[entity] && this.checkerMap[entity]![action];
if (checkers) {
const checkers2 = checkerTypes ? checkers.filter(ele => checkerTypes.includes(ele.type)) : checkers;
const checkers2 = checkerTypes ? checkers.filter(ele => checkerTypes.includes(ele.type) && (!when || ele.when === when)) : checkers;
for (const checker of checkers2) {
const { filter } = checker;
if (filter) {