@vtexlab/planner-contracts
Version:
Contracts to use in an Eventual-Driven Architecture (EDA)
36 lines (35 loc) • 1.62 kB
JavaScript
import { CaseType } from "../utils/enums";
import { toKebabCase } from "../utils/transformCase";
import { v4 as uuidv4 } from "uuid";
import { getMessageContext, getMessageType } from "../decorators/context";
export class Message {
constructor(baseData) {
var _a;
this.Context = getMessageContext(this);
this.Type = getMessageType(this);
this.TopicName = `${this.Context}_${this.constructor.messageName(undefined, this.Type)}`;
this.CorrelationId = (_a = baseData.correlationId) !== null && _a !== void 0 ? _a : uuidv4();
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 = CaseType.KebabCase) {
return `${getMessageContext(this)}_${this.messageName(caseType)}`;
}
static queueName(consumerName, caseType = CaseType.KebabCase) {
return `${getMessageContext(this)}_${consumerName}_${this.messageName(caseType)}`;
}
static messageName(caseType = CaseType.KebabCase, messageType = undefined) {
switch (caseType) {
case CaseType.KebabCase:
return toKebabCase(messageType !== null && messageType !== void 0 ? messageType : getMessageType(this));
case CaseType.NoCase:
default:
return messageType !== null && messageType !== void 0 ? messageType : getMessageType(this);
}
}
}