UNPKG

@avonjs/avonjs

Version:

A fluent Node.js API generator.

49 lines (48 loc) 2.45 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const Avon_1 = __importDefault(require("../../Avon")); const Contracts_1 = require("../../Contracts"); const ResourceStoreResponse_1 = __importDefault(require("../Responses/ResourceStoreResponse")); const Controller_1 = __importDefault(require("./Controller")); class ResourceStoreController extends Controller_1.default { /** * Default route handler */ async __invoke(request) { const resourceClass = request.resource(); const resourceModel = request.model(); request .logger() ?.dump(`Authorizing user for "${Contracts_1.Ability.create}" access on "${request.resourceName()}".`); await resourceClass.authorizeTo(request, Contracts_1.Ability.create); request.logger()?.dump('Validating request payload for creation ...'); await resourceClass.validateForCreation(request); request.logger()?.dump(`Storing "${request.resourceName()}" ...`); const resource = await request.transaction(async (repository, transaction) => { const [data, callbacks] = request .resource() .fillForCreation(request, resourceModel); const resource = request.newResource(data); await resource.beforeCreate(request); const model = await repository.store(data); // Attention: // Here we have to run the "callbacks" in order // To avoid update/insert at the same time // Using "Promise.all" here will give the wrong result in some scenarios for (const callback of callbacks) await callback(request, model); const newResource = request.newResource(model); await newResource.afterCreate(request); await newResource.recordCreationEvent(request.all(), transaction, Avon_1.default.userId(request)); return newResource; }); request.logger()?.dump(`Stored new "${request.resourceName()}" ...`); await resource.created(request); request.logger()?.dump('Preparing response ...'); return new ResourceStoreResponse_1.default(await resource.serializeForStore(request)); } } exports.default = ResourceStoreController;