@kitmi/data
Version:
Jacaranda Framework Data Access Model
76 lines (75 loc) • 2.59 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, /**
* A rule specifies the change of state will be tracked automatically.
* @module EntityFeatureRuntime_AutoCreate
*/ "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _utils = require("@kitmi/utils");
const _helpers = require("../helpers");
const _Rules = /*#__PURE__*/ _interop_require_default(require("../Rules"));
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
const _default = {
[_Rules.default.RULE_AFTER_CREATE]: async (feature, entity, context)=>{
const RelatedEntity = entity.getRelatedEntity(feature.relation);
const keyValue = entity.valueOfKey(context.latest);
const data = {
ancestorId: keyValue,
descendantId: keyValue,
depth: 0
};
await RelatedEntity.create_(data);
},
[_Rules.default.RULE_BEFORE_DELETE]: async (feature, entity, context)=>{
if (!context.options.$dryRun) {
await entity.ensureTransaction_(context.options.$ctx, `${entity.meta.name}.closureTableOwner.beforeDelete`);
}
const key = entity.meta.keyField;
const RelatedEntity = entity.getRelatedEntity(feature.relation);
const { data } = await entity.findMany_({
$select: [
key
],
$where: context.options.$where
});
await (0, _utils.eachAsync_)(data, async (toDelete)=>{
const keyValue = toDelete[key];
await RelatedEntity.deleteMany_({
ancestorId: {
$in: (0, _helpers.xrDataSet)(RelatedEntity.meta.name, {
$select: [
'ancestorId'
],
$where: {
descendantId: keyValue,
depth: {
$gt: 0
}
}
})
},
descendantId: {
$in: (0, _helpers.xrDataSet)(RelatedEntity.meta.name, {
$select: [
'descendantId'
],
$where: {
ancestorId: keyValue
}
})
}
});
});
}
};
//# sourceMappingURL=hasClosureTable.js.map