@kitmi/data
Version:
Jacaranda Framework Data Access Model
63 lines (62 loc) • 2.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, /**
* A rule specifies the change of state will be tracked automatically.
* @module EntityFeatureRuntime_ChangeLog
*/ "default", {
enumerable: true,
get: function() {
return _default;
}
});
const _utils = require("@kitmi/utils");
const _Rules = /*#__PURE__*/ _interop_require_default(require("../Rules"));
const _allSync = require("@kitmi/validators/allSync");
const _types = require("@kitmi/types");
function _interop_require_default(obj) {
return obj && obj.__esModule ? obj : {
default: obj
};
}
function getConnector(entityModel, feature) {
const app = entityModel.db.app;
if (!app) {
entityModel.db.connector.log('warn', `"changeLog" feature does not work when used without a service container app.`);
return true;
}
return app.getService(feature.dataSource);
}
async function createLogEntry_(entityModel, feature, context, operation) {
const logEntry = {
entity: entityModel.meta.name,
operation,
which: context.options.$where,
changedAt: _allSync.Types.DATETIME.typeObject.local()
};
if (operation !== 'delete') {
logEntry.data = context.latest;
} else {
logEntry.data = context.existing;
}
if (feature.withUser) {
const user = entityModel.getValueFromContext(context, feature.withUser);
if (user == null) {
throw new _types.ApplicationError(`Cannot get value of [${feature.withUser}] from context. Entity: ${entityModel.meta.name}, operation: ${operation}`);
}
logEntry.changedBy = user;
}
// dry-run mode only checks validaty of data
if (context.options.$dryRun) {
return;
}
const clConnector = getConnector(entityModel, feature);
await clConnector.insertOne_(feature.storeEntity, logEntry, context.connOptions);
}
const _default = {
[_Rules.default.RULE_AFTER_CREATE]: (feature, entityModel, context)=>createLogEntry_(entityModel, feature, context, 'create'),
[_Rules.default.RULE_AFTER_UPDATE]: (feature, entityModel, context)=>createLogEntry_(entityModel, feature, context, 'update'),
[_Rules.default.RULE_AFTER_DELETE]: (feature, entityModel, context)=>createLogEntry_(entityModel, feature, context, 'delete')
};
//# sourceMappingURL=changeLog.js.map