UNPKG

vulcain-corejs

Version:
247 lines 11.8 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); const annotations_1 = require("../di/annotations"); const abstractProviderCommand_1 = require("../commands/abstractProviderCommand"); const abstractHandlers_1 = require("../pipeline/handlers/abstractHandlers"); const annotations_2 = require("../pipeline/handlers/action/annotations"); const annotations_query_1 = require("../pipeline/handlers/query/annotations.query"); const commandFactory_1 = require("../commands/commandFactory"); const applicationRequestError_1 = require("./../pipeline/errors/applicationRequestError"); const commandFactory_2 = require("../commands/commandFactory"); const annotations_property_1 = require("../schemas/builder/annotations.property"); const annotations_model_1 = require("../schemas/builder/annotations.model"); let IdArguments = class IdArguments { }; __decorate([ annotations_property_1.Property({ type: "id" }), __metadata("design:type", Object) ], IdArguments.prototype, "id", void 0); IdArguments = __decorate([ annotations_model_1.InputModel() ], IdArguments); exports.IdArguments = IdArguments; class DefaultCRUDCommand extends abstractProviderCommand_1.AbstractProviderCommand { constructor(context, commandName, schema) { super(context); } create(entity) { this.setMetricTags("create", this.provider.address, (this.schema && this.schema.name) || null, (this.context && this.context.user.tenant) || null); return this.provider.create(this.context, this.schema, entity); } async createWithSensibleData(entity) { if (entity && this.schema.info.hasSensibleData) entity = this.schema.encrypt(entity) || entity; entity = await this.create(entity); if (entity && this.schema.info.hasSensibleData) entity = this.schema.decrypt(entity) || entity; return entity; } async update(entity) { this.setMetricTags("update", this.provider.address, (this.schema && this.schema.name) || null, (this.context && this.context.user.tenant) || null); let keyProperty = this.schema.getIdProperty(); let old = await this.provider.get(this.context, this.schema, entity[keyProperty]); if (!old) throw new applicationRequestError_1.ApplicationError("Entity doesn't exist for updating : " + entity[keyProperty]); return await this.provider.update(this.context, this.schema, entity); } async updateWithSensibleData(entity) { // TODO move to provider if (entity && this.schema.info.hasSensibleData) entity = this.schema.encrypt(entity) || entity; entity = await this.update(entity); if (entity && this.schema.info.hasSensibleData) entity = this.schema.decrypt(entity) || entity; return entity; } deleteWithSensibleData(id) { return this.delete(id); } async delete(id) { this.setMetricTags("delete", this.provider.address, (this.schema && this.schema.name) || null, (this.context && this.context.user.tenant) || null); return this.provider.delete(this.context, this.schema, id); } async get(args) { this.setMetricTags("get", this.provider.address, (this.schema && this.schema.name) || null, (this.context && this.context.user.tenant) || null); let keyProperty = this.schema.getIdProperty(); if (args && !(typeof args === "object")) { args = { [keyProperty]: args }; } if (!args || !args[keyProperty]) throw new applicationRequestError_1.ApplicationError("GET: You must provide an identifier"); return await this.provider.get(this.context, this.schema, args[keyProperty]); } async getWithSensibleData(args) { let entity = await this.get(args); if (entity && this.schema.info.hasSensibleData) entity = this.schema.decrypt(entity) || entity; return entity; } getAll(options) { this.setMetricTags("getAll", this.provider.address, (this.schema && this.schema.name) || null, (this.context && this.context.user.tenant) || null); return this.provider.getAll(this.context, this.schema, options); } async getAllWithSensibleData(options) { let result = await this.getAll(options); if (result && result.value && result.value.length > 0 && this.schema.info.hasSensibleData) { let list = []; for (let entity of result.value) { if (entity) { entity = this.schema.decrypt(entity) || entity; list.push(entity); } } result.value = list; } return result; } } __decorate([ commandFactory_1.CommandEntryPoint(), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], DefaultCRUDCommand.prototype, "createWithSensibleData", null); __decorate([ commandFactory_1.CommandEntryPoint(), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], DefaultCRUDCommand.prototype, "updateWithSensibleData", null); __decorate([ commandFactory_1.CommandEntryPoint(), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", void 0) ], DefaultCRUDCommand.prototype, "deleteWithSensibleData", null); __decorate([ commandFactory_1.CommandEntryPoint(), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], DefaultCRUDCommand.prototype, "get", null); __decorate([ commandFactory_1.CommandEntryPoint(), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], DefaultCRUDCommand.prototype, "getWithSensibleData", null); __decorate([ commandFactory_1.CommandEntryPoint(), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], DefaultCRUDCommand.prototype, "getAllWithSensibleData", null); exports.DefaultCRUDCommand = DefaultCRUDCommand; function createCommandName(metadata, kind) { return metadata.schema + kind + "Command"; } let DefaultActionHandler = class DefaultActionHandler extends abstractHandlers_1.AbstractActionHandler { constructor(container) { super(container); } defineCommand(metadata) { commandFactory_2.CommandFactory.declareCommand(DefaultCRUDCommand, {}, createCommandName(metadata, "Action")); } createDefaultCommand() { let cmd = commandFactory_2.CommandFactory.createDynamicCommand(this.context, createCommandName(this.metadata, "Action")); cmd.setSchema(this.metadata.schema); return cmd; } async create(entity) { if (!entity) throw new applicationRequestError_1.ApplicationError("Entity is required"); let cmd = this.createDefaultCommand(); return cmd.createWithSensibleData(entity); } async update(entity) { if (!entity) throw new applicationRequestError_1.ApplicationError("Entity is required"); let cmd = this.createDefaultCommand(); return cmd.updateWithSensibleData(entity); } async delete(args) { let cmd = this.createDefaultCommand(); let res = await cmd.deleteWithSensibleData(args.id); return res; } }; __decorate([ annotations_2.Action({ name: "create", description: "Create a new entity", outputSchema: "" }), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], DefaultActionHandler.prototype, "create", null); __decorate([ annotations_2.Action({ name: "update", description: "Update an entity", outputSchema: "" }) // Put outputSchema empty to take the default schema , __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], DefaultActionHandler.prototype, "update", null); __decorate([ annotations_2.Action({ name: "delete", description: "Delete an entity", outputSchema: "", inputSchema: "IdArguments" }), __metadata("design:type", Function), __metadata("design:paramtypes", [IdArguments]), __metadata("design:returntype", Promise) ], DefaultActionHandler.prototype, "delete", null); DefaultActionHandler = __decorate([ __param(0, annotations_1.Inject("Container")), __metadata("design:paramtypes", [Object]) ], DefaultActionHandler); exports.DefaultActionHandler = DefaultActionHandler; let DefaultQueryHandler = class DefaultQueryHandler extends abstractHandlers_1.AbstractQueryHandler { constructor(container) { super(container); } defineCommand(metadata) { commandFactory_2.CommandFactory.declareCommand(DefaultCRUDCommand, {}, createCommandName(metadata, "Query")); } createDefaultCommand() { let cmd = commandFactory_2.CommandFactory.createDynamicCommand(this.context, createCommandName(this.metadata, "Action")); cmd.setSchema(this.metadata.schema); return cmd; } async get(args) { let cmd = this.createDefaultCommand(); return await cmd.getWithSensibleData(args); } async getAll(query, pageSize, page) { let options = { pageSize: pageSize || this.context.requestData.pageSize || 0, page: page || this.context.requestData.page || 0, query: query || {} }; let cmd = this.createDefaultCommand(); return await cmd.getAllWithSensibleData(options); } }; __decorate([ annotations_query_1.Query({ name: "get", description: "Get an entity by id", inputSchema: "IdArguments" }), __metadata("design:type", Function), __metadata("design:paramtypes", [Object]), __metadata("design:returntype", Promise) ], DefaultQueryHandler.prototype, "get", null); __decorate([ annotations_query_1.Query({ name: "all", description: "Get all entities", outputCardinality: "many" }), __metadata("design:type", Function), __metadata("design:paramtypes", [Object, Number, Number]), __metadata("design:returntype", Promise) ], DefaultQueryHandler.prototype, "getAll", null); DefaultQueryHandler = __decorate([ __param(0, annotations_1.Inject("Container")), __metadata("design:paramtypes", [Object]) ], DefaultQueryHandler); exports.DefaultQueryHandler = DefaultQueryHandler; //# sourceMappingURL=crudHandlers.js.map