vulcain-corejs
Version:
Vulcain micro-service framework
247 lines • 11.8 kB
JavaScript
"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