modi中的两个update的修正

This commit is contained in:
Xu Chang 2022-10-14 14:49:14 +08:00
parent f0a524a80f
commit 43d5590228
4 changed files with 80 additions and 20 deletions

View File

@ -21,19 +21,40 @@ function createOperationsFromModies(modies) {
exports.createOperationsFromModies = createOperationsFromModies;
function applyModis(filter, context, option) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var _a, _b, _c;
var modis, _a, _b, _c;
var _d;
return tslib_1.__generator(this, function (_e) {
switch (_e.label) {
case 0:
case 0: return [4 /*yield*/, context.rowStore.select('modi', {
data: {
id: 1,
},
filter: filter,
sorter: [
{
$attr: {
$$createAt$$: 1,
},
$direction: 'asc',
}
]
}, context, Object.assign({}, option, {
blockTrigger: false,
}))];
case 1:
modis = (_e.sent()).result;
_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(),
case 2: return [2 /*return*/, _b.apply(_a, _c.concat([(_d.id = _e.sent(),
_d.action = 'apply',
_d.data = {},
_d.filter = filter,
_d.filter = {
id: {
$in: modis.map(function (ele) { return ele.id; }),
}
},
_d.sorter = [
{
$attr: {

View File

@ -10,7 +10,7 @@ var triggers = [
fn: function (_a, context, option) {
var operation = _a.operation;
return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var filter, modies, modies_1, modies_1_1, modi, targetEntity, id, action, data, filter_1, e_1_1;
var filter, modies, modies_1, modies_1_1, modi, targetEntity, id, action, data, filter_1, targets, e_1_1;
var e_1, _b;
return tslib_1.__generator(this, function (_c) {
switch (_c.label) {
@ -30,39 +30,49 @@ var triggers = [
modies = (_c.sent()).result;
_c.label = 2;
case 2:
_c.trys.push([2, 7, 8, 9]);
_c.trys.push([2, 8, 9, 10]);
modies_1 = tslib_1.__values(modies), modies_1_1 = modies_1.next();
_c.label = 3;
case 3:
if (!!modies_1_1.done) return [3 /*break*/, 6];
if (!!modies_1_1.done) return [3 /*break*/, 7];
modi = modies_1_1.value;
targetEntity = modi.targetEntity, id = modi.id, action = modi.action, data = modi.data, filter_1 = modi.filter;
return [4 /*yield*/, context.rowStore.operate(targetEntity, {
id: id,
action: action,
data: data,
return [4 /*yield*/, context.rowStore.select(targetEntity, {
data: {
id: 1,
},
filter: filter_1,
}, context, Object.assign({}, option, {
blockTrigger: true,
}))];
case 4:
_c.sent();
_c.label = 5;
targets = _c.sent();
return [4 /*yield*/, context.rowStore.operate(targetEntity, {
id: id,
action: action,
data: data,
filter: targets.result.map(function (ele) { return ele.id; }),
}, context, Object.assign({}, option, {
blockTrigger: true,
}))];
case 5:
_c.sent();
_c.label = 6;
case 6:
modies_1_1 = modies_1.next();
return [3 /*break*/, 3];
case 6: return [3 /*break*/, 9];
case 7:
case 7: return [3 /*break*/, 10];
case 8:
e_1_1 = _c.sent();
e_1 = { error: e_1_1 };
return [3 /*break*/, 9];
case 8:
return [3 /*break*/, 10];
case 9:
try {
if (modies_1_1 && !modies_1_1.done && (_b = modies_1.return)) _b.call(modies_1);
}
finally { if (e_1) throw e_1.error; }
return [7 /*endfinally*/];
case 9: return [2 /*return*/, modies.length];
case 10: return [2 /*return*/, modies.length];
}
});
});

View File

@ -25,11 +25,32 @@ export function createOperationsFromModies(modies: Modi[]): Array<{
}
export async function applyModis<ED extends EntityDict & BaseEntityDict, Cxt extends UniversalContext<ED>, Op extends OperateOption>(filter: ED['modi']['Selection']['filter'], context: Cxt, option: Op) {
const { result: modis } = await context.rowStore.select('modi', {
data: {
id: 1,
},
filter,
sorter: [
{
$attr: {
$$createAt$$: 1,
},
$direction: 'asc',
}
]
}, context, Object.assign({}, option, {
blockTrigger: false,
}));
return context.rowStore.operate('modi', {
id: await generateNewId(),
action: 'apply',
data: {},
filter,
filter: {
id: {
$in: modis.map(ele => ele.id),
}
},
sorter: [
{
$attr: {

View File

@ -23,11 +23,19 @@ const triggers: Trigger<EntityDict, 'modi', UniversalContext<EntityDict>>[] = [
for (const modi of modies) {
const { targetEntity, id, action, data, filter} = modi;
const targets = await context.rowStore.select(targetEntity as keyof EntityDict, {
data: {
id: 1,
},
filter: filter as any,
}, context, Object.assign({}, option, {
blockTrigger: true,
}));
await context.rowStore.operate(targetEntity as keyof EntityDict, {
id,
action,
data,
filter: filter as any,
filter: targets.result.map(ele => ele.id),
}, context, Object.assign({}, option, {
blockTrigger: true,
}));