UNPKG

@avonjs/avonjs

Version:

A fluent Node.js API generator.

120 lines (119 loc) 4.3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const node_crypto_1 = require("node:crypto"); const collect_js_1 = __importDefault(require("collect.js")); const Contracts_1 = require("../Contracts"); const Models_1 = require("../Models"); exports.default = (Parent) => { class FillsActionEvents extends Parent { /** * Store multiple model's into the storage. */ async insert(models) { return Promise.all(models.map((model) => this.store(model))); } /** * Fill event model for successful resource store. */ forResourceStore(params) { return new Models_1.Fluent({ ...this.defaultAttributes(params), name: 'Create', changes: params.resource.toSerializable(), }); } /** * Fill event model for successful resource update. */ forResourceUpdate(params) { return new Models_1.Fluent({ ...this.defaultAttributes(params), name: 'Update', changes: (0, collect_js_1.default)(params.resource.toSerializable()) .diffAssoc((0, collect_js_1.default)(params.previous.toSerializable())) .all(), original: params.previous.toSerializable(), }); } /** * Fill event model for successful resource destroy. */ forResourceDelete(params) { return new Models_1.Fluent({ ...this.defaultAttributes(params), name: 'Delete', changes: {}, original: params.resource.toSerializable(), }); } /** * Fill event model for successful resource restore. */ forResourceRestore(params) { return new Models_1.Fluent({ ...this.defaultAttributes(params), name: 'Restore', changes: {}, }); } /** * Fill event model for successful action ran. */ forActionRan(params) { return new Models_1.Fluent({ ...this.defaultAttributes(params), batch_id: params.batchId ?? (0, node_crypto_1.randomUUID)(), name: params.action.name(), original: params.previous.toSerializable(), changes: (0, collect_js_1.default)(params.resource.toSerializable()) .diffAssoc((0, collect_js_1.default)(params.previous.toSerializable())) .all(), }); } /** * Get the default attributes for creating a new action event. */ defaultAttributes(params) { return { payload: params.payload ?? {}, resource_name: params.resourceName, resource_id: params.resource.getKey(), model_type: params.resource.constructor.name, model_id: params.resource.getKey(), changes: {}, original: {}, user_id: params.userId ?? null, batch_id: params.batchId ?? (0, node_crypto_1.randomUUID)(), }; } /** * Delete resource events for ever. */ async flush(resourceName, key) { const events = await this.scopeResource(resourceName, key).all(); await Promise.all(events.map((event) => this.delete(event.getKey()))); return events; } /** * Limit query to the given resource. */ scopeResource(resourceName, key) { return this.where([ { key: 'resource_id', value: key, operator: Contracts_1.Operator.eq, }, { key: 'resource_name', value: resourceName, operator: Contracts_1.Operator.eq, }, ]); } } return FillsActionEvents; };