@vtexlab/planner-contracts
Version:
Contracts to use in an Eventual-Driven Architecture (EDA)
40 lines (39 loc) • 1.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Message = void 0;
const enums_1 = require("../utils/enums");
const transformCase_1 = require("../utils/transformCase");
const uuid_1 = require("uuid");
const context_1 = require("../decorators/context");
class Message {
constructor(baseData) {
var _a;
this.Context = (0, context_1.getMessageContext)(this);
this.Type = (0, context_1.getMessageType)(this);
this.TopicName = `${this.Context}_${this.constructor.messageName(undefined, this.Type)}`;
this.CorrelationId = (_a = baseData.correlationId) !== null && _a !== void 0 ? _a : (0, uuid_1.v4)();
this.Timestamp = new Date();
this.Account = {
Id: baseData.accountId,
Name: baseData.accountName
};
this.AuthToken = baseData.authToken;
this.TopicName = `${this.Context}_${Message.messageName(baseData.caseTypeFormat, this.Type)}`;
}
static topicName(caseType = enums_1.CaseType.KebabCase) {
return `${(0, context_1.getMessageContext)(this)}_${this.messageName(caseType)}`;
}
static queueName(consumerName, caseType = enums_1.CaseType.KebabCase) {
return `${(0, context_1.getMessageContext)(this)}_${consumerName}_${this.messageName(caseType)}`;
}
static messageName(caseType = enums_1.CaseType.KebabCase, messageType = undefined) {
switch (caseType) {
case enums_1.CaseType.KebabCase:
return (0, transformCase_1.toKebabCase)(messageType !== null && messageType !== void 0 ? messageType : (0, context_1.getMessageType)(this));
case enums_1.CaseType.NoCase:
default:
return messageType !== null && messageType !== void 0 ? messageType : (0, context_1.getMessageType)(this);
}
}
}
exports.Message = Message;